powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подмена запроса на стороне сервера Firebird
25 сообщений из 80, страница 1 из 4
Подмена запроса на стороне сервера Firebird
    #40086521
Andrey_RedCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток, и такой вопрос, возможно ли на стороне сервера перевернуть имя столбца таблицы в нижний регистр? Например софтина(астериск) шлёт запрос вида select * from sippeers where name='xxxx'; и если в базе создавать столбцы с именем в верхнем регистре астериск их не видит, а если с нижним то при таком запросе получает отлуп от сервера бд, с ошибкой что такого столбца нет. Поэтому мне и нужно чтобы когда на сервер приходит запрос колонки в верхнем регистре, он переворачивал его в нижний. Использую Firebird 3.0 ос Debian 10, коннект asterisk с бд через odbc драйвер
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086522
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СУБД сохраняют регистр имён объектов (таблиц, представлений, колонок и т.п.), если при создании это имя было взято в кавычки.
Разумеется, такие имена надо и дальше кавычить.
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086524
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_RedCat, используй 1-й диалект.
ему пофигу регистр в именах объектов.
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086530
Andrey_RedCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. получается мне в настройках самой бд нужно поменять диалект? Сейчас вроде стоит 3й
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086531
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_RedCat
Т.е. получается мне в настройках самой бд нужно поменять диалект? Сейчас вроде стоит 3й
диалект задаётся при создании базы.
если его не указать, то будет 3-й (по умолчанию).
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086532
Andrey_RedCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
СУБД сохраняют регистр имён объектов (таблиц, представлений, колонок и т.п.), если при создании это имя было взято в кавычки.
Разумеется, такие имена надо и дальше кавычить.

К сожалению я даже предположить не могу где в исходниках астериска и что мне придётся править для этого)
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086534
Andrey_RedCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий
Andrey_RedCat
Т.е. получается мне в настройках самой бд нужно поменять диалект? Сейчас вроде стоит 3й
диалект задаётся при создании базы.
если его не указать, то будет 3-й (по умолчанию).

Значит нужно 6удет пересоздать бд
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086535
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийиспользуй 1-й диалект.

Не издевайся над чайником, он ведь реально пойдёт в этот обрыв...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086536
Andrey_RedCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Мимопроходящийиспользуй 1-й диалект.

Не издевайся над чайником, он ведь реально пойдёт в этот обрыв...

Чайник электрический?
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086542
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_RedCat
Например софтина(астериск) шлёт запрос вида select * from sippeers where name='xxxx'; и если в базе создавать столбцы с именем в верхнем регистре астериск их не видит, а если с нижним то при таком запросе получает отлуп от сервера бд, с ошибкой что такого столбца нет.
Запрос таки select * from sippeers
или select * from "sippeers"
или select * from SIPPEERS
или select * from "SIPPEERS"?
А таблицу создаешь create table sippeers ...?
или ?

Где фактический ДДЛ и полный текст ошибки?
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086579
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_RedCat,

Все очень просто. Не надо создавать объекты с именами в двойных кавычках, и всё.
http://www.ibase.ru/ibfaq#dtproblem
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086593
Andrey_RedCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky
Andrey_RedCat
Например софтина(астериск) шлёт запрос вида select * from sippeers where name='xxxx'; и если в базе создавать столбцы с именем в верхнем регистре астериск их не видит, а если с нижним то при таком запросе получает отлуп от сервера бд, с ошибкой что такого столбца нет.
Запрос таки select * from sippeers
или select * from "sippeers"
или select * from SIPPEERS
или select * from "SIPPEERS"?
А таблицу создаешь create table sippeers ...?
или ?

Где фактический ДДЛ и полный текст ошибки?

Создавал сначала без кавычек получал ошибку вида res_config_odbc.c:1224 require_odbc: Realtime table sippeers@Firebird requires column 'name', but that column does not exist!
Затем создал так:
CREATE TABLE sippeers (
"id" INTEGER generated by default as identity primary key,
"name" VARCHAR(40) NOT NULL,
"ipaddr" VARCHAR(45),
"port" INTEGER, ...
И получил ошибку вида

[Jul 28 08:10:11] WARNING[8805]: res_config_odbc.c:122 custom_prepare: SQL Prepare failed! [SELECT * FROM sippeers WHERE name = ? AND host = ?]
[Jul 28 08:10:11] WARNING[8805]: res_odbc.c:538 ast_odbc_print_errors: SQL Prepare returned an error: HY000: [ODBC Firebird Driver][Firebird]Dynamic SQL Error
SQL error code = -206
Column unknown
NAME
At line 1, column 32
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086594
Andrey_RedCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv
Andrey_RedCat,

Все очень просто. Не надо создавать объекты с именами в двойных кавычках, и всё.
http://www.ibase.ru/ibfaq#dtproblem

Это то понятно, но проблема в том что астериск отправляет сам запрос без кавычек и соответственно не находит названия таблицы созданной маленькими буквами в кавычках
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086602
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а не проще ли пойти по проторенной дорожке и подружить его с бд, с которой он хорошо работает?
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086615
Andrey_RedCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дегтярев Евгений
а не проще ли пойти по проторенной дорожке и подружить его с бд, с которой он хорошо работает?

Не смог победить зависимости драйвера ODBC MariaDB/MySQL, чет как-то на дебиане 10 не задалось с этим
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086619
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_RedCat
Это то понятно
Тогда посмотрите, наконец, внимательно на собственный скрипт и осознайте, таки, что вы сами, собственными руками и создали проблему.
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086624
Andrey_RedCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
Andrey_RedCat
Это то понятно
Тогда посмотрите, наконец, внимательно на собственный скрипт и осознайте, таки, что вы сами, собственными руками и создали проблему.

Честно, я не могу никак понять в чем проблема, вернее проблема то ясна, но вот решения я найти не могу
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086628
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще должно работать и без кавычек.
Как костыль можно создать оба столбца - с кавычками и без.
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086632
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня одного смущает NAME в названии поля?

Andrey_RedCat
Column unknown
NAME


Переименуй столбец и проверь как будет работать
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086633
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_RedCat
но вот решения я найти не могу
Зачем искать-то???
kdvВсе очень просто. Не надо создавать объекты с именами в двойных кавычках, и всё.Andrey_RedCatЗатем создал так:
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE sippeers (
"id" INTEGER generated by default as identity primary key,
"name" VARCHAR(40) NOT NULL,
"ipaddr" VARCHAR(45),
"port" INTEGER, ...

Или, если уж вам так неймётся кавычить идентификаторы, то:
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE sippeers (
"ID" INTEGER generated by default as identity primary key,
"NAME" VARCHAR(40) NOT NULL,
"IPADDR" VARCHAR(45),
"PORT" INTEGER, ...
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086658
Andrey_RedCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
Andrey_RedCat
но вот решения я найти не могу
Зачем искать-то???
kdvВсе очень просто. Не надо создавать объекты с именами в двойных кавычках, и всё.
Andrey_RedCatЗатем создал так:
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE sippeers (
"id" INTEGER generated by default as identity primary key,
"name" VARCHAR(40) NOT NULL,
"ipaddr" VARCHAR(45),
"port" INTEGER, ...

Или, если уж вам так неймётся кавычить идентификаторы, то:
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE sippeers (
"ID" INTEGER generated by default as identity primary key,
"NAME" VARCHAR(40) NOT NULL,
"IPADDR" VARCHAR(45),
"PORT" INTEGER, ...


Когда создаются объекты без кавычек астериск ругается
Код: sql
1.
2.
3.
4.
[Jul 28 08:32:19] WARNING[8771]: res_config_odbc.c:1224 require_odbc: Realtime table sippeers@Firebird requires column 'name', but that column does not exist!
[Jul 28 08:32:19] WARNING[8771]: res_config_odbc.c:1224 require_odbc: Realtime table sippeers@Firebird requires column 'ipaddr', but that column does not exist!
[Jul 28 08:32:19] WARNING[8771]: res_config_odbc.c:1224 require_odbc: Realtime table sippeers@Firebird requires column 'port', but that column does not exist!
[Jul 28 08:32:19] WARNING[8771]: res_config_odbc.c:1224 require_odbc: Realtime table sippeers@Firebird requires column 'regseconds', but that column does not exist!


Потому-что сервер бд возвращает имена в верхнем регистре
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086666
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_RedCat
[Jul 28 08:10:11] WARNING[8805]: res_config_odbc.c:122 custom_prepare: SQL Prepare failed! [SELECT * FROM sippeers WHERE name = ? AND host = ?]
а вот это кто пишет?
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086672
Sergey A. Volkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrey_RedCat
Дегтярев Евгений
а не проще ли пойти по проторенной дорожке и подружить его с бд, с которой он хорошо работает?

Не смог победить зависимости драйвера ODBC MariaDB/MySQL, чет как-то на дебиане 10 не задалось с этим

Есть пакет asterisk-mysql с модулями app_mysql, cdr_mysql, res_config_mysql они слинкованы с клиентом mariadb и можно работать на прямую без ODBC.

Выше упоминали использование dialect 1, но не сказали, что его можно настроить в подключении (odbc.ini).
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086682
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче, я кажется понял.
- Софтина запрашивает мету по таблице
- Ничего не знает про регистры возвращаемых имен полей
- Проверяет for field in fields if field <> requiredfield then Error
- Генерит запросы в нижнем регистре

В таких ситуациях, наверно, и двойное поле не поможет. Потому что и '"name"', и 'NAME' <> 'name'.

Но вообще это косяк софтины (астериска), может, им направить реквест?
Можно, конечно, пропатчить клиентскую либу ФБ или вообще сам сервер. Но правильней все-таки устранить косяк в астериске

P.S. Хотя закавыченное поле проходит проверку меты... может, и выгорит вариант с двумя полями
...
Рейтинг: 0 / 0
Подмена запроса на стороне сервера Firebird
    #40086684
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_RedCat
Дегтярев Евгений
а не проще ли пойти по проторенной дорожке и подружить его с бд, с которой он хорошо работает?

Не смог победить зависимости драйвера ODBC MariaDB/MySQL, чет как-то на дебиане 10 не задалось с этим

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


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