Databases have a poorly standardized but rich set of datatypes. Some
have natural Prolog counterparts, some not. A complete mapping requires
us to define Prolog data-types for SQL types that have no standardized
Prolog counterpart (such as timestamp), the definition of a default
mapping and the possibility to define an alternative mapping for a
specific column. For example, many variations of the SQL DECIMAL
type cannot be mapped to a Prolog integer. Nevertheless, mapping to an
integer may be the proper choice for a specific application.
The Prolog/ODBC interface defines the following Prolog result types
with the indicated default transformation. Different result-types can be
requested using the types(TypeList) option for the
odbc_query/4
and odbc_prepare/5
interfaces.
char, varchar,
longvarchar, binary, varbinary,
longvarbinary, decimal and numeric.
Can be used for all types.bit, tinyint,
smallint and integer. Please note that
SWI-Prolog integers are signed 32-bit values, where SQL allows for
unsigned values as well. Can be used for the integral, and decimal
types as well as the types date and timestamp,
which are represented as POSIX time-stamps (seconds after Jan 1, 1970).real, float
and
double. Can be used for the integral and decimal
types as well as the types date and timestamp,
which are represented as POSIX time-stamps (seconds after Jan 1, 1970).
Representing time this way is compatible to SWI-Prologs time-stamp
handling.date(Year,Month,Day) used as
default for the SQL type date.time(Hour,Minute,Second) used as
default for the SQL type time.timestamp(Year,Month,Day,Hour,Minute,Second,Fraction) used
as default for the SQL type timestamp.