powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ключевые слова в именах полей
25 сообщений из 46, страница 1 из 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
25 сообщений из 46, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ключевые слова в именах полей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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