Размер BLOB поля

2009-07-16 Пенетрантность Kovalenko Dmitry


Это опять я. Не пугайтесь :)

Я тут затянулсо недецким смыслом двух API функций 
isc_vax_integer/isc_portable_integer и набрел на код определения длины блоб 
поля через 
isc_blob_info+isc_info_blob_total_lengthisc_info_blob_total_length


Длина возвращается в 4 байтах. Не зависимо от разрядности сервера (32/64) и 
размера страницы (4096/8192)


То есть сервер длину более чем 4GB-1 не переварит

А если мне не изменяет моск, были заявы на поддержку блобов с длиной более 
4GB.


Кто виноватЪ и что делатЬ?

Коваленко Дмитрий. 





Re: Размер BLOB поля

2009-07-16 Пенетрантность Dmitry Yemanov


Kovalenko Dmitry wrote:


То есть сервер длину более чем 4GB-1 не переварит

А если мне не изменяет моск, были заявы на поддержку блобов с длиной 
более 4GB.


Вот именно что заявы :-) Это не единственное ограничение в 4ГБ для 
блоба, есть и другие, насколько я помню. Т.е. это пока фича больше 
теоретическая.



Кто виноватЪ и что делатЬ?


ЗабитЬ до поры до времени.

ЗЫ. Ты можешь залить в таблицу больше 2 млрд. записей. Но COUNT() 
возвращает INT. Usus :-)



--
Дмитрий Еманов



Re: Размер BLOB поля

2009-07-16 Пенетрантность Kovalenko Dmitry



Кто виноватЪ и что делатЬ?


ЗабитЬ до поры до времени.


Н, ща занесу в трекер со статусом АХТУНГ! :-)

---
Я щас в очередной раз тупил над алгоритмом RowsAffected

П##т, я каждый раз понимаю что все у всех написано через жопу.

isc_info_sql_records возвращает блок с внутренними кластерами

[Код из isql.epp] -
   const UCHAR count_is = *p++;
   const SSHORT l = gds__vax_integer(p, 2);
   p += 2;
   const SLONG count = gds__vax_integer(p, l); //- ВОТ ЭТО ВОТ
   p += l;
   if (count_is == count_type)
return count;


Спрашивается, какого куя оно пытается интерпретировать данные кластера без 
учета типа кластера.


Я молчу, что оно вообще нифига не контролирует границы буфера (это был в 
предыдущем приступе бешенства)


И кстати, в свете последних ахтунгов с типом запроса, не надо выпендриваться 
с count_is. Надо просто в тупую подсчитвать число затронутых рядов.


--- [IBP source]
 //в FB2 INSERT ... RETURNING имеет категорию 
isc_info_sql_stmt_exec_procedure

 // так что пока прийдется подсчитывать все изменения

 //в FB2.1 UPDATE OR INSERT без RETURNING имеет тип INSERT, но может
 // вернуть число модифицированных записей. Так что теперь мы просто
 // безоговорочно в тупую суммируем все затронутые ряды.
---

Коваленко Дмитрий.