Оператор (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