First of a two-parter :)
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / CDBICompat / ImaDBI.pm
CommitLineData
dbd7896f 1package DBIx::Class::CDBICompat::ImaDBI;
2
3use strict;
4use warnings;
5
6use NEXT;
7
8sub db_Main {
9 return $_[0]->_get_dbh;
10}
11
12sub _dbi_connect {
13 my ($class, @info) = @_;
14 $info[3] = { %{ $info[3] || {}} };
15 $info[3]->{RootClass} = 'DBIx::ContextualFetch';
16 return $class->NEXT::_dbi_connect(@info);
17}
18
19sub __driver {
20 return $_[0]->_get_dbh->{Driver}->{Name};
21}
22
a3018bd3 23sub set_sql {
24 my ($class, $name, $sql) = @_;
25 my $table = $class->_table_name;
26 #$sql =~ s/__TABLE__/$table/;
27 no strict 'refs';
28 *{"${class}::sql_${name}"} =
29 sub {
30 my $sql = $sql;
31 my $class = shift;
510ca912 32 return $class->_sql_to_sth($class->transform_sql($sql, @_));
a3018bd3 33 };
510ca912 34 if ($sql =~ /select/i) {
35 my $meth = "sql_${name}";
36 *{"${class}::search_${name}"} =
37 sub {
38 my ($class, @args) = @_;
39 $class->sth_to_objects($class->$meth, \@args);
40 };
41 }
42}
43
44sub transform_sql {
45 my ($class, $sql, @args) = @_;
46 my $table = $class->_table_name;
47 $sql =~ s/__TABLE__/$table/g;
48 $sql =~ s/__ESSENTIAL__/join(' ', $class->columns('Essential'))/eg;
49 return sprintf($sql, @args);
a3018bd3 50}
51
dbd7896f 521;