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' => |
8fe001e1 |
15 | sub { "SELECT ".join(', ', @{$_[COLS]})." FROM $_[FROM] WHERE $_[COND]"; }, |
ea2e61bf |
16 | 'update' => |
8fe001e1 |
17 | sub { "UPDATE $_[FROM] SET ".join(', ', map { "$_ = ?" } @{$_[COLS]}). |
ea2e61bf |
18 | " WHERE $_[COND]"; }, |
19 | 'insert' => |
8fe001e1 |
20 | sub { "INSERT INTO $_[FROM] (".join(', ', @{$_[COLS]}).") VALUES (". |
21 | join(', ', map { '?' } @{$_[COLS]}).")"; }, |
ea2e61bf |
22 | 'delete' => |
23 | sub { "DELETE FROM $_[FROM] WHERE $_[COND]"; }, |
24 | } ); |
25 | |
26 | sub _get_sql { |
27 | my ($class, $name, $cols, $from, $cond) = @_; |
8fe001e1 |
28 | my $sql = $class->_sql_statements->{$name}->($cols, $from, $cond); |
9bc6db13 |
29 | #warn $sql; |
8fe001e1 |
30 | return $sql; |
ea2e61bf |
31 | } |
32 | |
33 | sub _sql_to_sth { |
34 | my ($class, $sql) = @_; |
35 | return $class->_get_dbh->prepare($sql); |
36 | } |
37 | |
38 | sub _get_sth { |
39 | my $class = shift; |
40 | return $class->_sql_to_sth($class->_get_sql(@_)); |
41 | } |
42 | |
43 | 1; |