@@ -41,6 +41,7 @@ DBI->setup_driver("DBI::DBD::SqlEngine"); # only needed once but harmless to
4141
4242my %accessors = (
4343 versions => " get_driver_versions" ,
44+ new_meta => " new_sql_engine_meta" ,
4445 get_meta => " get_sql_engine_meta" ,
4546 set_meta => " set_sql_engine_meta" ,
4647 clear_meta => " clear_sql_engine_meta" ,
@@ -392,6 +393,7 @@ sub init_valid_attributes
392393 sql_init_phase => 1, # Only during initialization
393394 sql_meta => 1, # meta data for tables
394395 sql_meta_map => 1, # mapping table for identifier case
396+ sql_data_source => 1, # reasonable datasource class
395397 };
396398 $dbh -> {sql_readonly_attrs } = {
397399 sql_engine_version => 1, # DBI::DBD::SqlEngine version
@@ -771,7 +773,7 @@ sub get_sql_engine_meta
771773 and $table = [ grep { $_ =~ $table } keys %{ $dbh -> {sql_meta } } ];
772774
773775 ref $table || ref $attr
774- or return & $gstm ( $dbh , $table , $attr );
776+ or return $gstm -> ( $dbh , $table , $attr );
775777
776778 ref $table or $table = [$table ];
777779 ref $attr or $attr = [$attr ];
@@ -789,14 +791,37 @@ sub get_sql_engine_meta
789791 my %tattrs ;
790792 foreach my $aname ( @{$attr } )
791793 {
792- $tattrs {$aname } = & $gstm ( $dbh , $tname , $aname );
794+ $tattrs {$aname } = $gstm -> ( $dbh , $tname , $aname );
793795 }
794796 $results {$tname } = \%tattrs ;
795797 }
796798
797799 return \%results ;
798800} # get_sql_engine_meta
799801
802+ sub new_sql_engine_meta
803+ {
804+ my ( $dbh , $table , $values ) = @_ ;
805+ my $respect_case = 0;
806+
807+ " HASH" eq ref $values
808+ or croak " Invalid argument for \$ values - SCALAR or HASH expected but got " . ref $values ;
809+
810+ $table =~ s / ^\" // and $respect_case = 1; # handle quoted identifiers
811+ $table =~ s /\" $// ;
812+
813+ unless ($respect_case )
814+ {
815+ defined $dbh -> {sql_meta_map }{$table } and $table = $dbh -> {sql_meta_map }{$table };
816+ }
817+
818+ $dbh -> {sql_meta }{$table } = { %{$values } };
819+ ( my $class = $dbh -> {ImplementorClass } ) =~ s / ::db$/ ::Table/ ;
820+ # XXX we should never hit DBD::File::Table::get_table_meta here ...
821+ my ( undef , $meta ) = $class -> get_table_meta( $dbh , $table , $respect_case );
822+ 1;
823+ } # new_sql_engine_meta
824+
800825sub set_single_table_meta
801826{
802827 my ( $dbh , $table , $attr , $value ) = @_ ;
@@ -806,7 +831,7 @@ sub set_single_table_meta
806831 and return $dbh -> STORE( $attr , $value );
807832
808833 ( my $class = $dbh -> {ImplementorClass } ) =~ s / ::db$/ ::Table/ ;
809- ( undef , $meta ) = $class -> get_table_meta( $dbh , $table , 1 );
834+ ( undef , $meta ) = $class -> get_table_meta( $dbh , $table , 1 ); # 1 means: respect case
810835 $meta or croak " No such table '$table '" ;
811836 $class -> set_table_meta_attr( $meta , $attr , $value );
812837
@@ -827,7 +852,7 @@ sub set_sql_engine_meta
827852 and $table = [ grep { $_ =~ $table } keys %{ $dbh -> {sql_meta } } ];
828853
829854 ref $table || ref $attr
830- or return & $sstm ( $dbh , $table , $attr , $value );
855+ or return $sstm -> ( $dbh , $table , $attr , $value );
831856
832857 ref $table or $table = [$table ];
833858 ref $attr or $attr = { $attr => $value };
@@ -839,10 +864,9 @@ sub set_sql_engine_meta
839864
840865 foreach my $tname ( @{$table } )
841866 {
842- my %tattrs ;
843867 while ( my ( $aname , $aval ) = each %$attr )
844868 {
845- & $sstm ( $dbh , $tname , $aname , $aval );
869+ $sstm -> ( $dbh , $tname , $aname , $aval );
846870 }
847871 }
848872
@@ -1625,6 +1649,14 @@ sub new
16251649 return $className -> SUPER::new($tbl );
16261650} # new
16271651
1652+ sub DESTROY
1653+ {
1654+ my $self = shift ;
1655+ my $meta = $self -> {meta };
1656+ $self -> {row } and undef $self -> {row };
1657+ ()
1658+ }
1659+
162816601;
16291661
16301662=pod
0 commit comments