Mostly refactored everything to select/update/delete off storage handle
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / SQL.pm
CommitLineData
ea2e61bf 1package DBIx::Class::SQL;
2
3use strict;
4use warnings;
5
6use base qw/Class::Data::Inheritable/;
7
8use constant COLS => 0;
9use constant FROM => 1;
10use constant COND => 2;
11
34d52be2 12=head1 NAME
13
14DBIx::Class::SQL - SQL Specific methods for DBIx::Class
15
16=head1 SYNOPSIS
17
18=head1 DESCRIPTION
19
20This class contains methods that generates SQL queries for
21the rest of the L<DBIx::Class> hiarchy. It's also responsible
22for executing these.
23
24=cut
25
ea2e61bf 26__PACKAGE__->mk_classdata('_sql_statements',
27 {
28 'select' =>
8fe001e1 29 sub { "SELECT ".join(', ', @{$_[COLS]})." FROM $_[FROM] WHERE $_[COND]"; },
ea2e61bf 30 'update' =>
8b445e33 31 sub { "UPDATE $_[FROM] SET $_[COLS] WHERE $_[COND]"; },
ea2e61bf 32 'insert' =>
8fe001e1 33 sub { "INSERT INTO $_[FROM] (".join(', ', @{$_[COLS]}).") VALUES (".
34 join(', ', map { '?' } @{$_[COLS]}).")"; },
ea2e61bf 35 'delete' =>
36 sub { "DELETE FROM $_[FROM] WHERE $_[COND]"; },
37 } );
38
8b445e33 39sub create_sql {
ea2e61bf 40 my ($class, $name, $cols, $from, $cond) = @_;
8fe001e1 41 my $sql = $class->_sql_statements->{$name}->($cols, $from, $cond);
9bc6db13 42 #warn $sql;
8fe001e1 43 return $sql;
ea2e61bf 44}
45
8b445e33 46*_get_sql = \&create_sql;
47
ea2e61bf 48sub _sql_to_sth {
49 my ($class, $sql) = @_;
95a70f01 50 return $class->_get_dbh->prepare($sql);
ea2e61bf 51}
52
53sub _get_sth {
54 my $class = shift;
55 return $class->_sql_to_sth($class->_get_sql(@_));
56}
57
581;
34d52be2 59
60=head1 AUTHORS
61
62Matt S. Trout <perl-stuff@trout.me.uk>
63
64=head1 LICENSE
65
66You may distribute this code under the same terms as Perl itself.
67
68=cut