Дать описание БД
Назначение
Команда
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; }