On Wed, 09 Nov 2011 19:41:33 +0000, "Martin J. Evans"
<martin.ev...@easysoft.com> wrote:

> Your going to have a lot of problems with this test code and DBD::Unify 
> as we previously discovered that DBD::Unify does not decode the data 
> coming back from the database itself but it can be decoded by any Perl 
> script using DBD::Unify into the correct data. Any chance you could 
> change the test code to print out the results of type_info_all for 
> DBD::Unify and send me them?

Right, I have this:
--8<---
$type_info_all = [
    {   TYPE_NAME          =>  0,
        DATA_TYPE          =>  1,
        COLUMN_SIZE        =>  2,
        LITERAL_PREFIX     =>  3,
        LITERAL_SUFFIX     =>  4,
        CREATE_PARAMS      =>  5,
        NULLABLE           =>  6,
        CASE_SENSITIVE     =>  7,
        SEARCHABLE         =>  8,
        UNSIGNED_ATTRIBUTE =>  9,
        FIXED_PREC_SCALE   => 10,
        AUTO_UNIQUE_VALUE  => 11,
        LOCAL_TYPE_NAME    => 12,
        MINIMUM_SCALE      => 13,
        MAXIMUM_SCALE      => 14,
        SQL_DATA_TYPE      => 15,
        SQL_DATETIME_SUB   => 16,
        NUM_PREC_RADIX     => 17,
        INTERVAL_PRECISION => 18,
        },

#     TYPE_NAME           DATA_TYPE        SIZE  PFX   SFX   PARAMS            
N C S UNSIG FPS   AUTO  LOCAL MINSC MAXSC SDT   SDS   RADIX PREC
    [ "UNKNOWN",          0,               undef,undef,undef,undef,            
1,0,3,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef, ],
#   [ "GIANT AMOUNT",                      
undef,undef,undef,"PRECISION,SCALE",1,0,3,0,    undef,undef,undef,2,    2,    
undef,undef,undef,undef, ],
    [ "HUGE AMOUNT",      -207,            
undef,undef,undef,"PRECISION,SCALE",1,0,3,0,    undef,undef,undef,2,    2,    
undef,undef,undef,undef, ],
    [ "AMOUNT",           -206,            
undef,undef,undef,"PRECISION,SCALE",1,0,3,0,    undef,undef,undef,2,    2,    
undef,undef,undef,undef, ],
    [ "VARBINARY",        SQL_VARBINARY,   undef,"'", ,"'",  undef,            
1,0,3,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef, ],
    [ "BINARY",           SQL_BINARY,      undef,undef,undef,undef,            
1,0,3,0,    undef,undef,undef,0,    undef,undef,undef,undef,undef, ],
    [ "CHAR",             SQL_CHAR,        undef,undef,undef,"PRECISION",      
1,0,3,0,    undef,undef,undef,0,    undef,undef,undef,undef,undef, ],
    [ "CURRENCY",         -218,            
undef,undef,undef,"PRECISION,SCALE",1,0,3,0,    2,    undef,undef,0,    8,    
undef,undef,undef,undef, ],
    [ "TIMESTAMP",        SQL_TIMESTAMP,   undef,undef,undef,undef,            
1,0,3,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef, ],
    [ "DATE",             SQL_DATE,        undef,undef,undef,undef,            
1,0,3,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef, ],
    [ "DECIMAL",          SQL_DECIMAL,     undef,undef,undef,"PRECISION",      
1,0,3,0,    undef,undef,undef,0,    undef,undef,undef,undef,undef, ],
    [ "DOUBLE PRECISION", SQL_DOUBLE,      undef,undef,undef,"PRECISION",      
1,0,3,0,    undef,undef,undef,0,    undef,undef,undef,undef,undef, ],
    [ "FLOAT",            SQL_FLOAT,       undef,undef,undef,"PRECISION",      
1,0,3,0,    undef,undef,undef,0,    undef,undef,undef,undef,undef, ],
    [ "HUGE INTEGER",     SQL_BIGINT,      undef,undef,undef,"PRECISION",      
1,0,3,0,    undef,undef,undef,0,    0,    undef,undef,undef,undef, ],
    [ "INTEGER",          SQL_INTEGER,     undef,undef,undef,"PRECISION",      
1,0,3,0,    undef,undef,undef,0,    undef,undef,undef,undef,undef, ],
    [ "NUMERIC",          SQL_NUMERIC,     undef,undef,undef,"PRECISION",      
1,0,3,0,    undef,undef,undef,0,    0,    undef,undef,undef,undef, ],
    [ "REAL",             SQL_REAL,        undef,undef,undef,"PRECISION",      
1,0,3,0,    undef,undef,undef,0,    undef,undef,undef,undef,undef, ],
    [ "SMALLINT",         SQL_SMALLINT,    undef,undef,undef,"PRECISION",      
1,0,3,0,    undef,undef,undef,0,    0,    undef,undef,undef,undef, ],
    [ "TEXT",             SQL_LONGVARCHAR, undef,"'", ,"'",  undef,            
1,0,3,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef, ],
    [ "TIME",             SQL_TIME,        undef,undef,undef,undef,            
1,0,3,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef, ],
    ];

my %odbc_types = map { ( $_->[0] => $_->[1], $_->[1] => $_->[0] ) }
    [  -5  => "BIGINT"          ], # SQL_BIGINT
    [  -3  => "VARBINARY"       ], # SQL_VARBINARY
    [  -2  => "BINARY"          ], # SQL_BINARY
    [  -1  => "TEXT"            ], # SQL_LONGVARCHAR
    [   0  => "UNKNOWN_TYPE"    ], # SQL_UNKNOWN_TYPE
    [   1  => "CHAR"            ], # SQL_CHAR
    [   2  => "NUMERIC"         ], # SQL_NUMERIC
    [   3  => "DECIMAL"         ], # SQL_DECIMAL
    [   4  => "INTEGER"         ], # SQL_INTEGER
    [   5  => "SMALLINT"        ], # SQL_SMALLINT
    [   6  => "FLOAT"           ], # SQL_FLOAT
    [   7  => "REAL"            ], # SQL_REAL
    [   8  => "DOUBLE PRECISION"], # SQL_DOUBLE
    [   9  => "DATE"            ], # SQL_DATE
    [  10  => "TIME"            ], # SQL_TIME
    [  11  => "TIMESTAMP"       ], # SQL_TIMESTAMP
    [  12  => "VARCHAR"         ], # SQL_VARCHAR
    [  16  => "BOOLEAN"         ], # SQL_BOOLEAN
    [  19  => "ROW"             ], # SQL_ROW
    [  20  => "REF"             ], # SQL_REF
    [  30  => "BLOB"            ], # SQL_BLOB
    [  40  => "CLOB"            ], # SQL_CLOB
    ;
$odbc_types{DOUBLE}  = $odbc_types{"DOUBLE PRECISION"};

my %uni_types = map { ( $_->[0] => $_->[1], $_->[1] => $_->[0] ) }
    [ -18  => "CURRENCY"        ], # SQLAMT64
    [ -17  => "HUGE INTEGER"    ], # SQLINT64
    [ -12  => "BYTE"            ], # SQLBYTE
    [ -11  => "HUGE DATE"       ], # SQLHDATE
    [ -10  => "BINARY"          ], # SQLBINARY
    [  -9  => "TEXT"            ], # SQLTEXT
    [  -7  => "TIME"            ], # SQLSMTIME
    [  -6  => "HUGE AMOUNT"     ], # SQLHUGEAMT
    [  -4  => "AMOUNT"          ], # SQLAMOUNT
    [  -3  => "DATE"            ], # SQLDATE
    [   0  => "NOTYPE"          ], # SQLNOTYPE
    [   1  => "CHAR"            ], # SQLCHAR
    [   2  => "NUMERIC"         ], # SQLNUMERIC
    [   3  => "DECIMAL"         ], # SQLDECIMAL
    [   4  => "INTEGER"         ], # SQLINTEGER
    [   5  => "SMALLINT"        ], # SQLSMINT
    [   6  => "FLOAT"           ], # SQLFLOAT
    [   7  => "REAL"            ], # SQLREAL
    [   8  => "DOUBLE PRECISION"], # SQLDBLPREC
    ;
$uni_types{CHARACTER} = $uni_types{CHAR};
$uni_types{DOUBLE}    = $uni_types{"DOUBLE PRECISION"};

sub odbc_type
{
    my $t = shift;
    defined $t or return 0;
    $t = $odbc_types{uc $t} || $t;
    return $t;
    } # uni_type

sub uni_type
{
    my $t = shift;
    defined $t or return 0;
    $t = $uni_types{uc $t} || $t;
    return $t;
    } # uni_type
-->8---

which shows I have set up the DATA_TYPE, not the SQL_DATA_TYPE
shall I just copy DATA_TYPE to SQL_DATA_TYPE?

-- 
H.Merijn Brand  http://tux.nl      Perl Monger  http://amsterdam.pm.org/
using 5.00307 through 5.14 and porting perl5.15.x on HP-UX 10.20, 11.00,
11.11, 11.23 and 11.31, OpenSuSE 10.1, 11.0 .. 11.4 and AIX 5.2 and 5.3.
http://mirrors.develooper.com/hpux/           http://www.test-smoke.org/
http://qa.perl.org      http://www.goldmark.org/jeff/stupid-disclaimers/

Reply via email to