ПРИЛОЖЕНИЕ G: РАСШИРЕННЫЕ ТИПЫ КЛЮЧЕЙ
01.01.2007
Это приложение описывает коды расширенных типов ключей и внутренний формат храненния расширенных типов ключей, поддерживаемых Btrieve.
КОДЫ РАСШИРЕННЫХ ТИПОВ КЛЮЧЕЙ
Задавайте расширенный тип ключа, используя код из таблицы на Рисунке G.1.
------------------------------------¬
¦ ¦
¦ Тип Код ¦
¦ ¦
¦-----------------------------------¦
¦ string 0 ¦
¦ integer 1 ¦
¦ float 2 ¦
¦ date 3 ¦
¦ time 4 ¦
¦ decimal 5 ¦
¦ money 6 ¦
¦ logical 7 ¦
¦ numeric 8 ¦
¦ bfloat 9 ¦
¦ lstring 10 ¦
¦ zstring 11 ¦
¦ unsigned binary 14 ¦
¦ autoincrement 15 ¦
L------------------------------------
Рисунок G.1
Коды расширенных типов ключей
РАСШИРЕННЫЕ ТИПЫ КЛЮЧЕЙ
- AUTOINCREMENT (Автоинкремент)
-
Ключ-автоинкремент - целое число, длиной или 2 или 4 байта. Btrieve сортирует ключи-автоинкременты по их абсолютному значению, сравнивая значения хранящиеся в различных записях в слове справа налево.
Ключи-автоинкременты позволяют Вам задавать ключ, для которого Btrieve будет прибавлять значение ключа при каждом добавлении записи в файл.
К ключам-автоинкрементам применяются следующие ограничения:
- Ключ-автоинкремент не допускает значения-дубликаты.
- Ключ-автоинкремент не может быть сегментированным или быть сегментом другого ключа.
- Ключ-автоинкремент не может перекрывать другой ключ.
Следующие абзацы описывают, как Btrieve обрабатывает значения ключей-автоинкрементов при добавлении записей в файл.
ЕСЛИ ВЫ ЗАДАЕТЕ ЗНАЧЕНИЕ "ДВОИЧНЫЙ 0" ДЛЯ КЛЮЧА-АВТОИНКРЕМЕНТА, Btrieve присвоит значение ключу по следующему принципу:
Если добавляемая запись - первая запись в файле, Btrieve присвоит ключу-автоинкременту значение 1 и добавит запись в файл.
Если в файле уже существуют записи, Btrieve присвоит ключу значение на единицу большее самого старшего существующего абсолютного значения в файле и добавит запись в файл.
ЕСЛИ ВЫ ЗАДАЕТЕ НЕНУЛЕВОЕ ЗНАЧЕНИЕ ДЛЯ КЛЮЧА-АВТОИНКРЕМЕНТА, Btrieve добавит запись в файл и будет использовать заданное значение в качестве значения ключа. Если запись, содержащая это значение, уже существует в файле, Btrieve возвратит ненулевой статус и не добавит запись.
Когда Вы удаляете запись, содержащую ключ-автоинкремент, Btrieve полностью удаляет запись из файла. Btrieve не использует повторно значения удаленных ключей до тех пор, пока Вы не зададите это значение при добавлении другой записи в файл.
Как упоминалось раньше, Btrieve всегда сортирует ключи-автоинкременты по их абсолютному значению. Если Вы задаете отрицательное значение для ключа-автоинкремента при добавлении записи или если при корректировки записи Вы делаете значение ключа-автоинкремента отрицательным, Btrieve отсортирует значение согласно абсолютному значению. Это позволяет Вам использовать отрицательные значения как флаг записей без изменения позиции записи в индексе. Вдобавок, когда Вы выполняете операцию Get и задаете отрицательное значение в буфере ключа, Btrieve обработает отрицательное значение как абсолютное значение ключа.
- BFLOAT
-
Поле типа "bfloat" - действительное число одинарной или двойной точности, хранящееся в формате совместимым с Microsoft BASIC. Действительное число одинарной точности хранится с 23-битовой мантиссой и 8-битовой экспонентой, смещенной на 128, и битом знака. Внутреннее представление 4-байтового числа с плавающей запятой:
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
----------------------------------------------------------------¬
¦ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ¦
¦ | | ¦
¦ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ¦
L----------------------------------------------------------------
8-битовая ¦ 23-битовая мантисса
экспонента ¦
знак
Представления действительного числа с двойной точностью - то же самое, что и числа с одинарной точностью, за исключением того, что мантисса - 55 бит вместо 23 бит.
- DATE
-
Поля типа "дата" - 4-байтовые значения, имеющие следующее внутреннее представление:
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
----------------------------------------------------------------¬
¦ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ¦
¦ | | ¦
¦ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ¦
L----------------------------------------------------------------
год месяц день
День и месяц - хранятся в 1-байтовом двоичном формате. Год - 2-байтовое двоичное число, представляющее полное значение года, не имеющего смещения относительно какого-либо года.
- DECIMAL
-
Поля десятичного типа имеют внутреннеее представление как упакованные десятичные числа с двумя десятичными цифрами на байт. Этот формат совместим с типом данных COMP-3 в стандарте ANSI-74 Кобола. Внутреннее представление n-байтового десятичного поля:
байт 0 байт 1 байт n-1
1 1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 ...
----------------------------------- ... -----------------¬
¦ | | | | | | | | | | | | | | | | | | | | | | | | ¦
¦ | | | | | | ¦
¦ | | | | | | | | | | | | | | | | | | | | | | | | ¦
L---------------------------------- ------------------
цифра цифра цифра цифра цифра байт
1 2 3 4 2n-1 знака
Байт знака - F или C для положительных чисел и D для отрицательных чисел. Обратите внимание, что десятичная точка опущена. Все значения ключа десятичного типа должны иметь одно и то же число десятичных знаков для правильной сортировки ключей.
- FLOAT
-
Тип с плавающей запятой совместим со стандартом IEEE для действительных чисел с одинарной и двойной плотностью. Внутренний формат 4-байтового числа с плавающей запятой состоит из 23-битовой мантиссы, 8-битовой экспоненты со смещением 127 и бита знака.
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
----------------------------------------------------------------¬
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ¦
| | | ¦
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ¦
----------------------------------------------------------------
^ 8-битовая 23-битовая мантисса
| экспонента
знак
Поле типа с плавающей запятой в 8 байт имеет 52-битовую мантиссу, 11-битовую экспоненту со смещением 1023 и бит знака. Внутренний формат:
байты 7-4
6 6 6 6 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3
3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2
---------------------------------------------------------------
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
---------------------------------------------------------------
^ 11-битовая 20 бит мантиссы
| экспонента
знак
байты 3-0
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
---------------------------------------------------------------
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
---------------------------------------------------------------
32 бита мантиссы
- INTEGER
-
Целый тип - целое число со знаком, содержащее четное количество байт. Внутренне целые отсортированы в двоичном целом формате Intel, с переставленными старшим и младшим байтами в слове. Btrieve оценивает ключ справа налево, все слово одновременно. Знак должен хранится в первых четырех битах младшего байта. Этот формат совместим с целым форматом хранения большинства языков.
- LOGICAL
-
Логический тип ключа хранится как 1- или 2-байтовое значение. Btrieve упорядочивает ключи логического типа как строку. Это позволяет прикладной программе определять хранимые значения, представляющие истину или ложь.
- LSTRING
-
Тип "l-строка" в Btrieve соответствует строке в Паскале. Он имеет те же самые характеристики как обычный строковый тип за исключением того, что первый байт строки содержит двоичное представление длины строки. Длина, хранящаяся в байте 0 l-строки определяет число значащих байтов. Btrieve игнорирует все значения, расположенные за строкой заданной длины.
- MONEY
-
Внутреннее представление типа "деньги" - точно такое же, как и для десятичного типа.
- NUMERIC
-
Цифровые значения хранятся как ASCII-строки, выравненные по правой границе с добавлением ведущих нолей. Самый правый байт числа включает вложенный знак. Следующая таблица показывает, как представлена самая правая цифра, когда она содержит вложенный знак для положительных и отрицательных чисел.
Число Положительное Отрицательное
2 B K
3 C L
4 D M
5 E N
6 F O
7 G P
8 H Q
9 I R
0 { }
Для положительных чисел самая правая цифра может быть представлена как 1-0 вместо A-{. Btrieve рассматривает однозначно положительные числа, представленные обоими способами.
- STRING
-
Строковый тип в Btrieve - последовательность символов, упорядоченных слева направо. Каждый символ представлен в ASCII формате в одном байте.
- TIME
-
Поля типа "время" - 4-байтовые значение, имеющее следующий внутренний формат:
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
---------------------------------------------------------------
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
---------------------------------------------------------------
часы минуты секунды сотые доли
секунды
- UNSIGNED BINARY
-
Btrieve сортирует беззнаковые двоичные ключи как беззнаковые целые. Беззнаковый двоичный ключ содержит четное число байт. Btrieve сравнивает беззнаковые двоичные ключи целым словом справо налево.
- ZSTRING
-
Тип "z-строка" в Btrieve соответствует строке в C. Он имеет те же самые характеристики как обычный строковый тип за исключением того, что тип "z-строка" завершается байтом, содержащим двоичный 0. Btrieve игнорирует все значения за первым двоичным 0 в z-строке.

