powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Pointer page
4 сообщений из 29, страница 2 из 2
Pointer page
    #38471365
Swv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr только в исходниках, наверное. В ods.h есть структура Ods::Descriptor. В dsc_offset лежит смещение поля в буфере записи, в dsc_length - длина поля, в dsc_dtype - тип данных и т.п. По rhd_format записи читаешь формат из rdb$formats, там блоб = массиву структур Ods::Descriptor, по одной на поле таблицы.

Что-то не врублюсь куда прикрурить этот ods::Description.

Как я понимаю из чего состоит страница данных.

Сначала идет Struct data_page. у нее в конце идет массив пар смещение-длина.

По этому смещению идет struct rhd. Заголовок записи. В конце этой структуры массив данных длиной data_page.dpg_length (вот тут слегка запутался-не уверен)
Это запакованные данные. Распаковываем.

дальше как я понял идет массив NULL флагов.
И вот дальше куда прикрутить эту Ods::Descriptor?


Спасибо
...
Рейтинг: 0 / 0
Pointer page
    #38471599
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Swv,

поле RDB$FORMATS.RDB$DESCRIPTOR содержит массив Ods::Descriptor-ов. Чтобы найти поле N в распакованной записи надо знать его смещение и длину. Смещение берешь в array[N].dsc_offset, длину берешь в array[N].dsc_length. Дальше лезешь в распакованную запись и читаешь нужные байты. NULL флаг его берешь в маске, бит N. Все.
...
Рейтинг: 0 / 0
Pointer page
    #38471680
Swv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

угу...

в rdb$formats есть записи для каждой не системной таблицы и соответственно для форматов.

А как быть тогда с все же с системными таблицами? Смотрел экспертом - единой логики расположения данных не вывел )
Особенно в тех таблицах, в которых перемешаны блобы null и not null (RDB$RELATIONS).


И такой еще вопросик можно?
вот есть табличка. все та же rdb$formats. в ней всего три поля.
По распакованным данным и сегментам записи прохожу.
Видно, что сегменты дуть последовательно - сама запись и сегмент с флагом блоба.
Есть там поле RDB$descriptor. Там 8 байт. первые два байта видимо длина и следующие ИД блоба?.
Как соотнести этот ИД с нужным сегментом самой записи, чтоб прочитать значение?
...
Рейтинг: 0 / 0
Pointer page
    #38471694
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Swv,

все 8 байт это blob id, как читать блобы смотри в исходниках. Это уже выходит за рамки спросил-ответил.
...
Рейтинг: 0 / 0
4 сообщений из 29, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Pointer page
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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