FB2.0Beta1 - gbak: WARNING:Concatenation overflow.

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
Desdechado
Сообщения: 19
Зарегистрирован: 02 авг 2005, 18:53

FB2.0Beta1 - gbak: WARNING:Concatenation overflow.

Сообщение Desdechado » 23 янв 2006, 12:13

SS, WinXP SP2 Home
база была создана в 1.5.2, Dialect 1
Ради интереса сделал ей бэкап под 1.5.2, а потом рестор под двушкой. Формат Transportable, размер страницы 8кб.
После восстановления индексов выдал

Код: Выделить всё

gbak:    committing metadata 
gbak: WARNING:Concatenation overflow. Resulting string cannot exceed 32K in length.
gbak: WARNING:    Concatenation overflow. Resulting string cannot exceed 32K in length.
причем ворнингов с десяток с одинаковым текстом, но вот таким разным форматированием.

Куда смотреть, что лечить?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 янв 2006, 15:54

конкатенацию строк в триггерах и процедурах

Desdechado
Сообщения: 19
Зарегистрирован: 02 авг 2005, 18:53

Сообщение Desdechado » 23 янв 2006, 16:27

Эта БД стабильно и без всяких глюков работала пару лет на FB1.5.
Ни в одном случае не было таких сообщений. Это что-то новое из двушки?
Она что, проверяет потенциально опасные места типа

Код: Выделить всё

DECLARE VARIABLE x VARCHAR(32000);
DECLARE VARIABLE y VARCHAR(32000);
y=x || x;
тогда почему не указано, где это?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 янв 2006, 16:55

Здрасьте. На таких местах ты бы обломился даже в FB 1.02. Был там какой-то билд, когда Клавдий вообще порубал возможность такой конкатенации - мол, если результат может быть >32к, значит такую операцию нельзя даже при компиляции допускать.
Потом это замяли, и вроде-бы оставили только для CHAR, где ясное дело, строка "добивается пробелами". А в 2.0 видать решили хотя бы warning показывать.

Ведь кто тебя знает, вдруг ты по 30К данных в каждую строку впихнешь, а потом вызовешь процедуру - процедура обломится.

А почему не указано - х.з. надо искать, того кто это делал.

p.s. какая ругань тогда по поводу недопустимости большой конкатенации стояла, это что-то...

Desdechado
Сообщения: 19
Зарегистрирован: 02 авг 2005, 18:53

Сообщение Desdechado » 23 янв 2006, 18:36

если результат может быть >32к, значит такую операцию нельзя даже при компиляции допускать
Это точно погорячились. Ведь если превысил, то обычно вываливает Arithmetic exception or string truncation. Все предельно ясно. А тут ...
Кстати, этот ворнинг на состояние БД не влияет? Можно с ней работать или она уже инвалидная?
А почему не указано - х.з. надо искать, того кто это делал.
На сорсфордже?
Ведь непонятно даже, почему оно стоит уже после индексов, когда восстановлено абсолютно все. Может, перекомпиляция в конце проходит?
А то ведь среди 200 ХП и 200 триггеров как-то невесело искать этот десяток с подозрениями... :(

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 янв 2006, 19:33

"перекомпиляция" никогда не происходит. Происходит залив метаданных в БД и отслеживание связей. warning - "предупреждение".

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 23 янв 2006, 22:56

Desdechado писал(а):Кстати, этот ворнинг на состояние БД не влияет? Можно с ней работать или она уже инвалидная?
Не влияет. Можно. Warning от Error отличаем ?
Desdechado писал(а):Ведь непонятно даже, почему оно стоит уже после индексов, когда восстановлено абсолютно все. Может, перекомпиляция в конце проходит?
Перекомпиляции при ресторе не происходит. Происходит проверка валидности BLR, залитого из бекапа. Выполняется она при коммите, как и обычный DDL.

Ответить