Better handling of borked sql in tests
Peter Rabbitson [Mon, 9 Mar 2009 01:24:34 +0000 (01:24 +0000)]
lib/SQL/Abstract/Test.pm

index ed68506..edda905 100644 (file)
@@ -161,15 +161,19 @@ sub _eq_sql {
   my ($left, $right) = @_;
 
   # ignore top-level parentheses 
-  while ($left->[0] and $left->[0]  eq 'PAREN') {$left  = $left->[1] }
-  while ($right->[0] and $right->[0] eq 'PAREN') {$right = $right->[1]}
+  while ($left and $left->[0] and $left->[0]  eq 'PAREN') {$left  = $left->[1]}
+  while ($right and $right->[0] and $right->[0] eq 'PAREN') {$right = $right->[1]}
 
-  # if both are undef i.e. ()
-  if (not grep { defined $_ } ($left->[0], $right->[0]) ) {
+  # one is defined the other not
+  if ( (defined $left) xor (defined $right) ) {
+    return 0;
+  }
+  # one is undefined, then so is the other
+  elsif (not defined $left) {
     return 1;
   }
   # if operators are different
-  elsif ($left->[0] ne $right->[0]) { 
+  elsif ($left->[0] ne $right->[0]) {
     $sql_differ = sprintf "OP [$left->[0]] != [$right->[0]] in\nleft: %s\nright: %s\n",
       unparse($left),
       unparse($right);