powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Алиасы полей (русскими буквами) в Firebird 3.0
25 сообщений из 57, страница 1 из 3
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264380
Anton Ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем времени суток, уважаемые.

Столкнулся со следующей проблемой при переходе с Firebird 2.5 на Firebird 3.0
В частности, в 3.0 стало нельзя указывать алиасы к полям русскими буквами более чем из 16 символов, тогда как в 2.5 это было возможно (32 русских ANSI-символа на ура работали).

Вот такой запрос выполняю под FB2.5, все работает прекрасно:
Код: sql
1.
2.
3.
SELECT
    'Field Value' AS "Алиас состоящий из 30 символов"
FROM RDB$DATABASE



беру этот же запрос выполняю под 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.


Если в алиасе изменить раскладку, то запрос выполняется:
Запрос и результат
Код: sql
1.
2.
3.
SELECT
    'Field Value' AS "Fkbfc cjcnjzobq bp 30 cbvdjkjd"
FROM RDB$DATABASE



Результат:



Заметил такую особенность в 3.0:
Всего под алиас выделяется 32 байта (максимальное количество символов при этом латинских 31, кириллица - 15), латинские символы в алиасе занимают по одному байту, а кириллица по два, тоесть можно написать, например, так:
Код: sql
1.
2.
3.
SELECT
    'Field Value' AS "abcdefghigklmnopqrstuvwxyzЖЙЫ"
FROM RDB$DATABASE


Этот запрос не выполняется, хотя общая длина символов 29, если принять ту арифметику что я писал чуть выше, то получается 26 + 2*3 = 32.
Если же мы уберем любую одну латинскую букву, то запрос выполняется.

Кто что думает по этому поводу?
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264384
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Ekb,

ничего не думаем. Это ожидаемо для тех кто читал релиз ноты.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264391
Anton Ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выходит это тупиковый фактор, при переходе на 3.0
У меня большое приложение где алиасы к полям используются во всю. Переделать это если невозможно, то почти не реально.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264394
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Ekb,

ну реализация подписи выходных колонок через алиасы запроса мягко говоря странная. Оно конечно можно, но именно эта возможность никогда не работала надёжно.

Жди FB4 там будет тебе алиасы и другие имена метаданных до 63 символов. Причём именно символов, а не байт.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264402
Anton Ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Ну а что тут странного? Имеется некоторый движок по генерации отчетов, у которого на входе SQL, где все колонки названы так, чтобы пользователю было понятно их содержание, движок просто берет файл с текстом запроса, подгружает его к себе, выполняет и выводит содержимое в удобочитаемом для пользователя виде.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264416
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Ekb,

обычно запросы используются для извлечения и модификации данных, а представление данных это дело клиента. Поэтому что и как подписывается должно настраиваться в клиентском приложении.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264436
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton EkbСимонов Денис,

Ну а что тут странного? Имеется некоторый движок по генерации отчетов, у которого на входе SQL, где все колонки названы так, чтобы пользователю было понятно их содержание, движок просто берет файл с текстом запроса, подгружает его к себе, выполняет и выводит содержимое в удобочитаемом для пользователя виде.
Странно, что пользователи еще не захотели странного. Например, принудительное отбрасывание дробной части у вещественных чисел. Что автоматически требует отдельного хранения движком правил отображения полей. И тогда в тех правилах очень даже удобно хранить в том числе и названия колонок.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264459
Anton Ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я же в предыдущем письме объяснил зачем это надо.
Денис, с какой целью ты мне говоришь, что "обычно запросы используются для извлечения и модификации данных"? (вопрос риторический)

Еще раз о вышесказанном, движок отображения отчетов один, файлов sql сотни, движку пофиг какие там поля он знать об них ничего не знает, его задача подгрузить файл с запросом, выполнить его и нарисовать таблицу, поэтому в каждом файле запроса, колонки названы так чтобы пользователям нашей программы было понятно название колонок вместо всяких "PERCENT_EXEC_WORK" и т.п.
Это ведь совершенно понятно должно быть?!
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264489
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Ekb,

я прекрасно понимаю что у вас там сделано. У самого в своё время была такая идея, но я быстро от неё отказался потому что с именами метаданных проблемы были и раньше. Просто в трёшке длину всех идентификаторов в том числе алиасов полей и локальных переменных в ХП унифицировали. Никогда это нормально не работало. И я понимаю что вас это тормозит при переходе на трёшку, но в рамках 3.0 ничего менять в этом отношении уже не будут. Это вновь введённое ограничение исправляет ряд других багов.

Нормальная работа с длинными и не ASCII идентификаторами ожидается в четвёрке, во первых там длина составляет 63 символа, а во вторых все идентификаторы будут в UTF-8, что исключает геморрой с расчётом байтов. Единственное, что придётся править компоненты доступа для того чтобы это поддерживалось.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264492
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Ekb,

у тебя есть выбор из многих вариантов:
а) не переходить на fb3 и сидеть на 2.5
б) ждать fb4 в надежде, что там всё будет как тебе хочется
в) не использовать названия колонок длиннее 16 символов
г) научить свой движок отображения отчётов понимать файлы чуть более сложной структуры, т.е. добавить к запросу инф-цию о наименовании полей.
Заодно можно научиться более сложному форматированию отчёта (если оно надо), уйти от ограничения в 32 символа и т.п.

Решать тебе.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264608
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисПоэтому что и как подписывается должно настраиваться в клиентском приложении.
ага. я как-то делал отчетник, где в "типа xml" настраивались не только имена колонок, но и количество столбцов, группировки, и прочее.

Anton Ekb его задача подгрузить файл с запросом, выполнить его и нарисовать таблицу
так почему не сделать словарь соответствия имен столбцов англ-рус? Почему это надо делать именно в запросе?
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264626
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvтак почему не сделать словарь соответствия имен столбцов англ-рус? Почему это надо делать
именно в запросе?

Так проще всего, не надо моск напрягать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264649
Фотография Товарищ ефрейтор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv...
так почему не сделать словарь соответствия имен столбцов англ-рус?...
ФИБовские датасеты, кстати, умеют такое из коробки.
Создают служебные таблички, в которых хранят описания полей, датасетов и тексты ошибок.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264792
Anton Ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо, за ответы, посоветовались с коллегами и прислушавшись к вашим мнениям, решили таки парсить SQL перед его выполнением и изменять его так чтобы в нем осталось только оригинальное имя поля, а название на русском собирать в нейкий лист-словарь(field_name=alias_name) для каждого файла, а затем, после того как SQL выполнится в датасете пробежаться по его FieldList-у (программируем в Delphi) и проставить каждому полю DisplayLabel взяв значение из "словарика".
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264798
Anton Ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вкратце отвечая на вопросы выше: "Почему нельзя так, а почему эдак..."
Есть некие ограничения по работе с этим "движком", это FastCube 2.0, исходников, к сожалению, нет, поэтому все делается методом "научного тыка" этак "лишь бы заработало".
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264807
Anton Ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторФИБовские датасеты, кстати, умеют такое из коробки.
Немного не по теме, у датасетов фибовских на трешке сейчас надо выставлять опцию psUseLargeIntField в PrepareOptions.
Так, например,
Код: sql
1.
select count(*) from table

теперь возвращает BIGINT вместо INTEGER.
Если этого не сделать, то можно получить ошибку о не соответствии ожидаемого типа поля и актуального.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264813
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton EkbЕсть некие ограничения по работе с этим "движком", это FastCube 2.0, исходников, к
сожалению, нет, поэтому все делается методом "научного тыка" этак "лишь бы заработало".

Сами компоненты стырили, а документацию к ним - не догадались?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264815
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Ekb,

ну дык про это тоже в релиз нотах сказано. Не у всех таблицы меньше 2*10^9 записей.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264993
fb user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисобычно запросы используются для извлечения и модификации данных, а представление данных это дело клиента. Поэтому что и как подписывается должно настраиваться в клиентском приложении.
FastReport работает через sql. Там подписывать можно только в sql, например человекочитаемыми алиасами, например на русском.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39264998
fb user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис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 наверняка говорится про количество символов, а не байт.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39265005
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fb user,

в SQL specification ничего не говорится про ограничение длины идентификатора.
Надо понимать откуда байты взялись. Это наследие прошлого. Метаданные до 4.0 находились в устаревшей кодировки UNICODE_FSS.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39265015
fb user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисв SQL specification ничего не говорится про ограничение длины идентификатора.
Надо понимать откуда байты взялись. Это наследие прошлого. Метаданные до 4.0 находились в устаревшей кодировки UNICODE_FSS.
Понятно.

Beta release в марте 2017-го.
Кто-нибудь думал, что можно сократить количесвто фич для 4.0 и выпустить его скажем через несколько месяцев, а полный набор фич уже реализовать в 5.0, и выпустить его бету в том же марте 2017-го?
Вроде ничего не теряется, но пользователи рады много больше.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39265022
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fb user,

заметь там фичи разбиты на обязательные и необязательные. Необязательные могут и подсократить если будут не успевать по срокам. Так уже было с 3.0.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39265024
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВыходит это тупиковый фактор, при переходе на 3.0
Я в 2.5 столкнулся с тем же. В Delphi, работая с ФИБами и цепляясь к базе с кодировкой WIN1251, я спокойно мог делать алиасы до 32 символов. Но когда мне понадобилось составить прогу на Lazarus+IBX, цепляясь с UTF8, все алиасы выдавались капсом, а те, что длиннее 16 символов, обрезались. И это скорее проблема Firebird.
...
Рейтинг: 0 / 0
Алиасы полей (русскими буквами) в Firebird 3.0
    #39265038
fb user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисзаметь там фичи разбиты на обязательные и необязательные. Необязательные могут и подсократить если будут не успевать по срокам. Так уже было с 3.0.
Я не про это. Я про делать всё в несколько релизов вместо одного. Уже реализованные штуки очень вкусны. Невкусно ждать ещё полтора-два года.
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Алиасы полей (русскими буквами) в Firebird 3.0
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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