Оператор (Statment)
Оператор – это результат трансляции запроса, его характеристики можно найти в приложении 2.
Характеристика с типом sAnswerDesc – это описание столбца ответа, которое имеет следующую структуру:
#define linNameLen 66
typedef struct {
L_CHAR Owner[linNameLen]; /* имя пользователя */
L_CHAR Table[linNameLen]; /* имя таблицы */
L_CHAR Column[linNameLen]; /* имя столбца/параметра */
L_WORD Length; /* максимальная длина */
L_BYTE Type; /* тип */
L_BYTE Prec; /* точность */
L_BYTE Scale; /* масштаб */
L_BYTE NullIndicator; /* индикатор наличия NULL-значения */
L_LONG RealLength; /* фактическая длина */
} t_ParamDesc;
Запрос, поданный на трансляцию, может содержать (или не содержать) параметры, значения которых потом (на этапе Bind) вставляются на соответствующие места запроса.
Характеристика с типом sParamDesc – это описание параметра запроса (оператора). Данная характеристика принимается также в структуру t_ParamDesc, однако при этом не заполняются поля Owner, Table и RealLength. В поле Column возвращается имя параметра либо пустая строка, если имя не было задано.
Если значение поля RealLength равно -1, соответствующий параметр содержит null-значение.
Характеристика с типом cProcArgDesc или ARGPROC_OUT – это описание возвращаемого значения и выходных параметров после выполнения хранимой процедуры.
typedef struct {
#if _VER_MAX >= 500
L_WORD Length, /* длина значения */
L_BYTE Ntype, /* тип значения */
Prec, /* точность */
Scale, /* масштаб */
Reserv; /* зарезервировано */
#if _VER_MAX >= 600
WORD charset; /* кодовая страница */
#endif
#endif
} P_TYPE;
typedef struct {
L_BYTE Flags, /* флаги значения */
L_BYTE Reserv, /* зарезервировано */
L_WORD Value, /* относительный адрес значения в буфере ответа */
P_TYPE Type, /* описание типа значения */
} t_ProcArgDesc; /* флаги значения */
typedef struct {
L_BYTE Flags, /* флаги значения ARGPROC_OUT */
L_BYTE Reserv, /* зарезервировано */
#if _VER_MAX >= 550
L_WORD Expr, /* идентификатор выражения */
/* (для внутреннего применения) */
#endif
L_WORD Value, /* относительный адрес значения в буфере ответа */
P_TYPE Type, /* описание типа значения */
#if _VER_MAX >= 550
WORD Reserv2;
#endif
} ARGPROC_OUT; /* флаги значения */
Флаги значения:
#define fNULL 0x02 #define fCursor 0x04 #define fName 0x08