UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
dbdefs.h
Go to the documentation of this file.
1 /* dbdefs.h */
2 /* $Id: dbdefs.h,v 1.18 2009/03/27 09:39:08 vlad Exp $ */
3 
4 /*********************************************************************
5  *
6  * UNIVERS
7  * (C) ООО "ГЕОВЕРС", 2001
8  *
9  * Все права защищены * * Использование, копирование или передача регулируются законами * Российской Федерации "Об авторском праве и смежных правах", "О * правовой охране программ для электронных вычислительных машин и баз * данных" * * Encoding: ISO-8859-5 (GOST) * *********************************************************************/ #ifndef __dbdefs_h #define __dbdefs_h /** \file *********************************************************************** * * Локальная База Данных (версия 4) * Определения, описания и форматы данных. * ***********************************************************************/ #include <mix/Types.h> #include <mix/units.h> #include <mix/wenv.h> /** Длина идентификатора в ЛБД без признака конца строки. */ #define DB_IDENT_LEN 15 /** Имя файла дескрипторов по умолчанию. */ #define DB_DESC_FILE "ttdesc.4db" /** Имя переменной окружения, в которой задается путь к файлу дескрипторов. */ #define DBDFILE_ENV "DBDFILE" /** @name dbdebug * \brief *********************************************************************** * Отладочные переменные окружения ***********************************************************************/ /** *********************************************************************** * Для целей отладки программ, использующих ЛБД4 можно присвоить * переменной окружения DBDEBUG числовое значение, показывающее, * какой серьезности сообщения о внутренней работе процедур ЛБД следует * сообщать. Соответствие числовых кодов и семантики приводится ниже: * EL_FATAL 0 - фатальные ошибки, влияющие на работоспособность ЛБД; * EL_ERROR 1 - серьезные ошибки при работе с ЛБД из прикл.программ; * EL_WARNING 2 - предупреждения о "поступках" процедур ЛБД; * EL_INFO 3 - нейтральная информация при работе с ЛБД; * EL_HINT 4 - сообщения о выполняемых операциях; * EL_DEBUG 5 - отладочные сообщения из внутренней кухни ЛБД. ***********************************************************************/ /* @{ */ /** Имя переменной окружения, используемой для задания числового уровня ошибки: см. EL_internal_*. */ #define DBDEBUG "DBDEBUG" /* Специальные уровни серьезности внутренних сообщений ЛБД. */ #define EL_internal_FATAL 10/*!< фатальные ошибки, влияющие на работоспособность ЛБД */ #define EL_internal_ERROR 11/*!< серьезные ошибки при работе с ЛБД из прикл.программ */ #define EL_internal_WARNING 12/*!< дупреждения о "поступках" процедур ЛБД */ #define EL_internal_INFO 13/*!< нейтральная информация при работе с ЛБД */ #define EL_internal_HINT 14/*!< сообщения о выполняемых операциях */ #define EL_internal_DEBUG 15/*!< отладочные сообщения из внутренней кухни ЛБД */ /** Уровень серьезности выдаваемых сообщений по умолчанию */ #define DBDLDEFAULT EL_ERROR /** Имя переменной окружения, используемой для задания имени файла протокола. */ #define DBLOGFILE "DBLOGFILE" /** Имя переменной окружения, используемой для задания имени протокола операций. */ #define DBOPERLOGFILE "DBOPERLOGFILE" /* @} */ /** *********************************************************************** * Структура заголовка файла данных ЛБД (версия 4). * В заголовке файла не упоминается имя типа таблицы и имена и типы * доменов. Известно только количество столбцов и строк, а также * размер, занимаемый строкой и атрибуты каждого столбца (домена). <pre> DbFileHeader: +0 [Char] (4) Сигнатура "@D4" +4 [Int4] Магическое число для опред. Big/Little Endian +8 [Char] (16) Имя типа таблицы +24 [Int4] Размер записи (строки таблицы) в байтах +28 [Int4] Количество строк в таблице +32 [Int4] Количество доменов DbFileDomainAttr: повторяется по количеству доменов: +36 [Int4] Атрибуты доменов +?? повторяется по количеству строк: +??+0 1-ый по счету домен строки #0 +??+? 2-ый по счету домен строки #0 ... +??+0 1-ый по счету домен строки #1 +??+? 2-ый по счету домен строки #1 ... </pre> ***********************************************************************/ typedef struct { #define DBD_SIGNATURE_VER4 "@D4" Char signature[4]; /*!< Сигнатура "@D4", где 4 - номер версии */ #define DBD_MAGIC_BYTES "\x87\x65\x43\x21" #define DBD_MAGIC_HEX (0x87654321UL) #define DBD_MAGIC_DEC (-2023406815L) Int4 magic; /*!< Проверка порядка битов и байтов в слове; в шестнадцатеричном виде 0x87654321, в десятичном виде -2023406815 */ Char ttname[DB_IDENT_LEN+1]; /* Имя типа таблицы */ Int4 recsize; /*!< Размер записи (строки таблицы) в байтах */ Int4 line_cnt; /*!< Количество строк в таблице (0..) */ Int4 dmn_cnt; /*!< Количество доменов */ } DbFileHeader; /** *********************************************************************** * Атрибуты домена в файле данных ЛБД. ***********************************************************************/ typedef struct { Int4 unit; /*!< Физическая величина значений домена */ } DbFileDomainAttr; /** *********************************************************************** * Описание домена в памяти. ***********************************************************************/ typedef struct { Char dname[DB_IDENT_LEN+1]; /*!< Имя домена (столбца таблицы) */ AtomType atype; /*!< Тип значения домена */ Int4 dim; /*!< Размерность домена в значениях */ CategoryId categ; /*!< Категория физ.величины */ Int4 offset; /*!< Смещение поля в записи файла в байтах (вычисляется по размеру предыдущих доменов автоматически) */ } DbDomainDesc; /** @name 4DMNDESC *********************************************************************** * Описание структуры записи в файле описателей. * TT_4* и DT_4* вводятся для того, чтобы избежать конфликта с другими * именами доменов и таблиц, которые может объявить пользователь. ***********************************************************************/ /* @{ */ #define TT_4DMNDESC "4DMNDESC" #define DT_4TTNAME "4TTNAME" #define DT_4DNAME "4DNAME" #define DT_4ATYPE "4ATYPE" #define DT_4DIM "4DIM" #define DT_4CATEG "4CATEG" /* dname atype dim categ offset */ #define DMNDESC_4TTNAME DT_4TTNAME, CHAR_1, DB_IDENT_LEN+1, UC_NONE, 0 #define DMNDESC_4DNAME DT_4DNAME, CHAR_1, DB_IDENT_LEN+1, UC_NONE, 0 #define DMNDESC_4ATYPE DT_4ATYPE, INT_4, 1, UC_NONE, 0 #define DMNDESC_4DIM DT_4DIM, INT_4, 1, UC_NONE, 0 #define DMNDESC_4CATEG DT_4CATEG, INT_4, 1, UC_NONE, 0 /* @} */ /*********************************************************************** * * Описание прочих служебных типов таблиц * ***********************************************************************/ /** @name 4LOCK * Таблица блокировок доступа к объектам данных */ /* @{ */ #define TT_4LOCK "4LOCK" #define DT_4ID "4ID" #define DT_4TYPE "4TYPE" #define DT_4MOMENT "4MOMENT" #define DT_4APPNAME "4APPNAME" #define DT_4OWNER "4OWNER" #define DT_4WORKPLACE "4WORKPLACE" #define DT_4HOST "4HOST" #define DT_4PID "4PID" /* dname atype dim categ offset */ #define DD_4ID DT_4ID, INT_4, 1, UC_NONE, 0 #define DD_4MOMENT DT_4MOMENT, CHAR_1, MOMENT_LEN+1, UC_NONE, 0 #define DD_4TYPE DT_4TYPE, CHAR_1, 3, UC_NONE, 0 #define DD_4APPNAME DT_4APPNAME, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4OWNER DT_4OWNER, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4WORKPLACE DT_4WORKPLACE, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4HOST DT_4HOST, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4PID DT_4PID, INT_4, 1, UC_NONE, 0 /* @} */ /** @name 4HISTORY * Таблица истории обработки проекта */ /* @{ */ #define TT_4HISTORY "4HISTORY" #define DT_4TIMESTAMP "4TIMESTAMP" /* already defined #define DT_4APPNAME "4APPNAME"*/ #define DT_4JOBNUM "4JOBNUM" #define DT_4USER "4USER" #define DT_4DATAREF "4DATAREF" #define DT_4EVENT "4EVENT" /* already defined #define DT_4MOMENT "4MOMENT" #define DT_4WORKPLACE "4WORKPLACE" #define DT_4HOST "4HOST"*/ /* dname atype dim categ offset */ #define DD_4TIMESTAMP DT_4TIMESTAMP, INT_4, 1, UC_NONE, 0 #define DD_4EVENT DT_4EVENT, CHAR_1, 256, UC_NONE, 0 /* already defined #define DD_4APPNAME DT_4APPNAME, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0*/ #define DD_4JOBNUM DT_4JOBNUM, INT_4, 1, UC_NONE, 0 #define DD_4USER DT_4USER, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4DATAREF DT_4DATAREF, DBTPTR,1, UC_NONE, 0 /* already defined #define DD_4MOMENT DT_4MOMENT, CHAR_1, MOMENT_LEN+1, UC_NONE, 0 #define DD_4WORKPLACE DT_4WORKPLACE, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4HOST DT_4HOST, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0*/ /* @} */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** Инициализация регистра прикладных типов таблиц. Может вызываться многократно без ущерба для быстродействия и логики работы ЛБД. */ void dbAppInitialize (); /** Инициализирует указанную область памяти умолчательным значением данного типа. */ void dbFillEmpty (void* ptr, DbDomainDesc* dd); /** Проверяет указанную область памяти на умолчательные значения данного типа. */ Logic dbCheckEmpty (void* ptr, DbDomainDesc* dd); /** *********************************************************************** * Для целей отладки программ, использующих ЛБД4 можно присвоить * переменной окружения DBDEBUG числовое значение, показывающее, * какой серьезности сообщения о внутренней работе процедур ЛБД следует * сообщать. Соответствие числовых кодов и семантики приводится ниже: * EL_FATAL 0 - фатальные ошибки, влияющие на работоспособность ЛБД; * EL_ERROR 1 - серьезные ошибки при работе с ЛБД из прикл.программ; * EL_WARNING 2 - предупреждения о "поступках" процедур ЛБД; * EL_INFO 3 - нейтральная информация при работе с ЛБД; * EL_HINT 4 - сообщения о выполняемых операциях; * EL_DEBUG 5 - отладочные сообщения из внутренней кухни ЛБД. ***********************************************************************/ /** Функция заменяет wePutMsg() с целью не выводить на печать сообщения с уровнем серьезности больше dbDebugLevel. Таким образом, если dbDebugLevel == 0, то будут печататься только сообщения серьезности EL_FATAL. Если == 1, то EL_FATAL и EL_ERROR и т.д. */ void dbPutMsg (int elevel, const char* msg); /** Функция заменяет weFormatMsg() с целью не выводить на печать сообщения с уровнем серьезности больше dbDebugLevel. */ void dbFormatMsg (int elevel, const char* format, ...); /** Функция выводит указанную строку в файл протокола операций. */ void dbOperLog (const char* format, ...); /** Return name of directory for temporal data base objects. */ const char* dbTempDir (); #ifdef __cplusplus }; #endif /* __cplusplus */ #endif /* dbdefs.h */
10  *
11  * Использование, копирование или передача регулируются законами
12  * Российской Федерации "Об авторском праве и смежных правах", "О * правовой охране программ для электронных вычислительных машин и баз * данных" * * Encoding: ISO-8859-5 (GOST) * *********************************************************************/ #ifndef __dbdefs_h #define __dbdefs_h /** \file *********************************************************************** * * Локальная База Данных (версия 4) * Определения, описания и форматы данных. * ***********************************************************************/ #include <mix/Types.h> #include <mix/units.h> #include <mix/wenv.h> /** Длина идентификатора в ЛБД без признака конца строки. */ #define DB_IDENT_LEN 15 /** Имя файла дескрипторов по умолчанию. */ #define DB_DESC_FILE "ttdesc.4db" /** Имя переменной окружения, в которой задается путь к файлу дескрипторов. */ #define DBDFILE_ENV "DBDFILE" /** @name dbdebug * \brief *********************************************************************** * Отладочные переменные окружения ***********************************************************************/ /** *********************************************************************** * Для целей отладки программ, использующих ЛБД4 можно присвоить * переменной окружения DBDEBUG числовое значение, показывающее, * какой серьезности сообщения о внутренней работе процедур ЛБД следует * сообщать. Соответствие числовых кодов и семантики приводится ниже: * EL_FATAL 0 - фатальные ошибки, влияющие на работоспособность ЛБД; * EL_ERROR 1 - серьезные ошибки при работе с ЛБД из прикл.программ; * EL_WARNING 2 - предупреждения о "поступках" процедур ЛБД; * EL_INFO 3 - нейтральная информация при работе с ЛБД; * EL_HINT 4 - сообщения о выполняемых операциях; * EL_DEBUG 5 - отладочные сообщения из внутренней кухни ЛБД. ***********************************************************************/ /* @{ */ /** Имя переменной окружения, используемой для задания числового уровня ошибки: см. EL_internal_*. */ #define DBDEBUG "DBDEBUG" /* Специальные уровни серьезности внутренних сообщений ЛБД. */ #define EL_internal_FATAL 10/*!< фатальные ошибки, влияющие на работоспособность ЛБД */ #define EL_internal_ERROR 11/*!< серьезные ошибки при работе с ЛБД из прикл.программ */ #define EL_internal_WARNING 12/*!< дупреждения о "поступках" процедур ЛБД */ #define EL_internal_INFO 13/*!< нейтральная информация при работе с ЛБД */ #define EL_internal_HINT 14/*!< сообщения о выполняемых операциях */ #define EL_internal_DEBUG 15/*!< отладочные сообщения из внутренней кухни ЛБД */ /** Уровень серьезности выдаваемых сообщений по умолчанию */ #define DBDLDEFAULT EL_ERROR /** Имя переменной окружения, используемой для задания имени файла протокола. */ #define DBLOGFILE "DBLOGFILE" /** Имя переменной окружения, используемой для задания имени протокола операций. */ #define DBOPERLOGFILE "DBOPERLOGFILE" /* @} */ /** *********************************************************************** * Структура заголовка файла данных ЛБД (версия 4). * В заголовке файла не упоминается имя типа таблицы и имена и типы * доменов. Известно только количество столбцов и строк, а также * размер, занимаемый строкой и атрибуты каждого столбца (домена). <pre> DbFileHeader: +0 [Char] (4) Сигнатура "@D4" +4 [Int4] Магическое число для опред. Big/Little Endian +8 [Char] (16) Имя типа таблицы +24 [Int4] Размер записи (строки таблицы) в байтах +28 [Int4] Количество строк в таблице +32 [Int4] Количество доменов DbFileDomainAttr: повторяется по количеству доменов: +36 [Int4] Атрибуты доменов +?? повторяется по количеству строк: +??+0 1-ый по счету домен строки #0 +??+? 2-ый по счету домен строки #0 ... +??+0 1-ый по счету домен строки #1 +??+? 2-ый по счету домен строки #1 ... </pre> ***********************************************************************/ typedef struct { #define DBD_SIGNATURE_VER4 "@D4" Char signature[4]; /*!< Сигнатура "@D4", где 4 - номер версии */ #define DBD_MAGIC_BYTES "\x87\x65\x43\x21" #define DBD_MAGIC_HEX (0x87654321UL) #define DBD_MAGIC_DEC (-2023406815L) Int4 magic; /*!< Проверка порядка битов и байтов в слове; в шестнадцатеричном виде 0x87654321, в десятичном виде -2023406815 */ Char ttname[DB_IDENT_LEN+1]; /* Имя типа таблицы */ Int4 recsize; /*!< Размер записи (строки таблицы) в байтах */ Int4 line_cnt; /*!< Количество строк в таблице (0..) */ Int4 dmn_cnt; /*!< Количество доменов */ } DbFileHeader; /** *********************************************************************** * Атрибуты домена в файле данных ЛБД. ***********************************************************************/ typedef struct { Int4 unit; /*!< Физическая величина значений домена */ } DbFileDomainAttr; /** *********************************************************************** * Описание домена в памяти. ***********************************************************************/ typedef struct { Char dname[DB_IDENT_LEN+1]; /*!< Имя домена (столбца таблицы) */ AtomType atype; /*!< Тип значения домена */ Int4 dim; /*!< Размерность домена в значениях */ CategoryId categ; /*!< Категория физ.величины */ Int4 offset; /*!< Смещение поля в записи файла в байтах (вычисляется по размеру предыдущих доменов автоматически) */ } DbDomainDesc; /** @name 4DMNDESC *********************************************************************** * Описание структуры записи в файле описателей. * TT_4* и DT_4* вводятся для того, чтобы избежать конфликта с другими * именами доменов и таблиц, которые может объявить пользователь. ***********************************************************************/ /* @{ */ #define TT_4DMNDESC "4DMNDESC" #define DT_4TTNAME "4TTNAME" #define DT_4DNAME "4DNAME" #define DT_4ATYPE "4ATYPE" #define DT_4DIM "4DIM" #define DT_4CATEG "4CATEG" /* dname atype dim categ offset */ #define DMNDESC_4TTNAME DT_4TTNAME, CHAR_1, DB_IDENT_LEN+1, UC_NONE, 0 #define DMNDESC_4DNAME DT_4DNAME, CHAR_1, DB_IDENT_LEN+1, UC_NONE, 0 #define DMNDESC_4ATYPE DT_4ATYPE, INT_4, 1, UC_NONE, 0 #define DMNDESC_4DIM DT_4DIM, INT_4, 1, UC_NONE, 0 #define DMNDESC_4CATEG DT_4CATEG, INT_4, 1, UC_NONE, 0 /* @} */ /*********************************************************************** * * Описание прочих служебных типов таблиц * ***********************************************************************/ /** @name 4LOCK * Таблица блокировок доступа к объектам данных */ /* @{ */ #define TT_4LOCK "4LOCK" #define DT_4ID "4ID" #define DT_4TYPE "4TYPE" #define DT_4MOMENT "4MOMENT" #define DT_4APPNAME "4APPNAME" #define DT_4OWNER "4OWNER" #define DT_4WORKPLACE "4WORKPLACE" #define DT_4HOST "4HOST" #define DT_4PID "4PID" /* dname atype dim categ offset */ #define DD_4ID DT_4ID, INT_4, 1, UC_NONE, 0 #define DD_4MOMENT DT_4MOMENT, CHAR_1, MOMENT_LEN+1, UC_NONE, 0 #define DD_4TYPE DT_4TYPE, CHAR_1, 3, UC_NONE, 0 #define DD_4APPNAME DT_4APPNAME, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4OWNER DT_4OWNER, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4WORKPLACE DT_4WORKPLACE, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4HOST DT_4HOST, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4PID DT_4PID, INT_4, 1, UC_NONE, 0 /* @} */ /** @name 4HISTORY * Таблица истории обработки проекта */ /* @{ */ #define TT_4HISTORY "4HISTORY" #define DT_4TIMESTAMP "4TIMESTAMP" /* already defined #define DT_4APPNAME "4APPNAME"*/ #define DT_4JOBNUM "4JOBNUM" #define DT_4USER "4USER" #define DT_4DATAREF "4DATAREF" #define DT_4EVENT "4EVENT" /* already defined #define DT_4MOMENT "4MOMENT" #define DT_4WORKPLACE "4WORKPLACE" #define DT_4HOST "4HOST"*/ /* dname atype dim categ offset */ #define DD_4TIMESTAMP DT_4TIMESTAMP, INT_4, 1, UC_NONE, 0 #define DD_4EVENT DT_4EVENT, CHAR_1, 256, UC_NONE, 0 /* already defined #define DD_4APPNAME DT_4APPNAME, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0*/ #define DD_4JOBNUM DT_4JOBNUM, INT_4, 1, UC_NONE, 0 #define DD_4USER DT_4USER, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4DATAREF DT_4DATAREF, DBTPTR,1, UC_NONE, 0 /* already defined #define DD_4MOMENT DT_4MOMENT, CHAR_1, MOMENT_LEN+1, UC_NONE, 0 #define DD_4WORKPLACE DT_4WORKPLACE, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4HOST DT_4HOST, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0*/ /* @} */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** Инициализация регистра прикладных типов таблиц. Может вызываться многократно без ущерба для быстродействия и логики работы ЛБД. */ void dbAppInitialize (); /** Инициализирует указанную область памяти умолчательным значением данного типа. */ void dbFillEmpty (void* ptr, DbDomainDesc* dd); /** Проверяет указанную область памяти на умолчательные значения данного типа. */ Logic dbCheckEmpty (void* ptr, DbDomainDesc* dd); /** *********************************************************************** * Для целей отладки программ, использующих ЛБД4 можно присвоить * переменной окружения DBDEBUG числовое значение, показывающее, * какой серьезности сообщения о внутренней работе процедур ЛБД следует * сообщать. Соответствие числовых кодов и семантики приводится ниже: * EL_FATAL 0 - фатальные ошибки, влияющие на работоспособность ЛБД; * EL_ERROR 1 - серьезные ошибки при работе с ЛБД из прикл.программ; * EL_WARNING 2 - предупреждения о "поступках" процедур ЛБД; * EL_INFO 3 - нейтральная информация при работе с ЛБД; * EL_HINT 4 - сообщения о выполняемых операциях; * EL_DEBUG 5 - отладочные сообщения из внутренней кухни ЛБД. ***********************************************************************/ /** Функция заменяет wePutMsg() с целью не выводить на печать сообщения с уровнем серьезности больше dbDebugLevel. Таким образом, если dbDebugLevel == 0, то будут печататься только сообщения серьезности EL_FATAL. Если == 1, то EL_FATAL и EL_ERROR и т.д. */ void dbPutMsg (int elevel, const char* msg); /** Функция заменяет weFormatMsg() с целью не выводить на печать сообщения с уровнем серьезности больше dbDebugLevel. */ void dbFormatMsg (int elevel, const char* format, ...); /** Функция выводит указанную строку в файл протокола операций. */ void dbOperLog (const char* format, ...); /** Return name of directory for temporal data base objects. */ const char* dbTempDir (); #ifdef __cplusplus }; #endif /* __cplusplus */ #endif /* dbdefs.h */
13  * правовой охране программ для электронных вычислительных машин и баз * данных" * * Encoding: ISO-8859-5 (GOST) * *********************************************************************/ #ifndef __dbdefs_h #define __dbdefs_h /** \file *********************************************************************** * * Локальная База Данных (версия 4) * Определения, описания и форматы данных. * ***********************************************************************/ #include <mix/Types.h> #include <mix/units.h> #include <mix/wenv.h> /** Длина идентификатора в ЛБД без признака конца строки. */ #define DB_IDENT_LEN 15 /** Имя файла дескрипторов по умолчанию. */ #define DB_DESC_FILE "ttdesc.4db" /** Имя переменной окружения, в которой задается путь к файлу дескрипторов. */ #define DBDFILE_ENV "DBDFILE" /** @name dbdebug * \brief *********************************************************************** * Отладочные переменные окружения ***********************************************************************/ /** *********************************************************************** * Для целей отладки программ, использующих ЛБД4 можно присвоить * переменной окружения DBDEBUG числовое значение, показывающее, * какой серьезности сообщения о внутренней работе процедур ЛБД следует * сообщать. Соответствие числовых кодов и семантики приводится ниже: * EL_FATAL 0 - фатальные ошибки, влияющие на работоспособность ЛБД; * EL_ERROR 1 - серьезные ошибки при работе с ЛБД из прикл.программ; * EL_WARNING 2 - предупреждения о "поступках" процедур ЛБД; * EL_INFO 3 - нейтральная информация при работе с ЛБД; * EL_HINT 4 - сообщения о выполняемых операциях; * EL_DEBUG 5 - отладочные сообщения из внутренней кухни ЛБД. ***********************************************************************/ /* @{ */ /** Имя переменной окружения, используемой для задания числового уровня ошибки: см. EL_internal_*. */ #define DBDEBUG "DBDEBUG" /* Специальные уровни серьезности внутренних сообщений ЛБД. */ #define EL_internal_FATAL 10/*!< фатальные ошибки, влияющие на работоспособность ЛБД */ #define EL_internal_ERROR 11/*!< серьезные ошибки при работе с ЛБД из прикл.программ */ #define EL_internal_WARNING 12/*!< дупреждения о "поступках" процедур ЛБД */ #define EL_internal_INFO 13/*!< нейтральная информация при работе с ЛБД */ #define EL_internal_HINT 14/*!< сообщения о выполняемых операциях */ #define EL_internal_DEBUG 15/*!< отладочные сообщения из внутренней кухни ЛБД */ /** Уровень серьезности выдаваемых сообщений по умолчанию */ #define DBDLDEFAULT EL_ERROR /** Имя переменной окружения, используемой для задания имени файла протокола. */ #define DBLOGFILE "DBLOGFILE" /** Имя переменной окружения, используемой для задания имени протокола операций. */ #define DBOPERLOGFILE "DBOPERLOGFILE" /* @} */ /** *********************************************************************** * Структура заголовка файла данных ЛБД (версия 4). * В заголовке файла не упоминается имя типа таблицы и имена и типы * доменов. Известно только количество столбцов и строк, а также * размер, занимаемый строкой и атрибуты каждого столбца (домена). <pre> DbFileHeader: +0 [Char] (4) Сигнатура "@D4" +4 [Int4] Магическое число для опред. Big/Little Endian +8 [Char] (16) Имя типа таблицы +24 [Int4] Размер записи (строки таблицы) в байтах +28 [Int4] Количество строк в таблице +32 [Int4] Количество доменов DbFileDomainAttr: повторяется по количеству доменов: +36 [Int4] Атрибуты доменов +?? повторяется по количеству строк: +??+0 1-ый по счету домен строки #0 +??+? 2-ый по счету домен строки #0 ... +??+0 1-ый по счету домен строки #1 +??+? 2-ый по счету домен строки #1 ... </pre> ***********************************************************************/ typedef struct { #define DBD_SIGNATURE_VER4 "@D4" Char signature[4]; /*!< Сигнатура "@D4", где 4 - номер версии */ #define DBD_MAGIC_BYTES "\x87\x65\x43\x21" #define DBD_MAGIC_HEX (0x87654321UL) #define DBD_MAGIC_DEC (-2023406815L) Int4 magic; /*!< Проверка порядка битов и байтов в слове; в шестнадцатеричном виде 0x87654321, в десятичном виде -2023406815 */ Char ttname[DB_IDENT_LEN+1]; /* Имя типа таблицы */ Int4 recsize; /*!< Размер записи (строки таблицы) в байтах */ Int4 line_cnt; /*!< Количество строк в таблице (0..) */ Int4 dmn_cnt; /*!< Количество доменов */ } DbFileHeader; /** *********************************************************************** * Атрибуты домена в файле данных ЛБД. ***********************************************************************/ typedef struct { Int4 unit; /*!< Физическая величина значений домена */ } DbFileDomainAttr; /** *********************************************************************** * Описание домена в памяти. ***********************************************************************/ typedef struct { Char dname[DB_IDENT_LEN+1]; /*!< Имя домена (столбца таблицы) */ AtomType atype; /*!< Тип значения домена */ Int4 dim; /*!< Размерность домена в значениях */ CategoryId categ; /*!< Категория физ.величины */ Int4 offset; /*!< Смещение поля в записи файла в байтах (вычисляется по размеру предыдущих доменов автоматически) */ } DbDomainDesc; /** @name 4DMNDESC *********************************************************************** * Описание структуры записи в файле описателей. * TT_4* и DT_4* вводятся для того, чтобы избежать конфликта с другими * именами доменов и таблиц, которые может объявить пользователь. ***********************************************************************/ /* @{ */ #define TT_4DMNDESC "4DMNDESC" #define DT_4TTNAME "4TTNAME" #define DT_4DNAME "4DNAME" #define DT_4ATYPE "4ATYPE" #define DT_4DIM "4DIM" #define DT_4CATEG "4CATEG" /* dname atype dim categ offset */ #define DMNDESC_4TTNAME DT_4TTNAME, CHAR_1, DB_IDENT_LEN+1, UC_NONE, 0 #define DMNDESC_4DNAME DT_4DNAME, CHAR_1, DB_IDENT_LEN+1, UC_NONE, 0 #define DMNDESC_4ATYPE DT_4ATYPE, INT_4, 1, UC_NONE, 0 #define DMNDESC_4DIM DT_4DIM, INT_4, 1, UC_NONE, 0 #define DMNDESC_4CATEG DT_4CATEG, INT_4, 1, UC_NONE, 0 /* @} */ /*********************************************************************** * * Описание прочих служебных типов таблиц * ***********************************************************************/ /** @name 4LOCK * Таблица блокировок доступа к объектам данных */ /* @{ */ #define TT_4LOCK "4LOCK" #define DT_4ID "4ID" #define DT_4TYPE "4TYPE" #define DT_4MOMENT "4MOMENT" #define DT_4APPNAME "4APPNAME" #define DT_4OWNER "4OWNER" #define DT_4WORKPLACE "4WORKPLACE" #define DT_4HOST "4HOST" #define DT_4PID "4PID" /* dname atype dim categ offset */ #define DD_4ID DT_4ID, INT_4, 1, UC_NONE, 0 #define DD_4MOMENT DT_4MOMENT, CHAR_1, MOMENT_LEN+1, UC_NONE, 0 #define DD_4TYPE DT_4TYPE, CHAR_1, 3, UC_NONE, 0 #define DD_4APPNAME DT_4APPNAME, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4OWNER DT_4OWNER, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4WORKPLACE DT_4WORKPLACE, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4HOST DT_4HOST, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4PID DT_4PID, INT_4, 1, UC_NONE, 0 /* @} */ /** @name 4HISTORY * Таблица истории обработки проекта */ /* @{ */ #define TT_4HISTORY "4HISTORY" #define DT_4TIMESTAMP "4TIMESTAMP" /* already defined #define DT_4APPNAME "4APPNAME"*/ #define DT_4JOBNUM "4JOBNUM" #define DT_4USER "4USER" #define DT_4DATAREF "4DATAREF" #define DT_4EVENT "4EVENT" /* already defined #define DT_4MOMENT "4MOMENT" #define DT_4WORKPLACE "4WORKPLACE" #define DT_4HOST "4HOST"*/ /* dname atype dim categ offset */ #define DD_4TIMESTAMP DT_4TIMESTAMP, INT_4, 1, UC_NONE, 0 #define DD_4EVENT DT_4EVENT, CHAR_1, 256, UC_NONE, 0 /* already defined #define DD_4APPNAME DT_4APPNAME, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0*/ #define DD_4JOBNUM DT_4JOBNUM, INT_4, 1, UC_NONE, 0 #define DD_4USER DT_4USER, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4DATAREF DT_4DATAREF, DBTPTR,1, UC_NONE, 0 /* already defined #define DD_4MOMENT DT_4MOMENT, CHAR_1, MOMENT_LEN+1, UC_NONE, 0 #define DD_4WORKPLACE DT_4WORKPLACE, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4HOST DT_4HOST, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0*/ /* @} */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** Инициализация регистра прикладных типов таблиц. Может вызываться многократно без ущерба для быстродействия и логики работы ЛБД. */ void dbAppInitialize (); /** Инициализирует указанную область памяти умолчательным значением данного типа. */ void dbFillEmpty (void* ptr, DbDomainDesc* dd); /** Проверяет указанную область памяти на умолчательные значения данного типа. */ Logic dbCheckEmpty (void* ptr, DbDomainDesc* dd); /** *********************************************************************** * Для целей отладки программ, использующих ЛБД4 можно присвоить * переменной окружения DBDEBUG числовое значение, показывающее, * какой серьезности сообщения о внутренней работе процедур ЛБД следует * сообщать. Соответствие числовых кодов и семантики приводится ниже: * EL_FATAL 0 - фатальные ошибки, влияющие на работоспособность ЛБД; * EL_ERROR 1 - серьезные ошибки при работе с ЛБД из прикл.программ; * EL_WARNING 2 - предупреждения о "поступках" процедур ЛБД; * EL_INFO 3 - нейтральная информация при работе с ЛБД; * EL_HINT 4 - сообщения о выполняемых операциях; * EL_DEBUG 5 - отладочные сообщения из внутренней кухни ЛБД. ***********************************************************************/ /** Функция заменяет wePutMsg() с целью не выводить на печать сообщения с уровнем серьезности больше dbDebugLevel. Таким образом, если dbDebugLevel == 0, то будут печататься только сообщения серьезности EL_FATAL. Если == 1, то EL_FATAL и EL_ERROR и т.д. */ void dbPutMsg (int elevel, const char* msg); /** Функция заменяет weFormatMsg() с целью не выводить на печать сообщения с уровнем серьезности больше dbDebugLevel. */ void dbFormatMsg (int elevel, const char* format, ...); /** Функция выводит указанную строку в файл протокола операций. */ void dbOperLog (const char* format, ...); /** Return name of directory for temporal data base objects. */ const char* dbTempDir (); #ifdef __cplusplus }; #endif /* __cplusplus */ #endif /* dbdefs.h */
14  * данных"
15  *
16  * Encoding: ISO-8859-5 (GOST)
17  *
18  *********************************************************************/
19 
20 #ifndef __dbdefs_h
21 #define __dbdefs_h
22 
31 #include <mix/Types.h>
32 #include <mix/units.h>
33 #include <mix/wenv.h>
34 
35 
37 #define DB_IDENT_LEN 15
38 
40 #define DB_DESC_FILE "ttdesc.4db"
41 
43 #define DBDFILE_ENV "DBDFILE"
44 
45 
66 /* @{ */
67 
70 #define DBDEBUG "DBDEBUG"
71 
72 /* Специальные уровни серьезности внутренних сообщений ЛБД. */
73 #define EL_internal_FATAL 10
75 #define EL_internal_ERROR 11
77 #define EL_internal_WARNING 12
79 #define EL_internal_INFO 13
81 #define EL_internal_HINT 14
82 #define EL_internal_DEBUG 15
87 #define DBDLDEFAULT EL_ERROR
88 
91 #define DBLOGFILE "DBLOGFILE"
92 
95 #define DBOPERLOGFILE "DBOPERLOGFILE"
96 
97 /* @} */
98 
129 typedef struct
130 {
131 #define DBD_SIGNATURE_VER4 "@D4"
132  Char signature[4];
134 #define DBD_MAGIC_BYTES "\x87\x65\x43\x21"
135 #define DBD_MAGIC_HEX (0x87654321UL)
136 #define DBD_MAGIC_DEC (-2023406815L)
137  Int4 magic;
141  Char ttname[DB_IDENT_LEN+1]; /* Имя типа таблицы */
142  Int4 recsize;
143  Int4 line_cnt;
144  Int4 dmn_cnt;
146 } DbFileHeader;
153 typedef struct
154 {
155  Int4 unit;
159 
164 typedef struct
165 {
166  Char dname[DB_IDENT_LEN+1];
167  AtomType atype;
168  Int4 dim;
169  CategoryId categ;
170  Int4 offset;
182 /* @{ */
183 #define TT_4DMNDESC "4DMNDESC"
184 #define DT_4TTNAME "4TTNAME"
185 #define DT_4DNAME "4DNAME"
186 #define DT_4ATYPE "4ATYPE"
187 #define DT_4DIM "4DIM"
188 #define DT_4CATEG "4CATEG"
189 
190 /* dname atype dim categ offset */
191 #define DMNDESC_4TTNAME DT_4TTNAME, CHAR_1, DB_IDENT_LEN+1, UC_NONE, 0
192 #define DMNDESC_4DNAME DT_4DNAME, CHAR_1, DB_IDENT_LEN+1, UC_NONE, 0
193 #define DMNDESC_4ATYPE DT_4ATYPE, INT_4, 1, UC_NONE, 0
194 #define DMNDESC_4DIM DT_4DIM, INT_4, 1, UC_NONE, 0
195 #define DMNDESC_4CATEG DT_4CATEG, INT_4, 1, UC_NONE, 0
196 /* @} */
197 
198 
199 /***********************************************************************
200  *
201  * Описание прочих служебных типов таблиц * ***********************************************************************/ /** @name 4LOCK * Таблица блокировок доступа к объектам данных */ /* @{ */ #define TT_4LOCK "4LOCK" #define DT_4ID "4ID" #define DT_4TYPE "4TYPE" #define DT_4MOMENT "4MOMENT" #define DT_4APPNAME "4APPNAME" #define DT_4OWNER "4OWNER" #define DT_4WORKPLACE "4WORKPLACE" #define DT_4HOST "4HOST" #define DT_4PID "4PID" /* dname atype dim categ offset */ #define DD_4ID DT_4ID, INT_4, 1, UC_NONE, 0 #define DD_4MOMENT DT_4MOMENT, CHAR_1, MOMENT_LEN+1, UC_NONE, 0 #define DD_4TYPE DT_4TYPE, CHAR_1, 3, UC_NONE, 0 #define DD_4APPNAME DT_4APPNAME, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4OWNER DT_4OWNER, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4WORKPLACE DT_4WORKPLACE, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4HOST DT_4HOST, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4PID DT_4PID, INT_4, 1, UC_NONE, 0 /* @} */ /** @name 4HISTORY * Таблица истории обработки проекта */ /* @{ */ #define TT_4HISTORY "4HISTORY" #define DT_4TIMESTAMP "4TIMESTAMP" /* already defined #define DT_4APPNAME "4APPNAME"*/ #define DT_4JOBNUM "4JOBNUM" #define DT_4USER "4USER" #define DT_4DATAREF "4DATAREF" #define DT_4EVENT "4EVENT" /* already defined #define DT_4MOMENT "4MOMENT" #define DT_4WORKPLACE "4WORKPLACE" #define DT_4HOST "4HOST"*/ /* dname atype dim categ offset */ #define DD_4TIMESTAMP DT_4TIMESTAMP, INT_4, 1, UC_NONE, 0 #define DD_4EVENT DT_4EVENT, CHAR_1, 256, UC_NONE, 0 /* already defined #define DD_4APPNAME DT_4APPNAME, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0*/ #define DD_4JOBNUM DT_4JOBNUM, INT_4, 1, UC_NONE, 0 #define DD_4USER DT_4USER, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4DATAREF DT_4DATAREF, DBTPTR,1, UC_NONE, 0 /* already defined #define DD_4MOMENT DT_4MOMENT, CHAR_1, MOMENT_LEN+1, UC_NONE, 0 #define DD_4WORKPLACE DT_4WORKPLACE, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0 #define DD_4HOST DT_4HOST, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0*/ /* @} */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** Инициализация регистра прикладных типов таблиц. Может вызываться многократно без ущерба для быстродействия и логики работы ЛБД. */ void dbAppInitialize (); /** Инициализирует указанную область памяти умолчательным значением данного типа. */ void dbFillEmpty (void* ptr, DbDomainDesc* dd); /** Проверяет указанную область памяти на умолчательные значения данного типа. */ Logic dbCheckEmpty (void* ptr, DbDomainDesc* dd); /** *********************************************************************** * Для целей отладки программ, использующих ЛБД4 можно присвоить * переменной окружения DBDEBUG числовое значение, показывающее, * какой серьезности сообщения о внутренней работе процедур ЛБД следует * сообщать. Соответствие числовых кодов и семантики приводится ниже: * EL_FATAL 0 - фатальные ошибки, влияющие на работоспособность ЛБД; * EL_ERROR 1 - серьезные ошибки при работе с ЛБД из прикл.программ; * EL_WARNING 2 - предупреждения о "поступках" процедур ЛБД; * EL_INFO 3 - нейтральная информация при работе с ЛБД; * EL_HINT 4 - сообщения о выполняемых операциях; * EL_DEBUG 5 - отладочные сообщения из внутренней кухни ЛБД. ***********************************************************************/ /** Функция заменяет wePutMsg() с целью не выводить на печать сообщения с уровнем серьезности больше dbDebugLevel. Таким образом, если dbDebugLevel == 0, то будут печататься только сообщения серьезности EL_FATAL. Если == 1, то EL_FATAL и EL_ERROR и т.д. */ void dbPutMsg (int elevel, const char* msg); /** Функция заменяет weFormatMsg() с целью не выводить на печать сообщения с уровнем серьезности больше dbDebugLevel. */ void dbFormatMsg (int elevel, const char* format, ...); /** Функция выводит указанную строку в файл протокола операций. */ void dbOperLog (const char* format, ...); /** Return name of directory for temporal data base objects. */ const char* dbTempDir (); #ifdef __cplusplus }; #endif /* __cplusplus */ #endif /* dbdefs.h */
202  *
203  ***********************************************************************/
204 
208 /* @{ */
209 #define TT_4LOCK "4LOCK"
210 #define DT_4ID "4ID"
211 #define DT_4TYPE "4TYPE"
212 #define DT_4MOMENT "4MOMENT"
213 #define DT_4APPNAME "4APPNAME"
214 #define DT_4OWNER "4OWNER"
215 #define DT_4WORKPLACE "4WORKPLACE"
216 #define DT_4HOST "4HOST"
217 #define DT_4PID "4PID"
218 
219 /* dname atype dim categ offset */
220 #define DD_4ID DT_4ID, INT_4, 1, UC_NONE, 0
221 #define DD_4MOMENT DT_4MOMENT, CHAR_1, MOMENT_LEN+1, UC_NONE, 0
222 #define DD_4TYPE DT_4TYPE, CHAR_1, 3, UC_NONE, 0
223 #define DD_4APPNAME DT_4APPNAME, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0
224 #define DD_4OWNER DT_4OWNER, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0
225 #define DD_4WORKPLACE DT_4WORKPLACE, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0
226 #define DD_4HOST DT_4HOST, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0
227 #define DD_4PID DT_4PID, INT_4, 1, UC_NONE, 0
228 /* @} */
229 
230 
234 /* @{ */
235 #define TT_4HISTORY "4HISTORY"
236 #define DT_4TIMESTAMP "4TIMESTAMP"
237 /* already defined
238 #define DT_4APPNAME "4APPNAME"*/
239 #define DT_4JOBNUM "4JOBNUM"
240 #define DT_4USER "4USER"
241 #define DT_4DATAREF "4DATAREF"
242 #define DT_4EVENT "4EVENT"
243 /* already defined
244 #define DT_4MOMENT "4MOMENT"
245 #define DT_4WORKPLACE "4WORKPLACE"
246 #define DT_4HOST "4HOST"*/
247 
248 /* dname atype dim categ offset */
249 #define DD_4TIMESTAMP DT_4TIMESTAMP, INT_4, 1, UC_NONE, 0
250 #define DD_4EVENT DT_4EVENT, CHAR_1, 256, UC_NONE, 0
251 /* already defined
252 #define DD_4APPNAME DT_4APPNAME, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0*/
253 #define DD_4JOBNUM DT_4JOBNUM, INT_4, 1, UC_NONE, 0
254 #define DD_4USER DT_4USER, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0
255 #define DD_4DATAREF DT_4DATAREF, DBTPTR,1, UC_NONE, 0
256 /* already defined
257 #define DD_4MOMENT DT_4MOMENT, CHAR_1, MOMENT_LEN+1, UC_NONE, 0
258 #define DD_4WORKPLACE DT_4WORKPLACE, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0
259 #define DD_4HOST DT_4HOST, CHAR_1, WE_NAME_LEN+1, UC_NONE, 0*/
260 /* @} */
261 
262 
263 #ifdef __cplusplus
264 extern "C" {
265 #endif /* __cplusplus */
266 
267 
270 void dbAppInitialize ();
271 
274 void dbFillEmpty (void* ptr, DbDomainDesc* dd);
275 
278 Logic dbCheckEmpty (void* ptr, DbDomainDesc* dd);
279 
280 
299 void dbPutMsg (int elevel, const char* msg);
300 
303 void dbFormatMsg (int elevel, const char* format, ...);
304 
305 
307 void dbOperLog (const char* format, ...);
308 
309 
311 const char* dbTempDir ();
312 
313 
314 #ifdef __cplusplus
315 };
316 #endif /* __cplusplus */
317 
318 
319 #endif /* dbdefs.h */
const char * dbTempDir()
#define DB_IDENT_LEN
Definition: dbdefs.h:37
Logic dbCheckEmpty(void *ptr, DbDomainDesc *dd)
void dbFormatMsg(int elevel, const char *format,...)
Definition: dbdefs.h:169
void dbOperLog(const char *format,...)
void dbPutMsg(int elevel, const char *msg)
Definition: dbdefs.h:158
Definition: dbdefs.h:134
void dbAppInitialize()
void dbFillEmpty(void *ptr, DbDomainDesc *dd)