package Data::Query::Renderer::SQL::Naive;
use strictures 1;
+
+sub intersperse { my $i = shift; my @i = map +($_, $i), @_; pop @i; @i }
+
use SQL::ReservedWords;
use Data::Query::Constants qw(
DQ_IDENTIFIER DQ_OPERATOR DQ_VALUE DQ_JOIN DQ_ALIAS DQ_ORDER DQ_LITERAL
];
}
-# I present this to permit strange people to easily supply a patch to lc()
+# I presented this to permit strange people to easily supply a patch to lc()
# their keywords, as I have heard many desire to do, lest they infect me
# with whatever malady caused this desire by their continued proximity for
# want of such a feature.
+#
+# Then I realised that SQL::Abstract compatibility work required it.
+#
+# FEH.
-sub _format_keyword { $_[1] }
+sub _format_keyword { $_[0]->{lc_keywords} ? lc($_[1]) : $_[1] }
sub _render {
$_[0]->${\"_render_${\(lc($_[1]->{type})||'broken')}"}($_[1]);
my @args = @{$dq->{args}};
if (@args == 3) {
my ($lhs, $rhs1, $rhs2) = (map $self->_render($_), @args);
- [ $lhs, $op_name, $rhs1, 'AND', $rhs2 ];
+ [ '(', $lhs, $op_name, $rhs1, 'AND', $rhs2, ')' ];
} elsif (@args == 2 and $args[1]->{type} eq DQ_LITERAL) {
my ($lhs, $rhs) = (map $self->_render($_), @args);
- [ $lhs, $op_name, $rhs ];
+ [ '(', $lhs, $op_name, $rhs, ')' ];
} else {
die "Invalid args for between: ${\scalar @args} given";
}
\@ret;
}
+sub _render_delete {
+ my ($self, $dq) = @_;
+ my ($target, $where) = @{$dq}{qw(target where)};
+ [ $self->_format_keyword('DELETE FROM'),
+ $self->_render($target),
+ ($where
+ ? ($self->_format_keyword('WHERE'), $self->_render($where))
+ : ())
+ ];
+}
+
+sub _render_update {
+ my ($self, $dq) = @_;
+ my ($target, $set, $where) = @{$dq}{qw(target set where)};
+ my @rendered_set = intersperse(
+ ',', map [ intersperse('=', map $self->_render($_), @$_) ], @{$set}
+ );
+ [ $self->_format_keyword('UPDATE'),
+ $self->_render($target),
+ $self->_format_keyword('SET'),
+ @rendered_set,
+ ($where
+ ? ($self->_format_keyword('WHERE'), $self->_render($where))
+ : ())
+ ];
+}
+
1;