Запуск ядра СУБД ЛИНТЕР

Назначение

Запуск ядра СУБД ЛИНТЕР.

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

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

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

  2. идентификатор LIN_DATABASE_RUN команды «Запуск ядра СУБД ЛИНТЕР»;

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

  4. необязательный аргумент AddCommand c дополнительными ключами запуска ядра СУБД ЛИНТЕР (задается только одновременно с флагом LIN_DATABASE_RUN_ARG). Максимальная длина передаваемой ядру полной команды запуска (т.е. в сумме с дополнительными ключами) не должна превышать 1024 байт.

Допустимые флаги:

Флаг Значение
LIN_DATABASE_RUN_RDONLY

Запуск ядра в режиме

«только чтение» (аналог ключа /RO)

LIN_DATABASE_RUN_TCP Запуск одновременно с ядром сетевого агента (аналог ключа /TCP)
LIN_DATABASE_RUN_JDBC

Запуск одновременно с ядром сетевого драйвера сервера для JDBC-сервера

с номером порта по умолчанию (аналог ключа /JDBCS)

LIN_DATABASE_RUN_ARG Функция содержит аргумент AddCommand с дополнительным набором ключей запуска ядра
Выходные данные

Выходными данными является управляющая структура LINDBCtrl.

В управляющей структуре будут возвращены:

Имя поля Значение
LinterPid Pid запущенного ядра СУБД ЛИНТЕР
RetStatus Библиотечный код завершения
SysStatus Системный код завершения
Описание

Функция определяет рабочую БД и запускает на ней ядро СУБД ЛИНТЕР. Алгоритм выбора каталога рабочей БД аналогичен выбору каталога при создании БД (см. пункт Создание БД).

Ядро запускается из каталога, прописанного в поле LinterPath управляющей структуры LINDBCtrl. Если поле LinterPath не инициализировано, по умолчанию ядро ищется в подкаталоге /bin установочного каталога СУБД ЛИНТЕР.

В качестве дополнительного указания о местоположении рабочей БД можно использовать аргумент AddCommand, задаваемый аналогично полю DbPath в управляющей структуре LINDBCtrl.

После запуска Pid запущенного ядра СУБД сохраняется в управляющей структуре LINDBCtrl.

Если флаги не заданы, по умолчанию ядру СУБД ЛИНТЕР передается пустой список ключей. При необходимости дополнительные ключи запуска ядра можно передать в аргументе AddCommand, при этом должен быть установлен флаг LIN_DATABASE_RUN_ARG, сигнализирующий о наличии ключей в дополнительном аргументе.

Формат символьной строки дополнительных команд:

< ключ >< пробел >< ключ >< пробел >… < ключ >< пробел >

Пример значений аргумента AddCommand:

"/pool=20000 /pidfile=c:\tmp.txt"

Если установлен флаг LIN_DATABASE_RUN_RDONLY, то должно быть инициализировано поле TmpDir управляющей структуры LINDBCtrl. Его значение будет передано ядру СУБД ЛИНТЕР в значении соответствующего ключа. Если поле не инициализировано, ядро СУБД ЛИНТЕР разместит временные файлы в каталоге, определяемом переменной среды окружения LINTER_TMP, а если и она не задана, то по умолчанию в каталоге /tmp/linter.

Если установлен флаг LIN_DATABASE_RUN_TCP, ядру СУБД ЛИНТЕР передается дополнительный ключ /TCP, и оно выполняет запуск сетевого агента (драйвера сервера dbs_tcp) для обеспечения доступа к данной БД удаленным клиентским приложениям.

Если установлен флаг LIN_DATABASE_RUN_JDBC, ядру СУБД ЛИНТЕР передается дополнительный ключ /JDBCS, и оно выполняет запуск JDBC-сервера для обеспечения доступа к данной БД удаленным JAVA-приложениям.

Возвращаемые значения

Функция возвращает:

  • 0 – нормальное завершение;

  • -1 – не запущено ядро СУБД ЛИНТЕР. Если задан флаг LIN_DATABASE_RUN_TCP (LIN_DATABASE_RUN_JDBC), то данный код возвращается также при невозможности запустить сетевой драйвер сервера (сетевой драйвер JDBC-сервера).

Коды завершения
Код Описание
E_LINCTRL_PIPE Неуспешная попытка создания программного канала ввода вывода
E_LINCTRL_LINFAILED Неудачный запуск ядра СУБД ЛИНТЕР. Уточняющий код завершения см. в поле SysStatus управляющей структуры LINDBCtrl
E_LINCTRL_RUN Неудачная попытка запуска исполняемого модуля ядра СУБД ЛИНТЕР
E_LINCTRL_NOINIT Управляющая структура LINDBCtrl не инициализирована
E_LINCTRL_NOMEM Невозможность выделения динамической памяти для полей управляющей структуры LINDBCtrl
Пример
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include "linctrl.h"
#include "exlib.h"

void  PrintError(t_LINDBCtrl *LINDBCtrl);

void  main()
  {
  t_LINDBCtrl LINDBCtrl;
  CHAR  LinterPath[]="/usr/linter";
  CHAR AddCommand[]="/pool=20000 /pidfile=c:\tmp.txt "
  LONGINT Err;
  Err=LINDBCtrlInit(&LINDBCtrl,LinterPath);
  if (Err != NORMAL)
    PrintError(&LINDBCtrl);
  printf("Initialisation LINDBCtrl\n");
  Err= LinDatabaseControl (LINDBCtrl, LIN_DATABASE_RUN,
  LIN_DATABASE_RUN_TCP | LIN_DATABASE_RUN_ARG, AddCommand);
  If (Err != NORMAL)
    PrintError(&LINDBCtrl);
  printf("Run DBMS Linter\n");
  printf("End Example\n");
  }