After 5e0eea35 we can actually test for cleaned namespaces within CDBI
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / CDBICompat / ImaDBI.pm
CommitLineData
c0e7b4e5 1package # hide from PAUSE
2 DBIx::Class::CDBICompat::ImaDBI;
dbd7896f 3
4use strict;
5use warnings;
aea8af71 6use DBIx::ContextualFetch;
dbd7896f 7
5e0eea35 8use base 'DBIx::Class';
ef29a097 9
51ec0382 10use DBIx::Class::_Util qw(quote_sub perlstring);
11use namespace::clean;
12
902133a3 13__PACKAGE__->mk_classdata('sql_transformer_class' =>
14 'DBIx::Class::CDBICompat::SQLTransformer');
15
dbd7896f 16sub db_Main {
8b445e33 17 return $_[0]->storage->dbh;
dbd7896f 18}
19
8b445e33 20sub connection {
dbd7896f 21 my ($class, @info) = @_;
22 $info[3] = { %{ $info[3] || {}} };
23 $info[3]->{RootClass} = 'DBIx::ContextualFetch';
147dd158 24 return $class->next::method(@info);
dbd7896f 25}
26
27sub __driver {
8b445e33 28 return $_[0]->storage->dbh->{Driver}->{Name};
dbd7896f 29}
30
a3018bd3 31sub set_sql {
32 my ($class, $name, $sql) = @_;
8d73fcd4 33
34 quote_sub "${class}::sql_${name}", sprintf( <<'EOC', perlstring $sql );
35 my $class = shift;
36 return $class->storage->dbh_do(
37 _prepare_sth => $class->transform_sql(%s, @_)
38 );
39EOC
40
41
42 if ($sql =~ /select/i) { # FIXME - this should be anchore surely...?
43 quote_sub "${class}::search_${name}", sprintf( <<'EOC', "sql_$name" );
44 my ($class, @args) = @_;
45 $class->sth_to_objects( $class->%s, \@args);
46EOC
510ca912 47 }
48}
49
223b8fe3 50sub sth_to_objects {
902133a3 51 my ($class, $sth, $execute_args) = @_;
52
53 $sth->execute(@$execute_args);
54
223b8fe3 55 my @ret;
b52e9bf8 56 while (my $row = $sth->fetchrow_hashref) {
8c49f629 57 push(@ret, $class->inflate_result($class->result_source_instance, $row));
223b8fe3 58 }
902133a3 59
223b8fe3 60 return @ret;
61}
62
510ca912 63sub transform_sql {
64 my ($class, $sql, @args) = @_;
d4daee7b 65
902133a3 66 my $tclass = $class->sql_transformer_class;
67 $class->ensure_class_loaded($tclass);
68 my $t = $tclass->new($class, $sql, @args);
69
70 return sprintf($t->sql, $t->args);
a3018bd3 71}
72
a2800991 73package
74 DBIx::ContextualFetch::st; # HIDE FROM PAUSE THIS IS NOT OUR CLASS
aea8af71 75
76no warnings 'redefine';
77
78sub _untaint_execute {
79 my $sth = shift;
80 my $old_value = $sth->{Taint};
81 $sth->{Taint} = 0;
82 my $ret;
83 {
84 no warnings 'uninitialized';
85 $ret = $sth->SUPER::execute(@_);
86 }
87 $sth->{Taint} = $old_value;
88 return $ret;
89}
90
dbd7896f 911;