On Thu, Feb 21, 2002 at 12:14:31PM +0100, Steffen Goeldner wrote:
> Since DBI supports the SQL/CLI LOB datatypes
> 
>  - SQL_CLOB and
>  - SQL_BLOB
> 
> and DBI supports the temporal datatype
> 
>  - SQL_TYPE_TIMESTAMP
> 
> and DBD::Oracle has ora_server_version(), we could provide a more
> specific type_info_all() (see attached patch).
> 
> Should type_info_all() depend on ora_server_version(),
> DBD::Oracle::ORA_OCI() or both?

Both I think, since you need both to be >=8 to be able to use the
types in typical situations.

And if you want to go the 'whole hog' you could add in Oracle 9's new
types (says he with a hopeful grin :-)

Tim.

> Steffen
> *** DBD-Oracle-1.12a/Oracle.pm        Sat Feb 16 20:00:39 2002
> --- Oracle.pm Wed Feb 20 21:06:33 2002
> ***************
> *** 658,677 ****
>           SQL_DATETIME_SUB    =>16,
>           NUM_PREC_RADIX      =>17,
>       };
> -     # Based on the values from Oracle 8.0.4 ODBC driver
> -     my $varchar2_maxlen = (DBD::Oracle::ORA_OCI()>=8) ? 4000 : 2000;
>       my $ti = [
>         $names,
>             [ 'LONG RAW', -4, '2147483647', '\'', '\'', undef, 1, '0', '0',
>               undef, '0', undef, undef, undef, undef, -4, undef, undef
>             ],
> !           [ 'RAW', -3, 255, '\'', '\'', 'max length', 1, '0', 3,
>               undef, '0', undef, undef, undef, undef, -3, undef, undef
>             ],
>             [ 'LONG', -1, '2147483647', '\'', '\'', undef, 1, 1, '0',
>               undef, '0', undef, undef, undef, undef, -1, undef, undef
>             ],
> !           [ 'CHAR', 1, 255, '\'', '\'', 'max length', 1, 1, 3,
>               undef, '0', '0', undef, undef, undef, 1, undef, undef
>             ],
>             [ 'NUMBER', 3, 38, undef, undef, 'precision,scale', 1, '0', 3,
> --- 658,675 ----
>           SQL_DATETIME_SUB    =>16,
>           NUM_PREC_RADIX      =>17,
>       };
>       my $ti = [
>         $names,
>             [ 'LONG RAW', -4, '2147483647', '\'', '\'', undef, 1, '0', '0',
>               undef, '0', undef, undef, undef, undef, -4, undef, undef
>             ],
> !           [ 'RAW', -3, 2000, '\'', '\'', 'max length', 1, '0', 3,
>               undef, '0', undef, undef, undef, undef, -3, undef, undef
>             ],
>             [ 'LONG', -1, '2147483647', '\'', '\'', undef, 1, 1, '0',
>               undef, '0', undef, undef, undef, undef, -1, undef, undef
>             ],
> !           [ 'CHAR', 1, 2000, '\'', '\'', 'max length', 1, 1, 3,
>               undef, '0', '0', undef, undef, undef, 1, undef, undef
>             ],
>             [ 'NUMBER', 3, 38, undef, undef, 'precision,scale', 1, '0', 3,
> ***************
> *** 679,692 ****
>             ],
>             [ 'DOUBLE', 8, 15, undef, undef, undef, 1, '0', 3,
>               '0', '0', '0', undef, undef, undef, 8, undef, 10
> -           ],
> -           [ 'DATE', 9, 19, '\'', '\'', undef, 1, '0', 3,
> -             undef, '0', '0', undef, '0', '0', 11, undef, undef
> -           ],
> -           [ 'VARCHAR2', 12, $varchar2_maxlen, '\'', '\'', 'max length', 1, 1, 3,
> -             undef, '0', '0', undef, undef, undef, 12, undef, undef
>             ]
>           ];
>       return $ti;
>       }
>   
> --- 677,706 ----
>             ],
>             [ 'DOUBLE', 8, 15, undef, undef, undef, 1, '0', 3,
>               '0', '0', '0', undef, undef, undef, 8, undef, 10
>             ]
>           ];
> +     if ( ora_server_version($dbh)->[0] < 8 ) {
> +         push @$ti,
> +         [ 'VARCHAR2', 12, 2000, '\'', '\'', 'max length', 1, 1, 3,
> +           undef, '0', '0', undef, undef, undef, 12, undef, undef
> +         ];
> +     }
> +     else {
> +         push @$ti,
> +         [ 'VARCHAR2', 12, 4000, '\'', '\'', 'max length', 1, 1, 3,
> +           undef, '0', '0', undef, undef, undef, 12, undef, undef
> +         ],
> +         [ 'BLOB', 30, 2147483647, '\'', '\'', undef, 1, 1, 0,
> +           undef, 0, undef, undef, undef, undef, 30, undef, undef
> +         ],
> +         [ 'CLOB', 40, 2147483647, '\'', '\'', undef, 1, 1, 0,
> +           undef, 0, undef, undef, undef, undef, 40, undef, undef
> +         ];
> +     }
> +     push @$ti,
> +     [ 'DATE', 93, 19, '\'', '\'', undef, 1, 0, 3,
> +       undef, 0, 0, undef, 0, 0, 9, 3, undef
> +     ];
>       return $ti;
>       }
>   

Reply via email to