Дать описание БД
Назначение
Команда
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.
| Обозначение | Значение атрибута | Описание |
|---|---|---|
| KERNEL_INVBYTEORD | 0x01 | Порядок байт клиента и сервера не совпадают (будет выполняться автоматическое преобразование типов данных) |
| KERNEL_DEMOLIC | 0x02 | СУБД ЛИНТЕР работает на условиях демонстрационной лицензии |
| KERNEL_DEMOLICEXP | 0x04 | Срок лицензии истек. СУБД будет работать еще 14 дней после завершения срока лицензии |
| KERNEL_STANDARD_MODE | 0x10 | СУБД ЛИНТЕР работает в стандартном режиме |
| KERNEL_GEOPREFIX_MODE | 0x20 | СУБД поддерживает геометрический тип данных |
| KERNEL_READONLY_MODE | 0x40 | СУБД ЛИНТЕР работает в режиме «только чтение» |
| KERNEL_QUANT_TIME | 0x80 | СУБД ЛИНТЕР работает в режиме квантования (см. 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;
}