SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » OO API: IMessageMetadata.getCharSet (FB3.0) (есть ли внутри неонка)
OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1650] Mon, 20 February 2023 15:55 Переход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
Здравствуйте, ВСЕ!

Допиливаем наш внутренний форк IBX на предмет поддержки ftGuid (и до кучи ftBytes, ftVarBytes).
(навеяно топиком https://www.sqlru.net/index.php/t/228/)
Если делать это посредством классического ISC_API, то после препарирования запроса приходится ещё лезь в системные таблицы для определения чарсета поля на предмет OCTETS.
А это лишние раундтрипы. Не критично, но на тухлом канале неприятно.
В новомодном OO API у интерфейса IMessageMetadata, который призван заменить XSQLDA/XSQLVAR, есть метод getCharSet.
В связи с чем вопрос:
порождает ли этот метод обращения к серверу (к тем же системным таблицам), или же имеет всё готовое унутри, на блюдечке с голубой каёмочкой?
Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1651 является ответом на сообщение #1650] Mon, 20 February 2023 16:05 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 364
Зарегистрирован: August 2022
Senior Member
МП писал(а) Mon, 20 February 2023 14:55
Если делать это посредством классического ISC_API, то после препарирования запроса приходится ещё лезь в системные таблицы для определения чарсета поля на предмет OCTETS.
Я наверняка чего-то не помню, но - зачем тут лезть в таблицы ?
Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1652 является ответом на сообщение #1651] Mon, 20 February 2023 16:17 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
hvlad
Я наверняка чего-то не помню, но - зачем тут лезть в таблицы ?
а как иначе TIBCustomDataSet догадается, что нужно создавать не ftString?
с 4-кой проще, а вот с более ранними версиями (в том числе 3-кой) никак.
Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1653 является ответом на сообщение #1652] Mon, 20 February 2023 17:09 Переход к предыдущему сообщениюПереход к следующему сообщению
Dmitry Kovalenko в настоящее время не в онлайне  Dmitry Kovalenko
Сообщений: 51
Зарегистрирован: December 2022
Member
МП писал(а) Mon, 20 February 2023 16:17
hvlad
Я наверняка чего-то не помню, но - зачем тут лезть в таблицы ?
а как иначе TIBCustomDataSet догадается, что нужно создавать не ftString?
с 4-кой проще, а вот с более ранними версиями (в том числе 3-кой) никак.
Кодовая страница CHAR/VARCHAR хранится в младшем байте XSQLVAR::sqlsubtype. Это работает начиная с IB4.0.

Кодовая страница текстового BLOB, начиная с FB2.1, хранится в младшем байте XSQLVAR::sqlscale.

Кодовая страница OCTETS имеет фиксированный ID равный 1.
Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1654 является ответом на сообщение #1653] Mon, 20 February 2023 17:20 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
Dmitry Kovalenko
Кодовая страница CHAR/VARCHAR хранится в младшем байте XSQLVAR::sqlsubtype. Это работает начиная с IB4.0.
SQL> create table OCTABLE(OCT CHAR(12) CHARACTER SET OCTETS);
SQL> set SQLDA_DISPLAY ON;
SQL> select OCT from OCTABLE;

INPUT message field count: 0

OUTPUT message field count: 1
01: sqltype: 452 TEXT Nullable scale: 0 subtype: 0 len: 12 charset: 1 OCTETS
  :  name: OCT  alias: OCT
  : table: OCTABLE  owner: MASTER
isql мухлюет?

зы: касаемо чарсетов БЛОБОВ я помню твой пост в "старом" форуме.

[Обновления: Mon, 20 February 2023 17:22]

Известить модератора

icon14.gif  Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1655 является ответом на сообщение #1653] Mon, 20 February 2023 17:41 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
проверил.
isql таки "мудит".

спасибо за sqlsubtype! Very Happy
Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1668 является ответом на сообщение #1655] Tue, 21 February 2023 20:16 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 332
Зарегистрирован: June 2022
Senior Member
Цитата:
isql таки "мудит".
isql сейчас использует OO API. И выводит не классический SQLDA, а именно метаданные входных и выходных сообщений.
Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1676 является ответом на сообщение #1668] Wed, 22 February 2023 18:16 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
sim_84 писал(а) Tue, 21 February 2023 20:16
Цитата:
isql таки "мудит".
isql сейчас использует OO API. И выводит не классический SQLDA, а именно метаданные входных и выходных сообщений.
ну и нахера наёбывать наивных программеров?
XSQLDA не смотрят юзеры зелёные.
так зачем же?!
это ж ведь очень и очень!
Да! Да!
Но... нет!
©

[Обновления: Wed, 22 February 2023 18:17]

Известить модератора

Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1683 является ответом на сообщение #1676] Sat, 25 February 2023 23:08 Переход к предыдущему сообщениюПереход к следующему сообщению
 в настоящее время не в онлайне 
Сообщений: 198
Зарегистрирован: September 2022
Senior Member
Дяденьки. А есть ли возможность при использовании новомодного OO API указывать, где расположена клиентская библиотеки fbclient.so/dll ?
Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1684 является ответом на сообщение #1683] Sun, 26 February 2023 01:32 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 415
Зарегистрирован: August 2022
Senior Member
LoadLibrary()/dload() работают независимо от API библиотеки.
Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1685 является ответом на сообщение #1684] Sun, 26 February 2023 02:19 Переход к предыдущему сообщениюПереход к следующему сообщению
 в настоящее время не в онлайне 
Сообщений: 198
Зарегистрирован: September 2022
Senior Member
SD писал(а) Sun, 26 February 2023 01:32
LoadLibrary()/dload() работают независимо от API библиотеки.
А как собрать приложение, чтобы можно было именно руками LoadLibrary() вызвать?
Я подключил ibase.h из include, а также IdlFbInterfaces.h из include/firebird, прилинковал fbclient_ms.lib из /lib, и всё, при запуске сразу получаю "А где наша любимая библиотека fblient.dll?"
С FB из C++ пока не работал (только с IBPP немного), подскажите, пожалуйста.
Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1686 является ответом на сообщение #1685] Sun, 26 February 2023 02:55 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 82
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
SetDllDirectoryW ?
Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1687 является ответом на сообщение #1686] Sun, 26 February 2023 08:17 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 332
Зарегистрирован: June 2022
Senior Member
В отличии от is API тебе надо динамически загрузить только одну функцию fb_get_master_interface();
Все. Это точка входа.
Re: OO API: IMessageMetadata.getCharSet (FB3.0) [сообщение #1688 является ответом на сообщение #1687] Sun, 26 February 2023 13:02 Переход к предыдущему сообщению
 в настоящее время не в онлайне 
Сообщений: 198
Зарегистрирован: September 2022
Senior Member
sim_84 писал(а) Sun, 26 February 2023 08:17
В отличии от is API тебе надо динамически загрузить только одну функцию fb_get_master_interface();
Все. Это точка входа.
Во, спасибо!
Предыдущая тема: Версии записей.
Следующая тема: Открыта регистрация на Firebird Conf 2023
Переход к форуму:
  


Текущее время: Wed Dec 18 14:26:16 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00778 секунд