Компилятор, совместимый с языками семейства xBase и Clipper | ||
---|---|---|
Пред. | Глава 12. CODB- CLIP Object Data Base. | След. |
Метаобъекты - это объекты, описывающие структуры хранимых объектов. А также объекты, необходимые для управления работой ядра ОБД.
Любой метаобъект (а также и любой хранимый объект) имеет обязательный аттрибут <ID>, по которому производится чтение метаобъекта или хранимого объекта.<ID> присваивается ядром ОДБ при добавлении метаобъекта в словарь.
Количество и названия метаклассов, хранимых в словаре строго ограничено и определяется ядром ОБД. Никакие другие метаклассы, кроме описанных ниже, хранится в словаре не могут.
DEPOSIT EXTENT ATTR COUNTER INDEX CLASS TCOLUMN TVIEW REPORT PLUGINS USER GROUP
В словаре должен быть хотя бы один объект каждого метакласса, для того чтобы появилась возможность работать с хранимыми объектами.
Атрибуты:
ID - идентификатор метаобъекта
NAME - название депозитария
Пример создания метаобъекта DEPOSIT
oDict := coDictionary():new("MY001") oDict:open() .... depBody := map() depBody:name := "depository for Russian global information" ... dep_id := oDict:append(depBody,"DEPOSIT") if !empty(oDict:error) ? "Error:",oDict:error endif
Атрибуты:
ID - идентификатор метаобъекта
NAME - название пространства
HELP - описание
Пример создания метаобъекта EXTENT
extBody := map() extBody:name := "statedep" extBody:help := "information from state department of statistic" ... ext_id := oDict:append(extBody,"EXTENT") ....
Атрибуты:
ID - идентификатор метаобъекта
NAME - имя аттрибута хранимого объекта
TYPE - тип аттрибута хранимого объекта
LEN - длина
DEC - знаков после точки для числовых аттрибутов
LENTYPE - тип форматирования строковых аттрибутов
REF_TO - идентификатор класса для аттрибутов типа "R", на объекты которого могут ссылатся, если не заполнен то ссылка может быть на объект любого класса.
DEFVALUE - значение по умолчанию
Возможные значения TYPE
"C" - строка символов с ограничением по длине
"N" - число
"D" - дата
"L" - логическое значение
"M" - строка символов без ограничения по длине
"O" - объект
"X" - любые данные примитивного типа: строка, число, дата, логическое, ссылка.
"R" - ссылка на объект
"S" - ссылка на класс
"A" - массив ссылок, может хранить не только ссылки, в этом случае содержимое контролируется прикладным программистом
"B" - исполняемый блок кода
Возможные значения LENTYPE
1 - "As is", ядро ОБД не будет ничего менять
2 - "Right trim", при записи хранимых объектов в таких аттрибутах будут удалены хвостовые пробелы
3 - "Right & Left trim", при записи объектов будут удалены начальные и конечные пробелы
4 - "Right pad length", при записи объектов содержимое аттрибута будет дополнено пробелами до указанной длины.
Пример создания метаобъекта ATTR
attr:=map() attr:name := "code" attr:type := "C" attr:len := 7 attr:lentype := 3 .... code_id := oDict:append(attr,"ATTR") .... attr:=map() attr:name := "name" attr:type := "C" attr:len := 20 attr:lentype := 2 .... name_id := oDict:append(attr,"ATTR")
Атрибуты:
Атрибуты:
ID - идентификатор метаобъекта
NAME - название индекса
EXPR - выражение
Пример создания метаобъекта INDEX
indBody := map() indBody:name := "code" indBody:expr := "code" ind1_id := oDict:append(indBody,"INDEX") .... indBody := map() indBody:name := "name" indBody:expr := "name" ind2_id := oDict:append(indBody,"INDEX") ....
Атрибуты:
ID - идентификатор метаобъекта
NAME - имя хранимого класса
SUPER_ID - идентификатор супер класса
EXTENT_ID - идентификатор пространства, в который записывать хранимые объекты
EXPR_ESSENCE - выражение для короткого представления содержимого хранимого объекта
UNSTABLE - находятся ли хранимые объекты в стабильном состоянии, служебный аттрибут используется ядром ОБД
ATTR_LIST - массив идентификаторов аттрибутов
IDX_LIST - массив идентификаторов индексов
Пример создания метаобъекта CLASS
classBody:=map() /* information about coding world currencies */ classBody:name := "currency" /* from state department of statistic */ classBody:extent_id := ext_id /* return via "USD:USA dollar" */ classBody:expr_essence := "code+':'+name" /* two attributes "code" and "name" */ classBody:attr_list := {code_id,name_id} /* two index "code" and "name" */ classBody:idx_list := {ind1_id,ind2_id} currency_id := oDict:append(classBody,"CLASS") if !empty(oDict:error) ? "Error:",oDict:error endif
Атрибуты:
Атрибуты:
Атрибуты:
Пред. | Начало | След. |
CODB- CLIP Object Data Base. | Уровень выше | Управляющие классы. |