From c3b99d17a10f63e56bc1d48750e493dccbedff01 Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Tue, 3 Apr 2012 11:03:17 -0600 Subject: [PATCH] Add func to col ident struct to fix QueryAdvisorRules.t. --- lib/QueryAdvisorRules.pm | 2 +- lib/SQLParser.pm | 7 ++++++- t/lib/SQLParser.t | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/QueryAdvisorRules.pm b/lib/QueryAdvisorRules.pm index 40953fc6..942ff550 100644 --- a/lib/QueryAdvisorRules.pm +++ b/lib/QueryAdvisorRules.pm @@ -251,7 +251,7 @@ sub get_rules { my $cols = $event->{query_struct}->{columns}; return unless $cols; foreach my $col ( @$cols ) { - return 0 if $col->{col} eq '*'; + return 0 if $col->{col} eq '*' && !$col->{func}; } return; }, diff --git a/lib/SQLParser.pm b/lib/SQLParser.pm index e5cc826e..eb9be745 100644 --- a/lib/SQLParser.pm +++ b/lib/SQLParser.pm @@ -1299,8 +1299,9 @@ sub parse_identifier { return unless $type && $ident; PTDEBUG && _d("Parsing", $type, "identifier:", $ident); + my ($func, $expr); if ( $ident =~ m/^\w+\(/ ) { # Function like MIN(col) - my ($func, $expr) = $ident =~ m/^(\w+)\(([^\)]*)\)/; + ($func, $expr) = $ident =~ m/^(\w+)\(([^\)]*)\)/; PTDEBUG && _d('Function', $func, 'arg', $expr); return { col => $ident } unless $expr; # NOW() $ident = $expr; # col from MAX(col) @@ -1340,6 +1341,10 @@ sub parse_identifier { } } + if ( $func ) { + $ident_struct{func} = uc $func; + } + PTDEBUG && _d($type, "identifier struct:", Dumper(\%ident_struct)); return \%ident_struct; } diff --git a/t/lib/SQLParser.t b/t/lib/SQLParser.t index 8e2397f2..65ebe0cf 100644 --- a/t/lib/SQLParser.t +++ b/t/lib/SQLParser.t @@ -2065,7 +2065,7 @@ my @cases = ( from => 'l ', where => 'col<100' }, - columns => [ { col => 'max(col)' } ], + columns => [ { col => 'col', func => 'MAX' } ], context => 'scalar', from => [ { tbl => 'l' } ], nested => 1,