СУБД LeoBase: типы данных

(Продолжение. Начало в №7-9, 11, 12, 13, 14)

Сегодня мы расскажем о типах данных, поддерживаемых LeoBase.

Все виды полей, за исключением виртуальных и memo-полей, имеют свой тип данных. LeoBase поддерживает 11 стандартных типов данных языка Pascal, однако их число может быть расширено до 600 за счет добавления пользовательских типов данных. Создав собственный тип данных, с ним можно работать как со стандартным. LeoBase автоматически будет поддерживать пользовательские типы данных при всех операциях.

Функционально каждый из типов относится к одному из четырех классов:

· обычные - все целочисленные, символьный и логический тип, а также пользовательские типы;

· строковые - все типы, совместимые с типом string;

· перечислимые - поля типов этого класса могут принимать одно из значений, указанных в определении конкретного перечислимого типа;

· вещественные - предназначены для представления дробных чисел.

Каждый тип данных, как стандартный, так и пользовательский, помимо принадлежности к какому-либо классу, может иметь уточняющие параметры (например, диапазон возможных значений для целочисленного типа).

В LeoBase имеется возможность создания особых типов данных - перечислимых. Для них не требуется написания обязательных функций Compare, Visual и др., достаточно задания элементов, которые будут присутствовать в этом типе. Фактически - это аналог перечислимых типов в Pascal, только здесь элементы типа могут состоять из любых символов. LeoBase обрабатывает перечислимые типы без участия программиста. Размер поля перечислимого типа в LeoBase составляет 1 байт.

Набор перечислимых типов может составлять библиотеку перечислимых типов. Библиотеки могут загружаться в память и выгружаться, когда перестают быть нужными.

Для обеспечения корректной работы СУБД с типами, с каждым типом должна быть ассоциирована функция-триггер сравнения, чтения строки и пр. Всего таких функций в LeoBase шесть. В записи информация о функциях хранится в специальных полях - полях функции.

· Prepare - этот триггер приводит содержимое поля к формату, с которым будет затем работать Compare. Использование этой функции позволяет снизить нагрузку на Compare при поиске, так как Prepare вызывается всего один раз для аргумента в терме из строки поиска, в то время, как Compare выполняла бы эту операцию при каждом вызове. Например, стандартная реализация строкового типа использует операцию сравнения строк, приведенных к верхнему регистру и с удаленными лидирующими и хвостовыми пробелами. Поэтому для строкового типа Prepare проделывает эти операции для переданного ей аргумента.

· Compare - функция сравнения двух полей одного типа. Функция сравнивает два поля - Field1 и Field2, в зависимости от результата возвращая три значения.

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

· ReadStr. - функция производит чтение значения заданного типа поля Field из строки S. Возвращает True, если чтение прошло успешно и результат находится в Field и False в противном случае. Это нужно при поиске.

· Visual - функция обратная ReadStr, служит для изображения значения поля в виде строки. Эта функция преобразует значение поля Field в виде строки символов S и возвращает в эту строку.

· Input - функция ввода данных заданного типа. Она производит ввод значения данного типа Field в поле на экране. Возвращает True, если ввод прошел результативно.

В описании любого типа есть эти шесть триггеров. Обязательно, однако, должны присутвовать только четыре: Compare, Visual, ReadStr, Input, остальные являются необязательными. Для того, чтобы исключить присутствие какой-либо функции, указатель на нее должен быть nil.

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

В LeoBase сделан шаг в сторону объектно-ориентированных баз данных. Если в некоторой БД комплекса имеются нестандартные или перечислимые типы, не загруженные заранее, то при открытии комплекса LeoBase начинает искать во вспомогательном каталоге БД библиотеки DLL с определенными именами и пытается их загрузить. В этих DLL может быть выполнена и загрузка перечислимых типов. Эти библиотеки программист может написать самостоятельно, вставив в их инициализационную часть код загрузки нужных типов. Разумеется, все DLL, используемые в LeoBase, должны быть написаны с учетом определенных соглашений. Таким образом, добавление новых типов в БД не требует перекомпиляции прикладной программы.

(Продолжение следует)

Владимир КОТЛЯРОВ,
"СофтИнформ", тел. 228-00-48,
e-mail:
ui@activ.minsk.by

Версия для печатиВерсия для печати

Номер: 

15 за 1997 год

Рубрика: 

Базы данных
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!