powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Ввод слова rdb$db_key: как научить IBE не делать с него UPPERCASE с кавычками ?
4 сообщений из 4, страница 1 из 1
Ввод слова rdb$db_key: как научить IBE не делать с него UPPERCASE с кавычками ?
    #38607230
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сабж.

Каждый раз как ввожу это, получаю результат, который совершенно не нужен (см аттач).
Как запретить ему вносить такие "корректировки" ?
...
Рейтинг: 0 / 0
Ввод слова rdb$db_key: как научить IBE не делать с него UPPERCASE с кавычками ?
    #38607266
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид, он вроде поступает так только с полями, которые имеют название из зарезервированного слова.
...
Рейтинг: 0 / 0
Ввод слова rdb$db_key: как научить IBE не делать с него UPPERCASE с кавычками ?
    #38607609
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
CREATE TABLE T (RDB$DB_KEY INTEGER, RDB$RECORD_VERSION INTEGER)


Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 39.
RDB$DB_KEY.
Код: sql
1.
CREATE TABLE T ("RDB$DB_KEY" INTEGER, "RDB$RECORD_VERSION" INTEGER)


Ok.

Названия полей "RDB$DB_KEY" и "RDB$RECORD_VERSION" в системных таблицах идут без кавычек.
Т.е. чтобы правильно сгенерировать create table по системным таблицам, нужно знать что RDB$DB_KEY и RDB$RECORD_VERSION нужно обрамлять кавычками. И то же самое нужно знать при генерации автоматического update или insert.
Причём такой sql:
Код: sql
1.
select RDB$DB_KEY, "RDB$DB_KEY", RDB$RECORD_VERSION, "RDB$RECORD_VERSION"  from T


отрабатывает правильно, т.е. разделяет системный RDB$DB_KEY и пользовательский "RDB$DB_KEY".

Ещё примеры:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create table T (F integer); --ok

select F from T; --ok
select F, F from T; --ok
select F, "F" from T; --ok

select RDB$DB_KEY from T  --ok
select RDB$DB_KEY, RDB$DB_KEY from T  -- в полях разные значения, т.е. баг.
select RDB$DB_KEY, "RDB$DB_KEY" from T  --Column does not belong to referenced table. Dynamic SQL Error. SQL error code = -206. Column unknown. RDB$DB_KEY.

select RDB$RECORD_VERSION from T  --ok
select RDB$RECORD_VERSION, RDB$RECORD_VERSION from T -- ok
select RDB$RECORD_VERSION, "RDB$RECORD_VERSION" from T  --Column does not belong to referenced table. Dynamic SQL Error. SQL error code = -206. Column unknown. RDB$RECORD_VERSION.

alter table T add RDB$DB_KEY integer -- Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 1, column 19. RDB$DB_KEY.
alter table T add "RDB$DB_KEY" integer -- ok
select RDB$DB_KEY, "RDB$DB_KEY" from T -- ok

alter table T add RDB$RECORD_VERSION integer -- Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 1, column 19. RDB$RECORD_VERSION
alter table T add "RDB$RECORD_VERSION" integer -- ok
select RDB$RECORD_VERSION, "RDB$RECORD_VERSION" from T -- ok


Выводы:

для системных полей:
- есть бага при select RDB$DB_KEY, RDB$DB_KEY from T.
- поля не доступны при использовании двойных кавычек, т.е. FIELD <> "FIELD".

для обычных полей:
- поля доступны как с кавычками, так и без, т.е. FIELD = "FIELD".

Т.е. есть некая неочевидность. Плюс с такими полями нельзя работать используя только системные таблицы, т.к. нужно специально знать список зарезервированных слов. Это будет вполне нормально если список таких слов будет в какой-нибудь системной таблице, и тогда можно просто сопоставлять и обрамлять кавычками, но возможно что существует и более перспективное решение (а пока что список зарезервированных слов должна знать программа которая обращается к FB. IBExpert например не умеет работать с полем "RDB$RECORD_VERSION", и со всеми подобными полями что возникнут в будущих версиях).
...
Рейтинг: 0 / 0
Ввод слова rdb$db_key: как научить IBE не делать с него UPPERCASE с кавычками ?
    #38607855
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидКаждый раз как ввожу это, получаю результат, который совершенно не нужен (см аттач).
Как запретить ему вносить такие "корректировки" ?

Не пользоваться Code Insight.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Ввод слова rdb$db_key: как научить IBE не делать с него UPPERCASE с кавычками ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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