$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;
}
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
}
};
- 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 {
\%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 {
\%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 {
\%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 {
}
}
+sub register_op { $_[0]->{is_op}{$_[1]} = 1; $_[0] }
+
sub statement_list { sort keys %{$_[0]->{clauses_of}} }
sub clauses_of {