|
|
InterBase определяет набор макро констант для представления типов данных SQL и NULL – состояния информации в XSQLVAR. Приложение должно использовать эти макро константы, для определения типов данных параметров и типов данных элементов списка -select в инструкции SQL. Следующая таблица перечисляет каждый тип данных SQL, его соответствующее макро-константное выражение, тип данных C или тип данных определенный InterBase , и используется поле sqlind или нет, чтобы указать параметр или переменную, которая содержит NULL или неопределенные данные:
Тип
данных
Макрос
Тип данных С
использование sqlind Array
SQL_ARRAY
ISC_QUAD
No Array
SQL_ARRAY + 1
ISC_QUAD
Yes Blob
SQL_BLOB
ISC_QUAD
No BLOB
SQL_BLOB + 1
ISC_QUAD
Yes CHAR
SQL_TEXT
char[]
No CHAR
SQL_TEXT + 1
char[]
Yes DATE
SQL_DATE
ISC_DATE
No DATE
SQL_DATE + 1
ISC_DATE
Yes DECIMAL
SQL_SHORT, SQL_LONG, SQL_DOUBLE,
or SQL_INT64
int,
long, double, or ISC_INT64
No DECIMAL
SQL_SHORT + 1, SQL_LONG
+ 1, SQL_DOUBLE
+ 1, or
SQL_INT64 + 1
int,
long, double, or ISC_INT64
Yes DOUBLE PRECISON
SQL_DOUBLE
double
No DOUBLE PRECISION
SQL_DOUBLE + 1
double
Yes INTEGER
SQL_LONG
long
No INTEGER
SQL_LONG + 1
ISC_LONG
Yes FLOAT
SQL_FLOAT
float
No FLOAT
SQL_FLOAT + 1
float
Yes NUMERIC
SQL_SHORT, SQL_LONG, SQL_DOUBLE,
or SQL_INT64
int,
long, double, or ISC_INT64
No NUMERIC
SQL_SHORT + 1, SQL_LONG
+ 1, SQL_DOUBLE
+ 1, or
SQL_INT64 + 1
int,
long, double, or ISC_INT64
Yes SMALLINT
SQL_SHORT
short
No SMALLINT
SQL_SHORT + 1
short
Yes TIME
SQL_TIME
ISC_TIME
No TIME
SQL_TIME + 1
ISC_TIME
Yes TIMESTAMP
SQL_TIMESTAMP
ISC_TIMESTAMP
No TIMESTAMP
SQL_TIMESTAMP + 1
ISC_TIMESTAMP
Yes VARCHAR
SQL_VARYING
Первые
2 байта:
short содержащий
длину символьной
строки; хранит байты: char [] No VARCHAR
SQL_VARYING
+ 1
Первые
2 байта: short
содержащий
длину символьной строки;
хранит байты: char
[]
Yes Примечание: DECIMAL и типы данных NUMERIC хранятся внутри БД как SMALLINT, INTEGER, DOUBLE PRECISION, или 64-разрядные целочисленные типы данных. Чтобы определить правильное макро выражение для представления столбцов DECIMAL или NUMERIC, используйте isql, чтобы узнать определение столбца таблицы, и увидеть, как InterBase хранит данные столбца, а затем выбрать соответствующее макро выражение. Информация о типе данных параметра или элемента списка-select содержится в поле sqltype структуры XSQLVAR. Значение, содержащееся в sqltype предоставляет два вида информации:
Например,
если sqltype равняется SQL_TEXT, параметр или
элемент списка -select
это CHAR, который не использует sqlind для
проверки значения NULL (потому что
теоретически значения NULL не
позволяются в этом случае). Если sqltype
равняется SQL_TEXT + 1, то sqlind может быть
проверен, чтобы увидеть, является ли
параметр или элемент списка -select
NULL: Выражение
языка C,
sqltype
& 1, обеспечивает полезную проверку того,
может ли параметр или элемент списка -select
содержать NULL.
Выражение равно 0, если параметр или элемент
списка выбора не могут содержать NULL,
и 1, если параметр или элемент списка выбора
могут содержать NULL.
Следующий фрагмент кода демонстрирует, как
использовать это выражение: if
(sqltype & 1 == 0) { /*
параметр не может содержать NULL
*/ } else { /*
параметр может содержать NULL*/ } По
умолчанию, и isc_dsql_prepare
() и isc_dsql_describe
() возвращают макро выражение type
+ 1, так что sqlind
должен всегда проверяться на NULL значения с этими инструкциями.
|
Дизайн: Piton Alien |