6bba4d9bf665b0726dcff73dbdfc532bdc2740bc
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / SQL.pm
1 package DBIx::Class::SQL;
2
3 use strict;
4 use warnings;
5
6 use base qw/Class::Data::Inheritable/;
7
8 use constant COLS => 0;
9 use constant FROM => 1;
10 use constant COND => 2;
11
12 __PACKAGE__->mk_classdata('_sql_statements',
13   {
14     'select' =>
15       sub { "SELECT ".join(', ', @{$_[COLS]})." FROM $_[FROM] WHERE $_[COND]"; },
16     'update' =>
17       sub { "UPDATE $_[FROM] SET ".join(', ', map { "$_ = ?" } @{$_[COLS]}).
18               " WHERE $_[COND]"; },
19     'insert' =>
20       sub { "INSERT INTO $_[FROM] (".join(', ', @{$_[COLS]}).") VALUES (".
21               join(', ', map { '?' } @{$_[COLS]}).")"; },
22     'delete' =>
23       sub { "DELETE FROM $_[FROM] WHERE $_[COND]"; },
24   } );
25
26 sub _get_sql {
27   my ($class, $name, $cols, $from, $cond) = @_;
28   my $sql = $class->_sql_statements->{$name}->($cols, $from, $cond);
29   #warn $sql;
30   return $sql;
31 }
32
33 sub _sql_to_sth {
34   my ($class, $sql) = @_;
35   return $class->_get_dbh->prepare_cached($sql);
36 }
37
38 sub _get_sth {
39   my $class = shift;
40   return $class->_sql_to_sth($class->_get_sql(@_));
41 }
42
43 1;