X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract%2FTree.pm;h=ae93c953550bf222e957f66f0c3259e231ec91cc;hb=4247c384fc4291dab9ad93625b267e862b2c9906;hp=d60e2369e1f0fabc67f81935b74d7acb14c2b0b6;hpb=08e1636016045f0f3881f5af287dcfd482845fe9;p=dbsrgits%2FSQL-Abstract.git diff --git a/lib/SQL/Abstract/Tree.pm b/lib/SQL/Abstract/Tree.pm index d60e236..ae93c95 100644 --- a/lib/SQL/Abstract/Tree.pm +++ b/lib/SQL/Abstract/Tree.pm @@ -83,7 +83,6 @@ my @expression_start_keywords = ( 'SAVEPOINT', 'RELEASE \s+ SAVEPOINT', 'RETURNING', - 'ROW_NUMBER \s* \( \s* \) \s+ OVER', ); my $expr_start_re = join ("\n\t|\n", @expression_start_keywords ); @@ -115,7 +114,9 @@ $binary_op_re = join "\n\t|\n", ; $binary_op_re = qr/$binary_op_re/x; -my $unary_op_re = '(?: NOT \s+ EXISTS | NOT )'; +my $rno_re = qr/ROW_NUMBER \s* \( \s* \) \s+ OVER/ix; + +my $unary_op_re = 'NOT \s+ EXISTS | NOT | ' . $rno_re; $unary_op_re = join "\n\t|\n", "$op_look_behind (?i: $unary_op_re ) $op_look_ahead", ; @@ -425,6 +426,10 @@ sub _recurse_parse { # unary op keywords elsif ( $token =~ $unary_op_re ) { my $op = uc $token; + + # normalize RNO explicitly + $op = 'ROW_NUMBER() OVER' if $op =~ /^$rno_re$/; + my @right = $self->_recurse_parse ($tokens, PARSE_RHS); push @left, [ $op => \@right ];