Datatypes

The classes RWDBColumn and RWDBValue have an associated RWDBValue::ValueType that specifies the datatype of the database column or field being referenced. Mapping between this datatype and the database vendor type runs in both directions:

When fetching data or retrieving information about tables, the DB Access Module for ODBC converts the SQL datatype provided by ODBC into RWDBValue::ValueTypes. This mapping is shown in Table 1, which also gives the C++ datatype corresponding to the RWDBValue::ValueType.

When creating tables, the DB Access Module for ODBC maps the given RWDBValue::ValueType into an SQL datatype. This mapping is shown in Table 2.

The RWDBValue::ValueTypes, accessible through the type() method, are uniform across all Access Modules. For a complete explanation of the DB Interface Module data model, see Chapter 7, “The Data Model,” in the DB Interface Module User’s Guide, and RWDBValue in the SourcePro API Reference.

Table 221. Type mapping when retrieving data

ODBC Datatype

RWDBValue::ValueType

C++ Datatype

SQL_NUMERIC
SQL_DECIMAL

Decimal

RWDecimalPortable

SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY

Blob

RWDBBlob

SQL_BIT

UnsignedChar

unsigned char

SQL_DOUBLE
SQL_FLOAT

Double

double

SQL_INTEGER

Int/UnsignedInt

int / unsigned int

SQL_INTERVAL

Duration

RWDBDuration

SQL_LONGVARCHAR
SQL_VARCHAR
SQL_CHAR

String

RWCString

SQL_REAL

Float

float

SQL_SMALLINT

Short
UnsignedShort

short int
unsigned short int

SQL_TYPE_DATE

Date

RWDate

SQL_TYPE_TIME
SQL_TYPE_TIMESTAMP1

DateTime

RWDateTime

SQL_WLONGVARCHAR
SQL_WVARCHAR
SQL_WCHAR

WString

RWWString

SQL_BIGINT

LongLong
UnsignedLongLong

long long
unsigned long long

Table 222. Type mapping when creating tables

RWDBValue::ValueType

Possible ODBC Datatypes: the type chosen is the first type supported by the underlying driver

Blob

If 0 < length <= 255, {SQL_VARBINARY, SQL_BINARY, SQL_LONGVARBINARY, SQL_LONGVARCHAR} using the storageLength of the RWDBColumn if applicable; otherwise,
{SQL_LONGVARBINARY,SQL_VARBINARY,SQL_BINARY, SQL_LONGVARCHAR} using the storageLength of the RWDBColumn if applicable

Char, UnsignedChar

{SQL_TINYINT, SQL_SMALLINT, SQL_INTEGER, SQL_DECIMAL, SQL_NUMERIC}

Date

{SQL_TYPE_DATE, SQL_TYPE_TIMESTAMP}

DateTime

{SQL_TYPE_TIMESTAMP, SQL_TYPE_DATE}

Decimal

{SQL_DECIMAL, SQL_NUMERIC, SQL_DOUBLE}, using the precision and scale of the RWDBColumn if applicable

Double

{SQL_DOUBLE, SQL_FLOAT, SQL_DECIMAL, SQL_NUMERIC }

Duration

{SQL_INTERVAL_SECOND}

Float

{SQL_REAL, SQL_DOUBLE, SQL_FLOAT, SQL_DECIMAL, SQL_NUMERIC} using the precision and scale of the RWDBColumn if applicable

Int, UnsignedInt

{SQL_SMALLINT, SQL_INTEGER, SQL_REAL, SQL_DOUBLE, SQL_FLOAT, SQL_DECIMAL, SQL_NUMERIC}

Long, UnsignedLong

{SQL_INTEGER, SQL_REAL, SQL_DOUBLE, SQL_FLOAT, SQL_DECIMAL, SQL_NUMERIC}

LongLong, UnsignedLongLong

{SQL_BIGINT, SQL_DECIMAL, SQL_REAL}2

Short, UnsignedShort

{SQL_SMALLINT, SQL_INTEGER, SQL_REAL, SQL_DOUBLE, SQL_FLOAT, SQL_DECIMAL, SQL_NUMERIC}

String

If 0 < length <= 255,{SQL_VARCHAR, SQL_CHAR, SQL_LONGVARCHAR}; otherwise, {SQL_LONGVARCHAR, SQL_VARCHAR, SQL_CHAR} using the storageLength of the RWDBColumn, if applicable.

WString
UString

If 0 < length <= 254, {SQL_WVARCHAR, SQL_WCHAR, SQL_WLONGVARCHAR} using the storageLength of the RWDBColumn if applicable; otherwise, {SQL_WLONGVARCHAR,SQL_WVARCHAR, SQL_WCHAR} using the storageLength of the RWDBColumn if applicable.

In this section: