Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / 11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке. / 17 сообщений из 17, страница 1 из 1
30.06.2009, 11:39
    #36065649
IDS Admin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
День добрый!

Переношу БД с 9.40 Win на 11.50FC4 RHEL5. Сделал dbExport/dbImport. Схему не менял.

Один и тот же код ХП стал давать разные результаты. Начали разбираться, оказалось, что в некоторых случаях, очередная операции конкатенации строк возвращает неожиданный результат. А именно, строку с несколькими сотнями пробелов в конце.

Вот например результатом работы такого кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Define Line VarChar( 255 , 0 );
Define Delim Char( 1 );
Define n_date Date;

Let Delim = '|';Let Line = '';

set debug file to '/tmp/debug.txt'; trace on;
	Let Line = '123' || Delim;
	Let Line = Line || nvl(to_char(n_date, "%d%m%Y"),"") || Delim;
	Let Line = Line || 'abc';
trace off;

Будет не строка "123|01012009|abc", a "123|01012009| <и еще много пробелов>"

А вот соответствующая трасса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
trace on

expression:(|| "123", Delim)
evaluates to 123| 
let Line = 123| 
expression:(|| (|| Line, (nvl (<procedure> to_char, n_date, "%d%m%Y"), "")), Delim)
evaluates to 123|28042009| 
let Line = 123|28042009|                   <370xSpace>
expression:(|| Line, "abc")
evaluates to 123|28042009|                   <250xSpace>
let Line = 123|28042009|                   <250xSpace>
trace off

Что характерно, спасает trim после каждой операции конкатенации. Но это не выход, т.к. дебажить 50 МБ кода просто нет времени (((

Может кто-нибудь знает, в чем проблема?
Возможно, это решается установкой какой-либо переменной окружения, либо еще как.

Спасибо заранее!
...
Рейтинг: 0 / 0
30.06.2009, 18:47
    #36066653
IDS Admin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
Пока лишь раскопал, что проблема в to_char () функции...
...
Рейтинг: 0 / 0
01.07.2009, 11:06
    #36067369
GVF112GVF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
IDS Admin,

Какое значение имеет переменная IFX_PAD_VARCHAR ?

С уважением,
Вадим.
...
Рейтинг: 0 / 0
01.07.2009, 13:36
    #36067883
IDS Admin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
GVF112GVF,

IFX_PAD_VARCHAR вообще не задана. Ни на новом (11.50 FC4 RHEL5) ни на старом (9.40 Win2003) серверах.
...
Рейтинг: 0 / 0
01.07.2009, 16:11
    #36068418
GVF112GVF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
IDS Admin,

Попробуй задать ... :)

С уважением,
Вадим.
...
Рейтинг: 0 / 0
08.07.2009, 11:11
    #36079288
IDS Admin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
GVF112GVF,

Спасибо, попробовал.

Результат тот же. Ставил значение 0 и 1. Результат не меняется.

Может как-то можно включить более детальную трассировку?
...
Рейтинг: 0 / 0
08.07.2009, 12:59
    #36079673
Тан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
у них с конкатенацией как-то все время странно, то одно отпадет, то другое.
тут видимо в какой-то момент начинает возвращаться не varchar, а char.

а в простом SQL добавляет пробелы или это причуда SPL?
у меня на 11.50UC4 не получилось воспроизвести в SQL
...
Рейтинг: 0 / 0
08.07.2009, 18:36
    #36080595
IDS Admin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
Тан,

Это SPL.

В том то и дело, что в обычном SQL все работает нормально. Делал SELECT соответствующих полей.
Типы полей (char/varchar) выбирал специально, чтобы повторить SPL код.
...
Рейтинг: 0 / 0
08.07.2009, 23:14
    #36080830
GVF112GVF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
IDS Admin,

Fix Pack 11.50.xC4
-------------------------------
IC59289 NVL FUNCTION RETURNS EMPTY SPACE WHEN THE RETURN RESULT INVOLVES VARCHAR CONCATENATION

С уважением,
Вадим.
...
Рейтинг: 0 / 0
09.07.2009, 15:50
    #36082408
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
GVF112GVFI
IC59289 NVL FUNCTION RETURNS EMPTY SPACE WHEN THE RETURN RESULT INVOLVES VARCHAR CONCATENATION
С этим NVL всегда серьезные баги были во многих версиях (и какой индус эту функцию писал ?).
Помню, что программеры сильно на него (NVL) обиженны были и старались его вообще не применять (использовать свои доморощенные функции).
...
Рейтинг: 0 / 0
10.07.2009, 09:18
    #36083575
IDS Admin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
Спасибо.

Через неделю придет обладатель аккаунта и я скачаю версию 11.50.FC4E, April 2009
с фиксами.


Кстати, может сразу имеет смысл перейти на 11.50FC5, о которой в соседней ветке идет речь?

Судя по
...
Рейтинг: 0 / 0
10.07.2009, 09:20
    #36083576
IDS Admin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
...
Рейтинг: 0 / 0
16.07.2009, 16:27
    #36093921
ef37
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
Это тянется еще с семерки, проявляет себя на строках больше 255 символов.
Пользовать TRIM() надо было.
...
Рейтинг: 0 / 0
20.07.2009, 21:20
    #36099548
IDS Admin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
GVF112GVF,

GVF112GVFFix Pack 11.50.xC4
-------------------------------
IC59289 NVL FUNCTION RETURNS EMPTY SPACE WHEN THE RETURN RESULT INVOLVES VARCHAR CONCATENATION

Оказалось, что не в этом дело. Поставил самое новое, что нашли на ibm.com (IBM Fix Central).
Теперь в Known Issues'ах есть пометка о том, что этот баг (IC59289) пофиксили. Там стоит дата Апрель 2009. А поведение кода никак не изменилось. Все еще добавляется эта куча пробелов к строке в коде ХП на SPL.

Т.е. дело не в этом баге...

Может есть что-то новее, чем 11.50 FC4?
...
Рейтинг: 0 / 0
20.07.2009, 21:21
    #36099550
IDS Admin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
ef37Это тянется еще с семерки, проявляет себя на строках больше 255 символов.
Пользовать TRIM() надо было.

Ну не буду же я применять TRIM() после каждого оператора конкатенации и для каждой новой части строки...

В 9ке то нормально работает.
...
Рейтинг: 0 / 0
20.07.2009, 21:54
    #36099580
GVF112GVF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
IDS Admin,

В конце месяца выйдет IDS 11.50.xC5 там и посмотрим.

С уважением,
Вадим.
...
Рейтинг: 0 / 0
28.07.2009, 21:08
    #36114447
IDS Admin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке.
GVF112GVF,

В версии IDS 11.50 FC5 под Linux баг исправлен.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / 11.50 FC4. Баг в операторе конкатенации? Добавляется 350 пробелов к строке. / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]