Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ключевые слова в именах полей / 25 сообщений из 46, страница 1 из 2
05.02.2021, 10:56
    #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
05.02.2021, 11:06
    #40041999
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ключевые слова в именах полей
CyberMax,

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

CyberMax

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

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

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

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

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

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

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


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

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

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

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


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


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