First of a two-parter :)
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / CDBICompat / ImaDBI.pm
1 package DBIx::Class::CDBICompat::ImaDBI;
2
3 use strict;
4 use warnings;
5
6 use NEXT;
7
8 sub db_Main {
9   return $_[0]->_get_dbh;
10 }
11
12 sub _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
19 sub __driver {
20   return $_[0]->_get_dbh->{Driver}->{Name};
21 }
22
23 sub 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;
32       return $class->_sql_to_sth($class->transform_sql($sql, @_));
33     };
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
44 sub 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);
50 }
51
52 1;