@@ -321,20 +321,50 @@ sub FETCH
321
321
322
322
# fill overall_defs unless we know
323
323
unless (exists $sth -> {f_overall_defs } && ref $sth -> {f_overall_defs }) {
324
+ my $types = $sth -> {Database }{Types };
325
+ unless ($types ) { # Feth types only once per database
326
+ if (my $t = $sth -> {Database }-> type_info_all ()) {
327
+ foreach my $i (1 .. $# $t ) {
328
+ $types -> {uc $t -> [$i ][0]} = $t -> [$i ][1];
329
+ $types -> {$t -> [$i ][1]} ||= uc $t -> [$i ][0];
330
+ }
331
+ }
332
+ # sane defaults
333
+ for ([ 0, " " ],
334
+ [ 1, " CHAR" ],
335
+ [ 4, " INTEGER" ],
336
+ [ 12, " VARCHAR" ],
337
+ ) {
338
+ $types -> {$_ -> [0]} ||= $_ -> [1];
339
+ $types -> {$_ -> [1]} ||= $_ -> [0];
340
+ }
341
+ $sth -> {Database }{Types } = $types ;
342
+ }
324
343
my $all_meta =
325
344
$sth -> {Database }-> func (" *" , " table_defs" , " get_sql_engine_meta" );
326
345
while (my ($tbl , $meta ) = each %$all_meta ) {
327
346
exists $meta -> {table_defs } && ref $meta -> {table_defs } or next ;
328
347
foreach (keys %{$meta -> {table_defs }{columns }}) {
329
- $sth -> {f_overall_defs }{$_ } = $meta -> {table_defs }{columns }{$_ };
348
+ my $field_info = $meta -> {table_defs }{columns }{$_ };
349
+ if (defined $field_info -> {data_type } &&
350
+ $field_info -> {data_type } !~ m / ^[0-9] +$ / ) {
351
+ $field_info -> {type_name } = uc $field_info -> {data_type };
352
+ $field_info -> {data_type } = $types -> {$field_info -> {type_name }} || 0;
353
+ }
354
+ $field_info -> {type_name } ||= $types -> {$field_info -> {data_type }} || " CHAR" ;
355
+ $sth -> {f_overall_defs }{$_ } = $field_info ;
330
356
}
331
357
}
332
358
}
333
359
334
360
my @colnames = $sth -> sql_get_colnames ();
335
361
336
362
$attr eq " TYPE" and
337
- return [ map { $sth -> {f_overall_defs }{$_ }{data_type } || " CHAR" }
363
+ return [ map { $sth -> {f_overall_defs }{$_ }{data_type } || 12 }
364
+ @colnames ];
365
+
366
+ $attr eq " TYPE_NAME" and
367
+ return [ map { $sth -> {f_overall_defs }{$_ }{type_name } || " VARCHAR" }
338
368
@colnames ];
339
369
340
370
$attr eq " PRECISION" and
0 commit comments