7.7.8.Supported Conversions
Before the consumer creates an accessor, it can call IConvertType::CanConvert to determine if the provider supports a particular conversion.
Default Data Type Mapping
The OpenLink Provider binds to the ODBC/UDBC data source using the types in the table below. The SQL type is queried using SQLDescribeCol. The sign of the data type (signed/unsigned) is determined using SQLColAttributes. It is used in deciding which C type to use in internal buffers and which type indicator to return through IColumnsInfo::GetColumnInfo.
Table7.4.OLE-DB Data Type Mappings
| SQL Type Indicator | Indicator of C Type Used For Internal Buffers | OLE DB Type Indicator |
|---|---|---|
|
SQL_CHAR, SQL_VARCHAR, SQL_LONGVARCHAR, SQL_DECIMAL, SQL_NUMERIC |
SQL_C_CHAR |
DBTYPE_STR |
|
SQL_BIT |
SQL_C_BIT |
DBTYPE_BOOL |
|
SQL_TINYINT, SQL_SMALLINT |
SQL_C_USHORT, SQL_C_SSHORT |
DBTYPE_I2 |
|
SQL_INTEGER |
SQL_C_ULONG, SQL_C_SLONG |
DBTYPE_I4 |
|
SQL_BIGINT |
SQL_C_STR |
DBTYPE_STR |
|
SQL_REAL |
SQL_C_FLOAT |
DBTYPE_R4 |
|
SQL_FLOAT, SQL_DOUBLE |
SQL_C_DOUBLE |
DBTYPE_R8 |
|
SQL_BINARY, SQL_VARBINARY, SQL_LONGVARBINARY |
SQL_C_BINARY |
DBTYPE_BYTES |
|
SQL_DATE |
SQL_C_DATE |
DBTYPE_DATE |
|
SQL_TIME |
SQL_C_TIME |
DBTYPE_DATE |
|
SQL_TIMESTAMP |
SQL_C_TIMESTAMP |
DBTYPE_DATE |
Length Binding
For types DBTYPE_UI1, DBTYPE_I2, DBTYPE_I4, DBTYPE_I8, DBTYPE_R4, DBTYPE_R8, DBTYPE_CY, DBTYPE_NUMERIC, the length binding is always set to the fixed size of the destination binding type, rather than the internal source type.
Supported Data Conversions
The follwoing table outlines the supported type conversion implemented in the OpenLink provider. An 'X' means supported, and '-' means not supported.
Table7.5.OLE-DB Data Type Conversions
| I1 | I2 | I4 | I8 | UI1 | UI2 | UI4 | UI8 | R4 | R8 | CY | DEC | NUM | BOOL | DATE | DBDATE | DBTIMESTAMP | DBTIME | BYTES | BSTR | STR | WSTR | DISP | UNK | GUID | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
I1 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
I2 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
I4 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
I8 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
UI1 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
UI2 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
UI4 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
UI8 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
R4 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
R8 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
CY |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
DEC |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
NUM |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
BOOL |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
X |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
- |
|
DATE |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
|
DBDATE |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
X |
X |
- |
X |
X |
X |
X |
X |
- |
- |
- |
|
DBTIME |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
X |
- |
X |
X |
X |
X |
X |
X |
- |
- |
- |
|
DBTIMESTAMP |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
- |
|
BYTES |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
X |
X |
X |
X |
X |
X |
X |
X |
|
BSTR |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
- |
X |
|
STR |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
X |
X |
|
WSTR |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
- |
X |
X |
|
DISP |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
X |
- |
- |
- |
X |
X |
- |
|
UNK |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
X |
- |
- |
- |
- |
X |
- |
|
GUID |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
X |
X |
X |
X |
- |
- |
X |