Описание структуры файлов Successware Database Engine (SIx) 

Структура таблиц(.DBF)

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

Записи с данными следуют за заголовком (байты располагаются последовательно) и включают в себя фактическое содержимое полей. Длина записи (в байтах) определяется суммированием указанных длин всех полей.

Запись заголовка .DBF файлa

Байты Описание
00 Тип файла:
0x03 без memo-поля
0xE5 с мемо полем
01-03 Дата последнего изменения ГГММДД, где ГГ записывается со смещением -0x30
04-07 Число записей в файле
08-09 Положение первой записи с данными
10-11 Длина одной записи с данными (включая признак удаления)
12-27 Зарезервированы
28 0x00 файл НЕ содержит структурный .NSX
0x01 файл содержит структурный .NSX
29 Зарезервирован
30-31 Зарезервировано, содержит 0x00
32..32x(n+1) Подзаписи полей, где n - число полей
32x(n+1)+1 Признак завершения записи заголовка 0x0D

    Подзаписи полей

Байты Описание
00-10 Название поля (максимально - 10 символов, если меньше 10, то дополняется пустым символом (0х00))
11 Тип данных:
C   Character (символьный)
N   Numeric (числовой)
D   Date (дата)
L   Logical (логический)
M   Memo
12-15 Зарезервировано
16 Длина поля (в байтах)
17 Длина дробной части в байтах
18 Зарезервирован
19-32 Зарезервировано

Примечания по структуре файла с данными:

  1. Данные в файле с данными начинаются с позиции, указываемой в записи заголовка в байтах 08-09.
  2. Записи с данными начинаются с байта, содержащего признак удаления. Если в этот байт занесен пробел в коде ASCII (0х20), то запись не удалялась; если же в первом байте - звездочка (0х2A), то запись удалена.
  3. За признаком удаления следуют данные из полей, названия которых находятся в подзаписях полей.
  4. Количество полей определяет число подзаписей полей. В базе данных для каждого поля существует одна подзапись поля.
  5. Поле memo состоит из : 0x0008 - 2 байта, длины записи в файле .SMT - 4 байта, номера блока в файле .SMT - 4 байта.

Структура memo файла (.SMT)

   Memo файл содержит одну запись заголовка и произвольное число блочных структур. В записи заголовка располагается указатель на следующий свободный блок и размер блока в байтах. Размер устанавливается командой SET BLOCKSIZE при создании файла. Запись заголовка начинается с нулевой позиции файла и занимает 512 байтов. За записью заголовка следуют блоки, в которых содержится   и текст memo. В файл базы данных (в memo поле) включены: длина записи и номер блока, который используются для ссылки на блоки memo. Расположение блока в файле memo определяется умножением номера блока на размер блока. Все блоки memo начинаются с четных адресов границ блоков. Блок memo может занимать более, чем один последовательный блок.

Записи с данными следуют за заголовком (байты располагаются последовательно) и включают в себя фактическое содержимое полей.

Запись заголовка .SMT файлa

Байты Описание
00-03 Расположение следующего свободного блока
04-07 Размер блока (число байт в блоке)
08-511 Произвольное выражение,обычно содержит строку "SIxMemo"
512... Блочные структуры

    Запись блока memo

Байты Описание
00-n Текст мемо поля, где n - длина текста
n
-
граница
след.
блока
Заполняется нулями (0x00)

Структура индексного файла (.NSX)

   В индексных файлах располагается одна запись заголовка, одна или больше записей заголовков тагов и одна или больше записей вершин для каждого тега. В записи заголовка находится информация о корневой вершине, текущем размере файла, длине ключа, особенностях индекса, а также представление ключа* в коде ASCII, и выражения FOR. Запись заголовка начинается с нулевой позиции файла. Во всех других записях вершин содержится атрибут, количество существующих ключей. Помимо этого, в них находится группа символов, представляющая номер записи (в таблице .DBF),  значение ключа, и если это внутренняя вершина указатель на вершину нижнего уровня. Размер каждой записи вершины равен 1024 байтам.

Запись заголовка .NSX файлa

Байты Описание
00-01 Атрибут вершины (0x0069)
02-03 Количество тагов в файле
04-05 Зарезервировано
06-09 Указатель на свободную вершину (-1, если таковая отсутствует)
10-13 Указатель на конец файла (конец файла)
14..1023 Список указателей на заголовок тега

    Запись указателя на заголовок тега

Байты Описание
00-11 Имя тага, заканчивается 0x00
12-15 Указатель на вершину тега

    Запись заголовка тега

Байты Описание
00-01 Атрибут (0x0069)
02-05 Указатель на корневую вершину
06-07 Тип ключа:
0x4000 - символьный
0x0008 - числовой
0x0020 - дата
08-09 Длина ключа
10-15 Особенности индекса (любое из нижеследующих значений, либо их сумма):
0x00000001 - индекс имеет дополнительный оператор FOR
0xFFFF0000 - индекс имеет дополнительный оператор DESC
16-272 Выражение ключа(не компилируется)
273-529 Выражение оператора FOR
530-1023 Заполняется нулями (0x00)

   
Запись внутренней вершины

Байты Описание
00 Атрибут вершины (любое из нижеследующих числовых значений либо их сумма):
0x00 - внутренняя вершина
0x01 - корневая вершина
01 Число байт, используемых для записи номеров записей из таблицы .DBF на этой странице
02-03 Количество ключей на странице
04-07 Указатель вершину нижнего уровня слева
08-1023 Список элементов внутренней вершины

   
Запись элемента внутренней вершины

Байты Описание
00-03 Указатель на вершину нижнего уровня
03-03+k Номер записи в .DBF файле, где k - количество байт используемых для записи номера записи
04+k-04+k+l Значение ключа, где l - длина ключа


Запись внешней вершины

Байты Описание
00 Атрибут вершины (любое из нижеследующих числовых значений либо их сумма):
0x01 - корневая вершина
0x02 - вершина-лист
01 Число байт, используемых для записи номеров записей из таблицы .DBF на этой странице
02-03 Количество ключей на странице
04-05 Число используемых в вершине байт
08-1023 Список элементов внешней вершины:
номер записи*,число байт занятых данным элементом, число байт из предыдущего ключа**, недостающая часть ключа (может быть упакована)***

*     - Количество байт используемых для номера записи указывает байт 01 в заголовке внешней вершины
**   - Предыдущим ключом для первого является ключ вершины верхнего уровня
*** - Eсли последовательность повторяющихся байт больше 3, то эту последовательность заменяется 3-мя байтами: первый всегда -1 (0xFF), второй указавает число повторений, третий - это повторяющееся значение. Если в значении ключа встречается байт -1(0xFF), то он заменяется последовательностью из 2-х байт -1 1 (0xFF 0x01).

Примечания по структуре индексного файла:

    Если числа используются в качестве ключей, или в качестве ключей используются даты, то они подвергаются специальной обработке. Они преобразовываются согласно нижеследующему способу таким образом, чтобы их можно было отсортировать с помощью такой же схемы упорядочения в коде ASCII, что и символы:
    а) преобразовать число (или дату) в формат с плавающей точкой IEEE,
    б) если число отрицательное, взять логическое дополнение числа (изменить на противоположные все 64 бита, 1 на 0 и 0 на 1), иначе инвертировать только самый левый бит
    в) изменить на противоположный порядок байтов с порядка Intel на порядок слева направо.

 

Hosted by uCoz