Commit | Line | Data |
ea2e61bf |
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 | return $class->_sql_statements->{$name}->($cols, $from, $cond); |
29 | } |
30 | |
31 | sub _sql_to_sth { |
32 | my ($class, $sql) = @_; |
33 | return $class->_get_dbh->prepare($sql); |
34 | } |
35 | |
36 | sub _get_sth { |
37 | my $class = shift; |
38 | return $class->_sql_to_sth($class->_get_sql(@_)); |
39 | } |
40 | |
41 | 1; |