my @expression_start_keywords = (
'SELECT',
'UPDATE',
+ 'SET',
'INSERT \s+ INTO',
'DELETE \s+ FROM',
'FROM',
- 'SET',
'(?:
(?:
(?: (?: LEFT | RIGHT | FULL ) \s+ )?
'ON',
'WHERE',
'(?: DEFAULT \s+ )? VALUES',
- '(?:NOT \s+)? EXISTS',
+ '(?: NOT \s+)? EXISTS',
'GROUP \s+ BY',
'HAVING',
'ORDER \s+ BY',
# * BETWEEN without paranthesis around the ANDed arguments (which
# makes it a non-binary op) is detected and accomodated in
# _recurse_parse()
+# * AS is not really an operator but is handled here as it's also LHS/RHS
# this will be included in the $binary_op_re, the distinction is interesting during
# testing as one is tighter than the other, plus mathops have different look
my $binary_op_re = '(?: NOT \s+)? (?:' . join ('|', qw/IN BETWEEN R?LIKE/) . ')';
$binary_op_re = join "\n\t|\n",
- "$op_look_behind (?i: $binary_op_re ) $op_look_ahead",
+ "$op_look_behind (?i: $binary_op_re | AS ) $op_look_ahead",
$math_re,
$op_look_behind . 'IS (?:\s+ NOT)?' . "(?= \\s+ NULL \\b | $op_look_ahead )",
;
placeholder_surround => [qw(' ')],
});
- is $sqlat->format('SELECT ? as x, ? as y FROM Foo WHERE t > ? and z IN (?, ?, ?) ', [qw/frew ribasushi 2008-12-12 1 2 3/]),
- q[SELECT 'frew' as x, 'ribasushi' as y FROM Foo WHERE t > '2008-12-12' AND z IN ( '1', '2', '3' )], 'Complex placeholders work';
+ is $sqlat->format('SELECT ? AS x, ? AS y FROM Foo WHERE t > ? and z IN (?, ?, ?) ', [qw/frew ribasushi 2008-12-12 1 2 3/]),
+ q[SELECT 'frew' AS x, 'ribasushi' AS y FROM Foo WHERE t > '2008-12-12' AND z IN ( '1', '2', '3' )], 'Complex placeholders work';
}
done_testing;