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