powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ключевые слова в именах полей
46 сообщений из 46, показаны все 2 страниц
Ключевые слова в именах полей
    #40041992
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть некая таблица. И в ней один из разработчиков создал поле с именем VALUE, которое является ключевым словом. Услужливый IBExpert безо всякого на то разрешения взял его в кавычки и отработал скрипт. В итоге на этом поле сломалась генерация запросов и еще пара вещей. Я посмотрел в RDB$RELATION_FIELDS - никаких пометок, о том что наименование поля является ключевым словом и к нему надо обращаться через кавычки - не нашел.
В связи с этим хотелось бы поговорить с опытными людьми:
1. Имеет ли смысл просить реализовать запрет на уровне сервера на создание имен таблиц/полей и прочего с кавычками?
2. Как найти другие такие поля, без владения списком ключевых слов, который к тому же меняется от версии сервера? Ответ скорее всего - никак, но вдруг.
3. Стоит ли просить разработчиков сделать системную таблицу со списком ключевых слов с флагом RESERVED для данной версии сервера, в т.ч. FUTURE RESERVED? Например, в 2.5.5 туда можно было бы добавить DELETING, INSERTING, UPDATING и пользователи знали бы, что эти слова в будущих версиях будут зарезервированы. То же самое с LOCALTIMESTAMP - в 3.0.3 добавляем как FR, а в 3.0.4 уже как RESERVED. Вплоть до того, что запретить создавать новые поля с пометкой FR.
3. Проверяете ли вы свою БД на предмет таких наименований полей?
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40041999
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

а чем кавычки-то не угодили? Нормальная практика. Все придут к тому, что все поля будут в кавычках. Не знаю, как в стандарте, но в общем-то устоявшееся решение.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042009
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

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

CyberMaxПроверяете ли вы свою БД на предмет таких наименований полей?

Сам налетал на COMMENT в 1.5 потом аукнулось при переходе на 2.5

И на RANK и BODY при переходе на 3.0

З.Ы. Даже если сейчас какой-то фичи в FB нет желательно смотреть что есть стандартного в других СУБД. С RANK я реально протупил, всё таки оконные функции часть стандарта. А вот с BODY уже сложнее, кто же знал что в ФБ пакеты введут
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042019
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

Ненормальная практика. По крайней мере, в FB.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042021
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Сам налетал на COMMENT в 1.5 потом аукнулось при переходе на 2.5

Загрузил список ключевых слов и протестил базу. Сработала проверка на COMMENT (про который ты написал) - но я не припомню никаких проблем с этим словом. И сейчас спокойно добавляю поля с таким именем. С удивлением узнал, что NAME - это тоже незарезервированное ключевое слово. IBExpert не выделяет это слово жирным шрифтом, и как-то не думал об этом. Имхо, незарезервированные слова все-таки можно использовать без всяких последствий (без учета перехода в RESERVED в будущем).
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042027
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

проблем с незарезевироваными ключевыми словами нет, но всё равно стараюсь их избегать. Тот же эксперт может их случайно закавычить.

NAME стало ключевым незарезевированым словом в 4.0. Но вот на это я точно забью. В других СУБД уже давно
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042031
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
KreatorXXI,

Ненормальная практика. По крайней мере, в FB.


FB в этом плане мало чем отличается от других СУБД. В том же MySql такие слова обязаны заключаться в ``
А их утилиты администрирования настойчиво вообще все поля и таблицы в бектики закручивают
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042046
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
Есть некая таблица. И в ней один из разработчиков создал поле с именем VALUE, которое является ключевым словом. Услужливый IBExpert безо всякого на то разрешения взял его в кавычки и отработал скрипт. В итоге на этом поле сломалась генерация запросов и еще пара вещей.


Генерацию запросов и еще пару вещей надо допиливать, чтобы они на такой фигне не ломались, а не на эксперта пенять.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042057
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

чутьё на ключевые слова надо вырабатывать. Либо сверять со списком из releasenotes.
Я в 1997 году сделал специфическую базу на InterBase 5, после чего из скрипта эта база создается без проблем на всех последующих версиях IB и FB, вплоть до нынешних, без единой проблемы с ключевыми словами.

Предугадать появление ключевых слов, аналогичных именам столбцов и таблиц, крайне трудно. Например, global - кто бы знал, что его зарезервируют.
KreatorXXIВсе придут к тому, что все поля будут в кавычках.
двойные кавычки - зло. Это адски ухудшает читаемость и ручное написание запросов.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042079
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv

KreatorXXIВсе придут к тому, что все поля будут в кавычках.

двойные кавычки - зло. Это адски ухудшает читаемость и ручное написание запросов.
Соглашусь. Особенно про читаемость. Какие есть варианты решения проблемы? Посмотрел у себя. Есть поля с именем "Value". Надо было назвать "Value0", "Value1" или "ValueOf..."? Для меня это странное решение. Кавычки - меньшее зло, опять же для меня.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042084
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

тоже мне проблема. С DATE, YEAR как то разобрались
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042087
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

как разобрались? А я где был? Я по-тупому в кавычки обёртываю.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042090
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
а не на эксперта пенять.
Тогда хотелку... выставил пимпочку в настройках "кавычки не пущщать" и оно вместо тихого окавычивания сует эксепшн юзеру.
Или несколько вариантов на выбор:
1. авто (как сейчас)
2. все в кавычки принудительно
3. все без кавычек принудительно
4. каждый раз спрашивать, когда требуются кавычки.

Для себя предпочел бы пункт3.

CyberMax

1. Имеет ли смысл просить реализовать запрет на уровне сервера на создание имен таблиц/полей и прочего с кавычками?
А триггер на метаданные не проканает?
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042093
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

в смысле как? Я имею ввиду разобрались какие имена полям придумывать. Просто тупо не называю так поля, приходится голову включать чтобы имя поля как-то менее абстрактно отражало его смысл
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042097
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

такой триггер реализовать весьма не тривиально. Потому что в этом триггере ты максимум получишь имя объекта метаданных и текст SQL запроса. То есть придётся парсить запрос на предмет где там должно быть ключевое слово, а где это имя поля. Да ещё и придётся переписывать этот триггер каждый раз при миграции на новую версию
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042109
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvдвойные кавычки - зло. Это адски ухудшает читаемость и ручное написание запросов.

Да. Но у автора-то генератор запросов, который их пишет не ручками и эти запросы никто
кроме сервера не читает, а он железный, выдержит.

Лично я в генерируемых запросах уже давно начал использовать кавычки принудительно и не
парюсь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042141
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
NAME стало ключевым незарезевированым словом в 4.0.

Судя по RN, в 3.0 уже (так в "Руководство по языку SQL СУБД Firebird 3.0" написано). В 2.5 еще не.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042143
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Генерацию запросов и еще пару вещей надо допиливать, чтобы они на такой фигне не ломались, а не на эксперта пенять.

Дело абсолютно не в генераторе запросов. Дело в использовании ключевых слов в именах полей. И в том, что IBE, зная, что это слово ключевое, молча оборачивает его в кавычки. И это видишь только тогда, когда текст запроса (иногда случайно) мелькнет перед глазами.
Я не хочу, чтобы в базе были поля, для использования которых надо их обрамлять в кавычки. Но у меня нет способа хоть как-то защититься от этого. Ни в сервере, ни в инструменте.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042150
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
Я не хочу, чтобы в базе были поля, для использования которых надо их обрамлять в кавычки. Но у меня нет способа хоть как-то защититься от этого. Ни в сервере, ни в инструменте.
Т.е. когда ты пишешь CREATE TABLE VALUE (...) тебе сервер не выдаёт ошибку ?
Или сервер добавляет кавычки ?
Или IBE переписывает твой запрос ?
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042151
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
И в том, что IBE, зная, что это слово ключевое, молча оборачивает его в кавычки.


Ну, допустим, с некоторых пор он это не молча делает. Попробуй VALUE в редакторе таблиц в качестве имени поля ввести.
Но от других разработчиков это не защитит.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042159
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
Т.е. когда ты пишешь CREATE TABLE VALUE (...) тебе сервер не выдаёт ошибку ?
Или сервер добавляет кавычки ?
Или IBE переписывает твой запрос ?

Сервер выдает ошибку, если создавать таблицу ручками, как ты написал.
Кавычки добавляет IBExpert, когда генерирует запрос для создания таблицы.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042162
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky
CyberMax1. Имеет ли смысл просить реализовать запрет на уровне сервера на создание имен таблиц/полей и прочего с кавычками?
А триггер на метаданные не проканает?
Симонов Денис
такой триггер реализовать весьма не тривиально
В чём проблема отследить двойные кавычки в DDL ? "Легально" они могут присутствовать только в тексте DEFAULT или COMMENT, т.е. внутри строки, насколько я понимаю
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042163
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
Кавычки добавляет IBExpert, когда генерирует запрос для создания таблицы.
Ну так вот тебе ответ на твой вопрос - не пользуйся оглуплятором и будет тебе счастье.
А если кто воспользовался - в чём проблема снять скрипт DDL хоть со всей БД и поискать там ужасные двойные кавычки ?
Я уж не говорю о поиске только в diff'е с предыдущей версией оного скрипта.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042165
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Ну, допустим, с некоторых пор он это не молча делает. Попробуй VALUE в редакторе таблиц в качестве имени поля ввести.

В версии от 7 января - молча. Это позднее появилось?
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042170
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
IBExpert
Ну, допустим, с некоторых пор он это не молча делает. Попробуй VALUE в редакторе таблиц в качестве имени поля ввести.

В версии от 7 января - молча. Это позднее появилось?


Это раньше появилось, должен появляться хинт с предупреждением. У меня появляется.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042172
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Способов решить проблему - много. Одним из них я уже воспользовался (справочник ключевых слов).
Ответ на вопросы 1 и 2 уже получил. Спасибо.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042175
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Это раньше появилось, должен появляться хинт с предупреждением. У меня появляется.

У меня - нету.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042176
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
Ответ на вопросы 1 и 2 уже получил. Спасибо.


это радует :)
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042180
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

А про системную таблицу имеет смысл в трекер писать? Или сразу - нет?
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042186
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladВ чём проблема отследить двойные кавычки в DDL ? "Легально" они могут присутствовать только в тексте DEFAULT или COMMENT, т.е. внутри строки, насколько я понимаю

про ловлю именно двойных кавычек я как то не подумал. Не только в DEFAULT, ещё и в вычисляемых полях.

COMMENT вообще DDL триггерами не ловится, как и GRANT/REVOKE. Просил я это в трекере, но Адриано ответил что нельзя так как эти операторы не подпадают под шаблон CREATE|ALTER|DROP

А синтаксиса в стиле MySQL где COMMENT можно указывать прямо в тексте определения поля у нас нет.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042189
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax
hvlad,

А про системную таблицу имеет смысл в трекер писать? Или сразу - нет?
Со списком зарезервированных слов ? Не возражаю :)
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042192
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.02.2021 15:39, hvlad пишет:
>
> Со списком зарезервированных слов ? Не возражаю :)
>

идея хорошая.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042202
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042204
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.02.2021 15:55, CyberMax пишет:
> CORE-6482 < http://tracker.firebirdsql.org/browse/CORE-6482>

проголосовал
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042263
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как вариант:

create table rdb$reywords(
keyword_name varchar(64),
v10 smallint,
v15 smallint,
v20 smallint,
v21 smallint,
v30 smallint,
v40 smallint,
v99 smallint
)

список слов и набор флагов, фанаты могут замутить руками "прям щас" на любой версии ФБ, а там гладишь DE. нечто виртуальное-автоматическое соорудит.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042264
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.02.2021 17:18, Ivan_Pisarevsky пишет:
> а там гладишь DE. нечто виртуальное-автоматическое соорудит.

даже если таки да, то в версии 4.Х, как минимум.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042267
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
4.Х, как минимум
Да я просто к тому, что счастье в виде таблицы можно соорудить и без знания СИ и права коммита в проект. Коль оно реально надо, давайте сделаем и прямо тут скрипт и выложим.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042272
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.02.2021 17:28, Ivan_Pisarevsky пишет:
> Да я просто к тому, что счастье в виде таблицы можно соорудить и без знания СИ и права коммита в проект.
>Коль оно реально надо, давайте сделаем и прямо тут скрипт и выложим.

для разных версий он будет разный.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042291
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
для разных версий он будет разный.
Ты мою мысль не понял. Мысль как раз в одинаковости таблицы для всех.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042292
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky

и набор флагов


А флаги то зачем? Просто каждая версия будет иметь свою таблицу и всё.

В компонентах доступа такая таблица была бы полезна. Например, в FIBPlus есть функция NeedQuote, которая сейчас работает по списку ключевых слов прописанному в коде. В других компонентах наверняка тоже что-то подобное есть. При наличии двух подключений к серверам разных версий можно будет работать с разным набором ключевых полей.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042307
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory
А флаги то зачем?
чтобы таблица была ровно одна на все версии сервера.
ggreggory
Просто каждая версия будет иметь свою таблицу и всё.
вьюха поверх единой таблицы.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042310
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggoryНапример, в FIBPlus есть функция NeedQuote, которая сейчас работает по списку ключевых
слов прописанному в коде.

А могла бы возвращать "dialect = 3" с тем же результатом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042346
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что должно быть с такой таблицей при миграции 3.0 -> 4.x -> 5.x ?
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042461
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

хрень какая. у нас был один реально крутой программер в 1992 году, который именно так и называл переменные.
Геморрой был, но никто не помер.
Реальный гемор в программах был из-за выполняемых кусков кода типа execute statement, которые собирались по условиям.
Отлаживать это было невозможно. Но такое писал другой программер, который потом основал свой бизнес,
и преуспел, и т.д.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042488
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой
kdv
типа execute statement
О чем вообще речь?
Basil A. Sidorov
И что должно быть с такой таблицей при миграции 3.0 -> 4.x -> 5.x ?
Какие миграции?

Вы чего курите? простая таблица и простой селект из нее. Все.

Был простой вопрос: Иметь где-то список зарезервированных слов, чтобы с ним можно было так или иначе работать, чтобы он не был размазан ровным слоем по релизотам разных версий.
Простой ответ: Держать в базе табличку список этих самых слов. И этой табличке вовсе необязательно быть системной.
...
Рейтинг: 0 / 0
Ключевые слова в именах полей
    #40042490
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky

Был простой вопрос: Иметь где-то список зарезервированных слов, чтобы с ним можно было так или иначе работать,


Этот список, к слову, предосталяют компоненты доступа через схемы метаданных. С учетом версии сервера.
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ключевые слова в именах полей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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