|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Доброго всем времени суток, уважаемые. Столкнулся со следующей проблемой при переходе с Firebird 2.5 на Firebird 3.0 В частности, в 3.0 стало нельзя указывать алиасы к полям русскими буквами более чем из 16 символов, тогда как в 2.5 это было возможно (32 русских ANSI-символа на ура работали). Вот такой запрос выполняю под FB2.5, все работает прекрасно: Код: sql 1. 2. 3.
беру этот же запрос выполняю под 3.0 и получаю: Текст ошибки Arithmetic overflow or division by zero has occurred. arithmetic exception, numeric overflow, or string truncation. string right truncation. expected length 31, actual 30. Если в алиасе изменить раскладку, то запрос выполняется: Заметил такую особенность в 3.0: Всего под алиас выделяется 32 байта (максимальное количество символов при этом латинских 31, кириллица - 15), латинские символы в алиасе занимают по одному байту, а кириллица по два, тоесть можно написать, например, так: Код: sql 1. 2. 3.
Этот запрос не выполняется, хотя общая длина символов 29, если принять ту арифметику что я писал чуть выше, то получается 26 + 2*3 = 32. Если же мы уберем любую одну латинскую букву, то запрос выполняется. Кто что думает по этому поводу? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 07:40 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Anton Ekb, ничего не думаем. Это ожидаемо для тех кто читал релиз ноты. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 07:55 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Выходит это тупиковый фактор, при переходе на 3.0 У меня большое приложение где алиасы к полям используются во всю. Переделать это если невозможно, то почти не реально. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 08:19 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Anton Ekb, ну реализация подписи выходных колонок через алиасы запроса мягко говоря странная. Оно конечно можно, но именно эта возможность никогда не работала надёжно. Жди FB4 там будет тебе алиасы и другие имена метаданных до 63 символов. Причём именно символов, а не байт. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 08:36 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Симонов Денис, Ну а что тут странного? Имеется некоторый движок по генерации отчетов, у которого на входе SQL, где все колонки названы так, чтобы пользователю было понятно их содержание, движок просто берет файл с текстом запроса, подгружает его к себе, выполняет и выводит содержимое в удобочитаемом для пользователя виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 08:56 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Anton Ekb, обычно запросы используются для извлечения и модификации данных, а представление данных это дело клиента. Поэтому что и как подписывается должно настраиваться в клиентском приложении. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 09:32 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Anton EkbСимонов Денис, Ну а что тут странного? Имеется некоторый движок по генерации отчетов, у которого на входе SQL, где все колонки названы так, чтобы пользователю было понятно их содержание, движок просто берет файл с текстом запроса, подгружает его к себе, выполняет и выводит содержимое в удобочитаемом для пользователя виде. Странно, что пользователи еще не захотели странного. Например, принудительное отбрасывание дробной части у вещественных чисел. Что автоматически требует отдельного хранения движком правил отображения полей. И тогда в тех правилах очень даже удобно хранить в том числе и названия колонок. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 09:54 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Я же в предыдущем письме объяснил зачем это надо. Денис, с какой целью ты мне говоришь, что "обычно запросы используются для извлечения и модификации данных"? (вопрос риторический) Еще раз о вышесказанном, движок отображения отчетов один, файлов sql сотни, движку пофиг какие там поля он знать об них ничего не знает, его задача подгрузить файл с запросом, выполнить его и нарисовать таблицу, поэтому в каждом файле запроса, колонки названы так чтобы пользователям нашей программы было понятно название колонок вместо всяких "PERCENT_EXEC_WORK" и т.п. Это ведь совершенно понятно должно быть?! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 10:21 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Anton Ekb, я прекрасно понимаю что у вас там сделано. У самого в своё время была такая идея, но я быстро от неё отказался потому что с именами метаданных проблемы были и раньше. Просто в трёшке длину всех идентификаторов в том числе алиасов полей и локальных переменных в ХП унифицировали. Никогда это нормально не работало. И я понимаю что вас это тормозит при переходе на трёшку, но в рамках 3.0 ничего менять в этом отношении уже не будут. Это вновь введённое ограничение исправляет ряд других багов. Нормальная работа с длинными и не ASCII идентификаторами ожидается в четвёрке, во первых там длина составляет 63 символа, а во вторых все идентификаторы будут в UTF-8, что исключает геморрой с расчётом байтов. Единственное, что придётся править компоненты доступа для того чтобы это поддерживалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 10:49 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Anton Ekb, у тебя есть выбор из многих вариантов: а) не переходить на fb3 и сидеть на 2.5 б) ждать fb4 в надежде, что там всё будет как тебе хочется в) не использовать названия колонок длиннее 16 символов г) научить свой движок отображения отчётов понимать файлы чуть более сложной структуры, т.е. добавить к запросу инф-цию о наименовании полей. Заодно можно научиться более сложному форматированию отчёта (если оно надо), уйти от ограничения в 32 символа и т.п. Решать тебе. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 10:51 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Симонов ДенисПоэтому что и как подписывается должно настраиваться в клиентском приложении. ага. я как-то делал отчетник, где в "типа xml" настраивались не только имена колонок, но и количество столбцов, группировки, и прочее. Anton Ekb его задача подгрузить файл с запросом, выполнить его и нарисовать таблицу так почему не сделать словарь соответствия имен столбцов англ-рус? Почему это надо делать именно в запросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 12:51 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
kdvтак почему не сделать словарь соответствия имен столбцов англ-рус? Почему это надо делать именно в запросе? Так проще всего, не надо моск напрягать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 13:14 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
kdv... так почему не сделать словарь соответствия имен столбцов англ-рус?... ФИБовские датасеты, кстати, умеют такое из коробки. Создают служебные таблички, в которых хранят описания полей, датасетов и тексты ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 13:36 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Всем большое спасибо, за ответы, посоветовались с коллегами и прислушавшись к вашим мнениям, решили таки парсить SQL перед его выполнением и изменять его так чтобы в нем осталось только оригинальное имя поля, а название на русском собирать в нейкий лист-словарь(field_name=alias_name) для каждого файла, а затем, после того как SQL выполнится в датасете пробежаться по его FieldList-у (программируем в Delphi) и проставить каждому полю DisplayLabel взяв значение из "словарика". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 15:47 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Вкратце отвечая на вопросы выше: "Почему нельзя так, а почему эдак..." Есть некие ограничения по работе с этим "движком", это FastCube 2.0, исходников, к сожалению, нет, поэтому все делается методом "научного тыка" этак "лишь бы заработало". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 15:51 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
авторФИБовские датасеты, кстати, умеют такое из коробки. Немного не по теме, у датасетов фибовских на трешке сейчас надо выставлять опцию psUseLargeIntField в PrepareOptions. Так, например, Код: sql 1.
теперь возвращает BIGINT вместо INTEGER. Если этого не сделать, то можно получить ошибку о не соответствии ожидаемого типа поля и актуального. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 15:57 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Anton EkbЕсть некие ограничения по работе с этим "движком", это FastCube 2.0, исходников, к сожалению, нет, поэтому все делается методом "научного тыка" этак "лишь бы заработало". Сами компоненты стырили, а документацию к ним - не догадались?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 16:03 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Anton Ekb, ну дык про это тоже в релиз нотах сказано. Не у всех таблицы меньше 2*10^9 записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 16:03 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Симонов Денисобычно запросы используются для извлечения и модификации данных, а представление данных это дело клиента. Поэтому что и как подписывается должно настраиваться в клиентском приложении. FastReport работает через sql. Там подписывать можно только в sql, например человекочитаемыми алиасами, например на русском. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 19:22 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Симонов ДенисAnton Ekb, ничего не думаем. Это ожидаемо для тех кто читал релиз ноты. RN 3.0The names for column and table aliases and for local variables names in PSQL are now restricted to 31 bytes in length. This enforcement has been made to comply with the SQL specification that requires them to be regular SQL identifiers, in accordance with the implementation-dependent limits. In Firebird, SQL identifiers are limited to 31 bytes. Ожидаемо. Кстати в SQL specification наверняка говорится про количество символов, а не байт. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 19:31 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
fb user, в SQL specification ничего не говорится про ограничение длины идентификатора. Надо понимать откуда байты взялись. Это наследие прошлого. Метаданные до 4.0 находились в устаревшей кодировки UNICODE_FSS. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 19:43 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Симонов Денисв SQL specification ничего не говорится про ограничение длины идентификатора. Надо понимать откуда байты взялись. Это наследие прошлого. Метаданные до 4.0 находились в устаревшей кодировки UNICODE_FSS. Понятно. Beta release в марте 2017-го. Кто-нибудь думал, что можно сократить количесвто фич для 4.0 и выпустить его скажем через несколько месяцев, а полный набор фич уже реализовать в 5.0, и выпустить его бету в том же марте 2017-го? Вроде ничего не теряется, но пользователи рады много больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 20:13 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
fb user, заметь там фичи разбиты на обязательные и необязательные. Необязательные могут и подсократить если будут не успевать по срокам. Так уже было с 3.0. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 20:40 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
авторВыходит это тупиковый фактор, при переходе на 3.0 Я в 2.5 столкнулся с тем же. В Delphi, работая с ФИБами и цепляясь к базе с кодировкой WIN1251, я спокойно мог делать алиасы до 32 символов. Но когда мне понадобилось составить прогу на Lazarus+IBX, цепляясь с UTF8, все алиасы выдавались капсом, а те, что длиннее 16 символов, обрезались. И это скорее проблема Firebird. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 20:49 |
|
Алиасы полей (русскими буквами) в Firebird 3.0
|
|||
---|---|---|---|
#18+
Симонов Денисзаметь там фичи разбиты на обязательные и необязательные. Необязательные могут и подсократить если будут не успевать по срокам. Так уже было с 3.0. Я не про это. Я про делать всё в несколько релизов вместо одного. Уже реализованные штуки очень вкусны. Невкусно ждать ещё полтора-два года. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 21:59 |
|
|
start [/forum/topic.php?fid=40&msg=39264492&tid=1562096]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 162ms |
0 / 0 |