Дать описание БД

Назначение
 

Команда DESC предназначена для получения системных параметров БД.

Параметры вызова

inter(CBL, NULL, [OpBuf], [CondBuf], RowBuf);

Входные данные

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

  • контрольный блок CBL;

  • буфер SQL-запросов OpBuf.

В контрольном блоке должны быть заполнены поля:

Имя поля Значение
Command "DESC"
LnBufRow Длина буфера выборки данных
Node Имя ЛИНТЕР-сервера

Буфер SQL-запросов OpBuf может содержать имя устанавливаемой для данного канала кодовой страницы, которая должна быть известна СУБД (см. описание алгоритма выборка кодовой страницы в команде OPEN).

Выходные данные

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

  • контрольный блок CBL;

  • буфер выборки данных RowBuf.

В контрольном блоке будут возвращены:

Имя поля Значение
CodErr Код завершения запроса к СУБД ЛИНТЕР
LnBufRow Фактическая длина буфера выборки данных
SysErr Код состояния ОС

Информация в буфере выборки данных RowBuf будет представлена в следующем виде:


struct DB_DESC
  {
  L_LONG VerMajor;        /* Старший номер версии ЛИНТЕР, */
                          /* для которой построена БД */
  L_LONG VerMinor;        /* Младший номер версии ЛИНТЕР, */
                          /* для которой построена БД */
  L_LONG VerBuild;        /* Номер сборки версии ЛИНТЕР */
  L_LONG SortPoolSize;    /* Размер пула (в страницах) */
                          /* подсистемы сортировки */
  L_LONG KernelPoolSize;  /* Размер пула (в страницах) */
                          /* ядра системы */
  L_LONG FileQueueSize;   /* Размер очереди файлов */
  L_LONG UserQueueSize;   /* Размер очереди пользователей */
  L_LONG TableQueueSize;  /* Размер очереди таблиц */
  L_LONG ColumnQueueSize; /* Размер очереди столбцов */
  L_LONG ChannelQueueSize;/* Размер очереди каналов */
  L_LONG SnapTimeout;     /* Период времени между операциями */
                          /* полного Snap */
  L_LONG KillTimeout;     /* Тайм-аут опроса существования клиента */
  L_WORD NumOfSort;       /* Количество файлов сортировки */
  L_BYTE Flags;           /* Атрибуты БД (таблица 9) */
  L_BYTE Flags2;
  L_LONG LReserv2;        /* Зарезервировано */
  L_WORD SQLUsrCacheSize; /* Размер кэша пользователей SQL*/
  L_WORD SQLTabCacheSize; /* Размер кэша таблиц SQL*/
  L_WORD SQLColCacheSize; /* Размер кэша столбцов SQL*/
  L_WORD SQLPrcCacheSize; /* Размер кэша хранимых процедур SQL*/
  L_WORD SQLChsCacheSize; /* Размер кэша кодировок SQL*/
  L_WORD MaxRecSize;      /* Предельная длина записи в таблице БД */
  L_CHAR BaseName[18];    /* Имя БД */
  L_CHAR SysLog;          /* Признак активности журнала транзакций */
  L_CHAR Sync;            /* Признак синхронизации ввода/вывода */
  L_CHAR Log;             /* Признак ведения файла-протокола */
  L_CHAR Os;              /* Идентификатор операционной системы */
  L_WORD CharSet;         /* Идентификатор кодовой страницы */
                          /* данной БД */
  };

  

Примечание

Идентификаторы (коды) операционных систем приведены в приложении 1.

Таблица 9. Атрибуты БД
ОбозначениеЗначение атрибутаОписание
KERNEL_INVBYTEORD0x01Порядок байт клиента и сервера не совпадают (будет выполняться автоматическое преобразование типов данных)
KERNEL_DEMOLIC0x02СУБД ЛИНТЕР работает на условиях демонстрационной лицензии
KERNEL_DEMOLICEXP0x04Срок лицензии истек. СУБД будет работать еще 14 дней после завершения срока лицензии
KERNEL_STANDARD_MODE0x10СУБД ЛИНТЕР работает в стандартном режиме
KERNEL_GEOPREFIX_MODE0x20СУБД поддерживает геометрический тип данных
KERNEL_READONLY_MODE0x40 СУБД ЛИНТЕР работает в режиме «только чтение»
KERNEL_QUANT_TIME0x80 СУБД ЛИНТЕР работает в режиме квантования (см. SQL-команду SET DATABASE QUANT)

Описание

Команда неканальная, и ее выполнение разрешено любому пользователю БД.

Клиентскому приложению возвращается столько первых полей структуры DB_DESC, сколько целиком умещается в указанный им размер буфера.

Коды завершения
Код Описание
NORMAL Нормальное завершение
Пример формирования команды
#include < string.h >
#include < stdlib.h >
#include "inter.h"

L_LONG LinterDESC(TCBL * pCBL, DB_DESC * pOut)
  {
  memcpy(pCBL- >Command, "DESC", 4);
  pCBL- >LnBufRow = sizeof(DB_DESC);
  pCBL- >PrzExe &= ~Q_ASYNC;
  inter(pCBL, NULL, NULL, NULL, pOut);
  return pCBL- >CodErr;
  }
Пример использования команды
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include "inter.h"
#include "exlib.h"

#ifndef WINCE
int    main()
#else
int    exdesc()
#endif
  {
  TCBL    CBLconnect;
  L_CHAR    Name_Pass[] = "SYSTEM/MANAGER8";
  L_CHAR    Node[] = "        ";
  L_WORD    Priority = 0;
  L_LONG  PrzExe = M_EXCLUSIVE | Q_ENCODE | M_BINARY;
  L_LONG  Err;
  DB_DESC desc;

  memset(&CBLconnect,0,sizeof(TCBL));
  Err = LinterOPEN(&CBLconnect, Name_Pass, Node, Priority, PrzExe);
  if (Err != NORMAL)
    PrintError(&CBLconnect);
  printf("Connect to RDBMS Linter\n");

  Err = LinterDESC(&CBLconnect, &desc);
  if (Err != NORMAL)
    PrintError(&CBLconnect);
  printf("DESC :\n");
  printf("\tVerMajor=%ld\n", desc.VerMajor);
  printf("\tVerMinor=%ld\n", desc.VerMinor);
  printf("\tVerBuild=%ld\n", desc.VerBuild);
  printf("\tSortPoolSize=%ld\n", desc.SortPoolSize);
  printf("\tKernelPoolSize=%ld\n", desc.KernelPoolSize);
  printf("\tFileQueueSize=%ld\n", desc.FileQueueSize);
  printf("\tUserQueueSize=%ld\n", desc.UserQueueSize);
  printf("\tTableQueueSize=%ld\n", desc.TableQueueSize);
  printf("\tColumnQueueSize=%ld\n", desc.ColumnQueueSize);
  printf("\tChannelQueueSize=%ld\n", desc.ChannelQueueSize);
  printf("\tSnapTimeout=%ld\n", desc.SnapTimeout);
  printf("\tKillTimeout=%ld\n", desc.KillTimeout);
  printf("\tBaseName=%.18s\n", desc.BaseName);
  printf("\tSysLog=%hd\n", desc.SysLog);
  printf("\tSync=%hd\n", desc.Sync);
  printf("\tLog=%hd\n", desc.Log);
  printf("\tOs=%ld\n", (L_LONG ) desc.Os);
  printf("\n");

  printf("End Example\n");

  return 0;
  }