Создание БД

Назначение

Создание БД.

 
Синтаксис
 
L_LONG LinDatabaseControl(t_LINDBCtrl* LINDBCtrl, LIN_DATABASE_CREATE, L_LONG Flags,char *AddComand);
Входные данные

Входными данными являются:

  1. указатель на инициализированную управляющую структура LINDBCtrl;

  2. идентификатор LIN_DATABASE_CREATE команды «Создание БД»;

  3. флаги Flags, модифицирующие поведение команды;

  4. необязательный аргумент 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, на стандартный вход которой передает команду создания БД (см. документ «СУБД ЛИНТЕР. Создание и конфигурирование базы данных»).

Выбор каталога для создания БД осуществляется по следующим правилам:

  1. если поле DbPath не инициализировано и нет дополнительных указаний о местоположении создаваемой БД в аргументе AddCommand, то БД создается в текущем каталоге;

  2. если поле DbPath инициализировано и нет дополнительных указаний о местоположении создаваемой БД в аргументе AddCommand, то БД создается в каталоге, определяемом полем DbPath;

  3. если поле DbPath инициализировано, а в аргументе AddCommand явно задано её местоположение, то БД создается в соответствии с параметрами AddCommand;

  4. если поле 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:

  1. "name \"Sale\" username \"SysAdm\" maxtab 100 maxcol 750 maxusr 30;\n"
  2. ";\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");
  }