Создание БД
Назначение
Создание БД.
Синтаксис
L_LONG LinDatabaseControl(t_LINDBCtrl* LINDBCtrl, LIN_DATABASE_CREATE, L_LONG Flags,char *AddComand);
Входные данные
Входными данными являются:
-
указатель на инициализированную управляющую структура LINDBCtrl;
-
идентификатор
LIN_DATABASE_CREATE
команды «Создание БД»; -
флаги Flags, модифицирующие поведение команды;
-
необязательный аргумент AddCommand c дополнительными командами создания БД (имеет смысл только одновременно с флагом
LIN_DATABASE_CREATE_GENDB_ADD
). Максимальная длина передаваемой утилите gendb полной команды (т.е. в сумме с дополнительными командами) не должна превышать 1024 байт.
Допустимые флаги:
Флаг | Значение | |
---|---|---|
LIN_DATABASE_CREATE_PURGE | Предварительная очистка каталога, в котором будет создаваться БД, от файлов предыдущей БД | |
LIN_DATABASE_CREATE_GENDB_ADD | Функция рассматривает аргумент AddCommand как дополнительный набор команд для утилиты создания БД | |
LIN_DATABASE_CREATE_IGNORE | Создание новой БД поверх существующей |
Выходные данные
Выходными данными является управляющая структура LINDBCtrl.
В управляющей структуре будут возвращены:
Имя поля | Значение | |
---|---|---|
RetStatus | Код завершения | |
SysStatus | Системный код завершения |
Описание
Для создания БД функция запускает на выполнение утилиту gendb, на стандартный вход которой передает команду создания БД (см. документ «СУБД ЛИНТЕР. Создание и конфигурирование базы данных»).
Выбор каталога для создания БД осуществляется по следующим правилам:
-
если поле DbPath не инициализировано и нет дополнительных указаний о местоположении создаваемой БД в аргументе AddCommand, то БД создается в текущем каталоге;
-
если поле DbPath инициализировано и нет дополнительных указаний о местоположении создаваемой БД в аргументе AddCommand, то БД создается в каталоге, определяемом полем DbPath;
-
если поле DbPath инициализировано, а в аргументе AddCommand явно задано её местоположение, то БД создается в соответствии с параметрами AddCommand;
-
если поле DbPath не инициализировано, но есть дополнительные указания о местоположении создаваемой БД в аргументе AddCommand, то БД создается в соответствии с параметрами AddCommand.
Функция предполагает, что утилита gendb находится в подкаталоге /bin
установочного каталога СУБД ЛИНТЕР. Путь к установочному каталогу берется из поля LinterPath управляющей структуры LINDBCtrl.
По умолчанию утилите gendb передается команда 'CREATE DATABASE
' без параметров. Дополнительные параметры команды 'CREATE DATABASE
' или другие команды утилиты gendb БД можно передать в аргументе AddCommand
, при этом должен быть установлен флаг LIN_DATABASE_CREATE_GENDB_ADD
, сигнализирующий о наличии дополнительных команд (параметров). В таком случае строка аргумента AddCommand
просто добавляется к команде CREATE DATABASE
.
Формат символьной строки дополнительных команд:
< команда gendb >;< CR > < команда gendb >;< CR > ... < команда gendb >;< CR >
< CR > – символ перевода строки.
Примеры значений аргумента AddCommand:
-
"name \"Sale\" username \"SysAdm\" maxtab 100 maxcol 750 maxusr 30;\n"
-
";\nset autoconfig on;\n set sql users 120 sql columns 900;\n"
При установленном флаге LIN_DATABASE_CREATE_IGNORE
БД создается даже в том случае, если в каталоге уже существует некоторая БД. Для этого в утилите gendb отключается интерактивный вывод запроса на удаление существующей БД. Неконтролируемое использование этого флага может быть опасным.
Возвращаемые значения
Функция возвращает:
-
0
– нормальное завершение; -
-1
– БД не создана.
Коды завершения
Код | Описание | |
---|---|---|
E_LINCTRL_PIPE | Неуспешная попытка создания программного канала ввода-вывода | |
E_LINCTRL_GENDBFAILED | Неудачное завершение работы утилиты gendb. Уточняющий код завершения см. в поле SysStatus управляющей структуры LINDBCtrl | |
E_LINCTRL_WRITE | Неуспешная запись в канал ввода-вывода | |
E_LINCTRL_RUN | Неуспешный запуск утилиты gendb | |
E_LINCTRL_INVARG | Список дополнительных команд слишком длинный (длина аргумента AddCommand больше 1024 байт) | |
E_LINCTRL_NOINIT | Управляющая структура LINDBCtrl не инициализирована | |
E_LINCTRL_OPENDIR | Ошибка открытия каталога БД для получения списка файлов (opendir) | |
E_LINCTRL_REMOVE | Невозможность удаления файла БД |
Пример
#include < stdio.h > #include < stdlib.h > #include < string.h > #include "inter.h" #include "exlib.h" void PrintError(t_LINDBCtrl *LINDBCtrl); void main() { t_LINDBCtrl LINDBCtrl; CHAR LinterPath[]="/usr/linter"; CHAR AddCommand[]="\"Продажи\" on DB01;\nset syslog count 3;\n" LONGINT Err; Err=LINDBCtrlInit(&LINDBCtrl,LinterPath); if (Err != NORMAL) PrintError(&LINDBCtrl); printf("Initialisation LINDBCtrl\n"); Err=LinDatabaseControl(LINDBCtrl, LIN_DATABASE_CREATE, LIN_DATABASE_CREATE_PURGE|LIN_DATABASE_CREATE_GENDB_ADD, AddCommand); If (Err != NORMAL) PrintError(&LINDBCtrl); printf("Create DB\n"); printf("End Example\n"); }