@@ -41,6 +41,7 @@ DBI->setup_driver("DBI::DBD::SqlEngine"); # only needed once but harmless to
41
41
42
42
my %accessors = (
43
43
versions => " get_driver_versions" ,
44
+ new_meta => " new_sql_engine_meta" ,
44
45
get_meta => " get_sql_engine_meta" ,
45
46
set_meta => " set_sql_engine_meta" ,
46
47
clear_meta => " clear_sql_engine_meta" ,
@@ -392,6 +393,7 @@ sub init_valid_attributes
392
393
sql_init_phase => 1, # Only during initialization
393
394
sql_meta => 1, # meta data for tables
394
395
sql_meta_map => 1, # mapping table for identifier case
396
+ sql_data_source => 1, # reasonable datasource class
395
397
};
396
398
$dbh -> {sql_readonly_attrs } = {
397
399
sql_engine_version => 1, # DBI::DBD::SqlEngine version
@@ -771,7 +773,7 @@ sub get_sql_engine_meta
771
773
and $table = [ grep { $_ =~ $table } keys %{ $dbh -> {sql_meta } } ];
772
774
773
775
ref $table || ref $attr
774
- or return & $gstm ( $dbh , $table , $attr );
776
+ or return $gstm -> ( $dbh , $table , $attr );
775
777
776
778
ref $table or $table = [$table ];
777
779
ref $attr or $attr = [$attr ];
@@ -789,14 +791,37 @@ sub get_sql_engine_meta
789
791
my %tattrs ;
790
792
foreach my $aname ( @{$attr } )
791
793
{
792
- $tattrs {$aname } = & $gstm ( $dbh , $tname , $aname );
794
+ $tattrs {$aname } = $gstm -> ( $dbh , $tname , $aname );
793
795
}
794
796
$results {$tname } = \%tattrs ;
795
797
}
796
798
797
799
return \%results ;
798
800
} # get_sql_engine_meta
799
801
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
+
800
825
sub set_single_table_meta
801
826
{
802
827
my ( $dbh , $table , $attr , $value ) = @_ ;
@@ -806,7 +831,7 @@ sub set_single_table_meta
806
831
and return $dbh -> STORE( $attr , $value );
807
832
808
833
( 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
810
835
$meta or croak " No such table '$table '" ;
811
836
$class -> set_table_meta_attr( $meta , $attr , $value );
812
837
@@ -827,7 +852,7 @@ sub set_sql_engine_meta
827
852
and $table = [ grep { $_ =~ $table } keys %{ $dbh -> {sql_meta } } ];
828
853
829
854
ref $table || ref $attr
830
- or return & $sstm ( $dbh , $table , $attr , $value );
855
+ or return $sstm -> ( $dbh , $table , $attr , $value );
831
856
832
857
ref $table or $table = [$table ];
833
858
ref $attr or $attr = { $attr => $value };
@@ -839,10 +864,9 @@ sub set_sql_engine_meta
839
864
840
865
foreach my $tname ( @{$table } )
841
866
{
842
- my %tattrs ;
843
867
while ( my ( $aname , $aval ) = each %$attr )
844
868
{
845
- & $sstm ( $dbh , $tname , $aname , $aval );
869
+ $sstm -> ( $dbh , $tname , $aname , $aval );
846
870
}
847
871
}
848
872
@@ -1625,6 +1649,14 @@ sub new
1625
1649
return $className -> SUPER::new($tbl );
1626
1650
} # new
1627
1651
1652
+ sub DESTROY
1653
+ {
1654
+ my $self = shift ;
1655
+ my $meta = $self -> {meta };
1656
+ $self -> {row } and undef $self -> {row };
1657
+ ()
1658
+ }
1659
+
1628
1660
1;
1629
1661
1630
1662
=pod
0 commit comments