Создание БД
Назначение
Создание БД.
Синтаксис
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");
}