Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 ODBC Pattern Value Argument и системные таблицы Firebird  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50808

У примерно каталожных функций в ODBC 3.* аргумент, определяющий имя таблицы, по умолчанию
является маской поиска. К счастью, правила этой маски в основном совпадают с LIKE, но есть
одна маленькая проблема: тип CHAR() в системных таблицах и вытекающие из него ведущие пробелы.

Текущий ODBC драйвер обходит это, добавляя в конец маски знак процента, но в общем случае
это нехорошо, поскольку тот захватывает не только пробелы и находятся таблицы, которые не
должны бы находиться. В некоторых случаях он его не добавляет и это опять нехорошо,
поскольку не находятся таблицы, которые должны.

Замена LIKE на SIMILAR TO в принципе может помочь, но при этом отваливаются индексы:
"rdb$relation_name similar to 'AAAA *' escape '\'" выдаёт "PLAN (RDB$RELATIONS NATURAL)".

Собственно, вопрос: хотя бы в пятой версии Firebird нельзя ли перековать поля системных
таблиц на VARCHAR?..

Posted via ActualForum NNTP Server 1.5

8 июл 20, 18:17    [22164299]     Ответить | Цитировать Сообщить модератору
 Re: ODBC Pattern Value Argument и системные таблицы Firebird  [new]
hvlad
Member

Откуда:
Сообщений: 10993
Dimitry Sibiryakov
У примерно каталожных функций в ODBC 3.* аргумент, определяющий имя таблицы, по умолчанию
является маской поиска.
Что значит "примерно" ? Приведи пример

Dimitry Sibiryakov
тип CHAR() в системных таблицах и вытекающие из него ведущие пробелы.
Ведущие ???
8 июл 20, 18:49    [22164318]     Ответить | Цитировать Сообщить модератору
 Re: ODBC Pattern Value Argument и системные таблицы Firebird  [new]
hvlad
Member

Откуда:
Сообщений: 10993
Если у тебя проблема таки с конечными пробелами и тем, что LIKE их учитывает при сравнении, т.е.

маска для имени таблицы "%X" превращается в
а) RDB$RELATION_NAME LIKE "%X" и не ловит имена с пробелами в имени после последней X, или
б) RDB$RELATION_NAME LIKE "%X%" и ловит лишние имена с не пробельными символами после X

то что мешает писать запрос как-то так

RDB$RELATION_NAME LIKE "%X%" AND TRIM(RDB$RELATION_NAME) LIKE "%X"

?

Сообщение было отредактировано: 8 июл 20, 19:09
8 июл 20, 19:06    [22164328]     Ответить | Цитировать Сообщить модератору
 Re: ODBC Pattern Value Argument и системные таблицы Firebird  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50808

hvlad
Что значит "примерно" ? Приведи пример

Следует читать как "у примерно половины каталожных функций".
https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/arguments-in-catalog-functions

hvlad
Ведущие ???
"Хвостовые" опять же.

PS: Походу, мне не стоит даже пытаться думать о двух вещах сразу...

Posted via ActualForum NNTP Server 1.5

8 июл 20, 19:08    [22164330]     Ответить | Цитировать Сообщить модератору
 Re: ODBC Pattern Value Argument и системные таблицы Firebird  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50808

hvlad
что мешает писать запрос как-то так

Очевидно, кончившиеся таблетки от тупости. Спасибо.

Posted via ActualForum NNTP Server 1.5

8 июл 20, 19:35    [22164346]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить