X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract%2FClauses.pm;h=aae578253c87593d73f9e236c3e610b939e4028d;hb=2425a88f522db429f397f6a968aec8f87e421fa6;hp=78ec3005802e1891a2514263200c434fa29a4951;hpb=91c490fabb738b3fae25349c2271f3dd362c14b0;p=scpubgit%2FQ-Branch.git diff --git a/lib/SQL/Abstract/Clauses.pm b/lib/SQL/Abstract/Clauses.pm index 78ec300..aae5782 100644 --- a/lib/SQL/Abstract/Clauses.pm +++ b/lib/SQL/Abstract/Clauses.pm @@ -63,6 +63,21 @@ sub register_defaults { $self->{expand}{exists} = sub { $_[0]->_expand_op(undef, [ exists => $_[2] ]); }; + + # check for overriden methods + if ($self->can('_table') ne SQL::Abstract->can('_table')) { + $self->{expand_clause}{'select.from'} = sub { + return +{ -literal => [ $_[0]->_table($_[2]) ] }; + }; + } + if ($self->can('_order_by') ne SQL::Abstract->can('_order_by')) { + $self->{expand_clause}{'select.order_by'} = sub { + my ($osql, @obind) = $_[0]->_order_by($_[2]); + $osql =~ s/^order by //i; + return undef unless length($osql); + return +{ -literal => [ $osql, @obind ] }; + }; + } return $self; } @@ -205,14 +220,13 @@ sub render_aqt { sub render_statement { my ($self, $expr, $default_scalar_to) = @_; - $self->render_aqt( + @{$self->render_aqt( $self->expand_expr($expr, $default_scalar_to), 1 - ); + )}; } sub select { my ($self, @args) = @_; - my $stmt = do { if (ref(my $sel = $args[0]) eq 'HASH') { $sel @@ -229,8 +243,8 @@ sub select { } }; - my $rendered = $self->render_statement({ -select => $stmt }); - return wantarray ? @$rendered : $rendered->[0]; + my @rendered = $self->render_statement({ -select => $stmt }); + return wantarray ? @rendered : $rendered[0]; } sub update { @@ -248,8 +262,8 @@ sub update { \%clauses; } }; - my $rendered = $self->render_statement({ -update => $stmt }); - return wantarray ? @$rendered : $rendered->[0]; + my @rendered = $self->render_statement({ -update => $stmt }); + return wantarray ? @rendered : $rendered[0]; } sub delete { @@ -263,8 +277,8 @@ sub delete { \%clauses; } }; - my $rendered = $self->render_statement({ -delete => $stmt }); - return wantarray ? @$rendered : $rendered->[0]; + my @rendered = $self->render_statement({ -delete => $stmt }); + return wantarray ? @rendered : $rendered[0]; } sub insert { @@ -278,8 +292,8 @@ sub insert { \%clauses; } }; - my $rendered = $self->render_statement({ -insert => $stmt }); - return wantarray ? @$rendered : $rendered->[0]; + my @rendered = $self->render_statement({ -insert => $stmt }); + return wantarray ? @rendered : $rendered[0]; } sub _expand_insert_clause_target { @@ -380,6 +394,8 @@ BEGIN { } } +sub register_op { $_[0]->{is_op}{$_[1]} = 1; $_[0] } + sub statement_list { sort keys %{$_[0]->{clauses_of}} } sub clauses_of {