Thomas A. Lowery wrote:
>
> Great stuff, I've applied your patch to the attached copy. I haven't had
> to much time to test.
>
> I did change the where the ado_consts, myado_types* to attributes of
> the database handler, instead of package variable. I was having some
> "score" problems.
>
> One challenge is supporting two different values for SQL_BIT. Which
> version is truly needed?
The problem moved to SQL_BIGINT :-(
The attached patch drops (most of) the datatype constants and uses
the DBI 1.21 constants.
Steffen
*** DBD-ADO-2.4.02-orig/lib/DBD\ADO.pm Thu Dec 13 01:17:30 2001
--- ADO.pm Fri Feb 08 09:29:08 2002
***************
*** 111,160 ****
use constant DBPROPVAL_TC_NONE => 0;
! use constant SQL_GUID
=> -11;
! use constant SQL_WLONGVARCHAR => -10;
! use constant SQL_WVARCHAR => -9;
! use constant SQL_WCHAR => -8;
! use constant SQL_BIT_MS => -7;
! use constant SQL_TINYINT => -6;
! use constant SQL_BIGINT => -5;
! use constant SQL_LONGVARBINARY => -4;
! use constant SQL_VARBINARY => -3;
! use constant SQL_BINARY => -2;
! use constant SQL_LONGVARCHAR => -1;
! use constant SQL_UNKNOWN_TYPE
=> 0;
!
! use constant SQL_BIT => 14;
! use constant SQL_BIT_VARYING => 15;
! use constant SQL_BOOLEAN => 16;
! use constant SQL_UDT => 17;
! use constant SQL_UDT_LOCATOR => 18;
! use constant SQL_ROW => 19;
! use constant SQL_REF => 20;
! use constant SQL_BLOB => 30;
! use constant SQL_BLOB_LOCATOR => 31;
! use constant SQL_CLOB => 40;
! use constant SQL_CLOB_LOCATOR => 41;
! use constant SQL_ARRAY => 50;
! use constant SQL_ARRAY_LOCATOR => 51;
! use constant SQL_TYPE_DATE => 91;
! use constant SQL_TYPE_TIME => 92;
! use constant SQL_TYPE_TIMESTAMP => 93;
! use constant SQL_TYPE_TIME_WITH_TIMEZONE => 94;
! use constant SQL_TYPE_TIMESTAMP_WITH_TIMEZONE => 95;
! use constant SQL_INTERVAL_YEAR => 101;
! use constant SQL_INTERVAL_MONTH => 102;
! use constant SQL_INTERVAL_DAY => 103;
! use constant SQL_INTERVAL_HOUR => 104;
! use constant SQL_INTERVAL_MINUTE => 105;
! use constant SQL_INTERVAL_SECOND => 106;
! use constant SQL_INTERVAL_YEAR_TO_MONTH => 107;
! use constant SQL_INTERVAL_DAY_TO_HOUR => 108;
! use constant SQL_INTERVAL_DAY_TO_MINUTE => 109;
! use constant SQL_INTERVAL_DAY_TO_SECOND => 110;
! use constant SQL_INTERVAL_HOUR_TO_MINUTE => 111;
! use constant SQL_INTERVAL_HOUR_TO_SECOND => 112;
! use constant SQL_INTERVAL_MINUTE_TO_SECOND => 113;
my $ado_consts = ();
my $myado_types_supported = ();
--- 111,119 ----
use constant DBPROPVAL_TC_NONE => 0;
! # additional datatypes:
! use constant ODBC_BIGINT => -5;
! use constant SQL_BIGINT => 25;
my $ado_consts = ();
my $myado_types_supported = ();
***************
*** 176,236 ****
$myado_types_supported2 = {
# AdoType IsLong IsFixed => SqlType
! $ado_consts->{adBinary } => { 0 => { 0 => SQL_VARBINARY
! , 1 => SQL_BINARY }
! , 1 => { 0 => SQL_LONGVARBINARY
! , 1 => SQL_UNKNOWN_TYPE }}
, $ado_consts->{adChar } => { 0 => { 0 => DBI::SQL_VARCHAR
, 1 => DBI::SQL_CHAR }
! , 1 => { 0 => SQL_LONGVARCHAR
! , 1 => SQL_UNKNOWN_TYPE }}
! , $ado_consts->{adWChar } => { 0 => { 0 => SQL_WVARCHAR
! , 1 => SQL_WCHAR }
! , 1 => { 0 => SQL_WLONGVARCHAR
! , 1 => SQL_UNKNOWN_TYPE }}
# , $ado_consts->{adVarBinary} =>
# , $ado_consts->{adVarChar } =>
# , $ado_consts->{adVarWChar } =>
};
$myado_types_supported = {
! $ado_consts->{adArray} =>
SQL_ARRAY
! , $ado_consts->{adBigInt} =>
SQL_BIGINT
, $ado_consts->{adBinary} =>
DBI::SQL_BINARY
! , $ado_consts->{adBoolean} =>
SQL_BOOLEAN
! , $ado_consts->{adBSTR} =>
SQL_UNKNOWN_TYPE
! , $ado_consts->{adChapter} =>
SQL_UNKNOWN_TYPE
, $ado_consts->{adChar} =>
DBI::SQL_CHAR
, $ado_consts->{adCurrency} =>
DBI::SQL_NUMERIC
! , $ado_consts->{adDate} =>
SQL_TYPE_TIMESTAMP # XXX Not really!
! , $ado_consts->{adDBDate} =>
SQL_TYPE_DATE
! , $ado_consts->{adDBTime} =>
SQL_TYPE_TIME
! , $ado_consts->{adDBTimeStamp} => SQL_TYPE_TIMESTAMP
, $ado_consts->{adDecimal} =>
DBI::SQL_DECIMAL
, $ado_consts->{adDouble} =>
DBI::SQL_DOUBLE
! , $ado_consts->{adEmpty} =>
SQL_UNKNOWN_TYPE
! , $ado_consts->{adError} =>
SQL_UNKNOWN_TYPE
, $ado_consts->{adFileTime} =>
DBI::SQL_TIMESTAMP
! , $ado_consts->{adGUID} =>
SQL_GUID
! , $ado_consts->{adIDispatch} =>
SQL_UNKNOWN_TYPE
, $ado_consts->{adInteger} =>
DBI::SQL_INTEGER
! , $ado_consts->{adIUnknown} =>
SQL_UNKNOWN_TYPE
, $ado_consts->{adLongVarBinary} => DBI::SQL_LONGVARBINARY
, $ado_consts->{adLongVarChar} => DBI::SQL_LONGVARCHAR
, $ado_consts->{adLongVarWChar} => DBI::SQL_WLONGVARCHAR
, $ado_consts->{adNumeric} =>
DBI::SQL_NUMERIC
! , $ado_consts->{adPropVariant} => SQL_UNKNOWN_TYPE
, $ado_consts->{adSingle} =>
DBI::SQL_FLOAT
, $ado_consts->{adSmallInt} =>
DBI::SQL_SMALLINT
, $ado_consts->{adTinyInt} =>
DBI::SQL_TINYINT
! , $ado_consts->{adUnsignedBigInt} => SQL_UNKNOWN_TYPE
, $ado_consts->{adUnsignedInt} => DBI::SQL_WCHAR
! , $ado_consts->{adUnsignedSmallInt} => SQL_UNKNOWN_TYPE
! , $ado_consts->{adUnsignedTinyInt} => SQL_UNKNOWN_TYPE
! , $ado_consts->{adUserDefined} => SQL_UNKNOWN_TYPE
, $ado_consts->{adVarBinary} => DBI::SQL_VARBINARY
, $ado_consts->{adVarChar} =>
DBI::SQL_VARCHAR
! , $ado_consts->{adVariant} =>
SQL_UNKNOWN_TYPE
, $ado_consts->{adVarNumeric} => DBI::SQL_INTEGER
, $ado_consts->{adVarWChar} =>
DBI::SQL_WVARCHAR
, $ado_consts->{adWChar} =>
DBI::SQL_WCHAR
--- 135,195 ----
$myado_types_supported2 = {
# AdoType IsLong IsFixed => SqlType
! $ado_consts->{adBinary } => { 0 => { 0 => DBI::SQL_VARBINARY
! , 1 => DBI::SQL_BINARY }
! , 1 => { 0 => DBI::SQL_LONGVARBINARY
! , 1 => DBI::SQL_UNKNOWN_TYPE }}
, $ado_consts->{adChar } => { 0 => { 0 => DBI::SQL_VARCHAR
, 1 => DBI::SQL_CHAR }
! , 1 => { 0 => DBI::SQL_LONGVARCHAR
! , 1 => DBI::SQL_UNKNOWN_TYPE }}
! , $ado_consts->{adWChar } => { 0 => { 0 => DBI::SQL_WVARCHAR
! , 1 => DBI::SQL_WCHAR }
! , 1 => { 0 => DBI::SQL_WLONGVARCHAR
! , 1 => DBI::SQL_UNKNOWN_TYPE }}
# , $ado_consts->{adVarBinary} =>
# , $ado_consts->{adVarChar } =>
# , $ado_consts->{adVarWChar } =>
};
$myado_types_supported = {
! $ado_consts->{adArray} =>
DBI::SQL_ARRAY
! , $ado_consts->{adBigInt} =>
ODBC_BIGINT # XXX SQL_BIGINT?
, $ado_consts->{adBinary} =>
DBI::SQL_BINARY
! , $ado_consts->{adBoolean} =>
DBI::SQL_BOOLEAN
! , $ado_consts->{adBSTR} =>
DBI::SQL_UNKNOWN_TYPE
! , $ado_consts->{adChapter} =>
DBI::SQL_UNKNOWN_TYPE
, $ado_consts->{adChar} =>
DBI::SQL_CHAR
, $ado_consts->{adCurrency} =>
DBI::SQL_NUMERIC
! , $ado_consts->{adDate} =>
DBI::SQL_TYPE_TIMESTAMP # XXX Not really!
! , $ado_consts->{adDBDate} =>
DBI::SQL_TYPE_DATE
! , $ado_consts->{adDBTime} =>
DBI::SQL_TYPE_TIME
! , $ado_consts->{adDBTimeStamp} => DBI::SQL_TYPE_TIMESTAMP
, $ado_consts->{adDecimal} =>
DBI::SQL_DECIMAL
, $ado_consts->{adDouble} =>
DBI::SQL_DOUBLE
! , $ado_consts->{adEmpty} =>
DBI::SQL_UNKNOWN_TYPE
! , $ado_consts->{adError} =>
DBI::SQL_UNKNOWN_TYPE
, $ado_consts->{adFileTime} =>
DBI::SQL_TIMESTAMP
! , $ado_consts->{adGUID} =>
DBI::SQL_GUID
! , $ado_consts->{adIDispatch} =>
DBI::SQL_UNKNOWN_TYPE
, $ado_consts->{adInteger} =>
DBI::SQL_INTEGER
! , $ado_consts->{adIUnknown} =>
DBI::SQL_UNKNOWN_TYPE
, $ado_consts->{adLongVarBinary} => DBI::SQL_LONGVARBINARY
, $ado_consts->{adLongVarChar} => DBI::SQL_LONGVARCHAR
, $ado_consts->{adLongVarWChar} => DBI::SQL_WLONGVARCHAR
, $ado_consts->{adNumeric} =>
DBI::SQL_NUMERIC
! , $ado_consts->{adPropVariant} => DBI::SQL_UNKNOWN_TYPE
, $ado_consts->{adSingle} =>
DBI::SQL_FLOAT
, $ado_consts->{adSmallInt} =>
DBI::SQL_SMALLINT
, $ado_consts->{adTinyInt} =>
DBI::SQL_TINYINT
! , $ado_consts->{adUnsignedBigInt} => DBI::SQL_UNKNOWN_TYPE
, $ado_consts->{adUnsignedInt} => DBI::SQL_WCHAR
! , $ado_consts->{adUnsignedSmallInt} => DBI::SQL_UNKNOWN_TYPE
! , $ado_consts->{adUnsignedTinyInt} => DBI::SQL_UNKNOWN_TYPE
! , $ado_consts->{adUserDefined} => DBI::SQL_UNKNOWN_TYPE
, $ado_consts->{adVarBinary} => DBI::SQL_VARBINARY
, $ado_consts->{adVarChar} =>
DBI::SQL_VARCHAR
! , $ado_consts->{adVariant} =>
DBI::SQL_UNKNOWN_TYPE
, $ado_consts->{adVarNumeric} => DBI::SQL_INTEGER
, $ado_consts->{adVarWChar} =>
DBI::SQL_WVARCHAR
, $ado_consts->{adWChar} =>
DBI::SQL_WCHAR