X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F11parser.t;h=f02a8680f248a9205530e020a1c00e030ec56bad;hb=30e28763210ceaba353331164ccc685a9d000ce6;hp=8e1ee05df8d89797940073de5d2b9b578f0528e9;hpb=6f30911f8a77b8f2b466f9ecaa9d6d5c2b788c3a;p=dbsrgits%2FSQL-Abstract.git diff --git a/t/11parser.t b/t/11parser.t index 8e1ee05..f02a868 100644 --- a/t/11parser.t +++ b/t/11parser.t @@ -533,6 +533,122 @@ is_deeply($sqlat->parse( "SELECT [screen].[id], [screen].[name], [screen].[secti ] ], 'real life statement 1 parsed correctly'); +is_deeply($sqlat->parse("CASE WHEN FOO() > BAR()"), [ + [ + "-MISC", + [ + [ + "-LITERAL", + [ + "CASE" + ] + ], + [ + "-LITERAL", + [ + "WHEN" + ] + ] + ] + ], + [ + ">", + [ + [ + "FOO", + [ + [ + "-PAREN", + [] + ] + ] + ], + [ + "BAR", + [ + [ + "-PAREN", + [] + ] + ] + ] + ] + ] +]); + +is_deeply($sqlat->parse("SELECT [me].[id], ROW_NUMBER ( ) OVER (ORDER BY (SELECT 1)) AS [rno__row__index] FROM bar"), [ + [ + "SELECT", + [ + [ + "-LIST", + [ + [ + "-LITERAL", + [ + "[me].[id]" + ] + ], + [ + "AS", + [ + [ + "ROW_NUMBER() OVER", + [ + [ + "-PAREN", + [ + [ + "ORDER BY", + [ + [ + "-PAREN", + [ + [ + "SELECT", + [ + [ + "-LITERAL", + [ + 1 + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ] + ], + [ + "-LITERAL", + [ + "[rno__row__index]" + ] + ] + ] + ] + ] + ] + ] + ], + [ + "FROM", + [ + [ + "-LITERAL", + [ + "bar" + ] + ] + ] + ] +]); + + is_deeply($sqlat->parse("SELECT x, y FROM foo WHERE x IN (?, ?, ?, ?)"), [ [ "SELECT", @@ -619,7 +735,7 @@ is_deeply($sqlat->parse("SELECT x, y FROM foo WHERE x IN (?, ?, ?, ?)"), [ ] ], 'Lists parsed correctly'); -is_deeply($sqlat->parse('SELECT foo FROM bar ORDER BY x + ? DESC, oomph, y - ? DESC, unf, baz.g / ? ASC, buzz * 0 DESC, foo DESC, ickk ASC'), [ +is_deeply($sqlat->parse('SELECT foo FROM bar ORDER BY x + ? DESC, oomph, y - ? DESC, unf, baz.g / ? ASC, buzz * 0 DESC, foo LIKE ? DESC, ickk ASC'), [ [ "SELECT", [ @@ -665,15 +781,15 @@ is_deeply($sqlat->parse('SELECT foo FROM bar ORDER BY x + ? DESC, oomph, y - ? D [ "+" ] + ], + [ + "-PLACEHOLDER", + [ + "?" + ] ] ] ], - [ - "-PLACEHOLDER", - [ - "?" - ] - ] ] ], [ @@ -699,15 +815,15 @@ is_deeply($sqlat->parse('SELECT foo FROM bar ORDER BY x + ? DESC, oomph, y - ? D [ "-" ] - ] + ], + [ + "-PLACEHOLDER", + [ + "?" + ] + ], ] ], - [ - "-PLACEHOLDER", - [ - "?" - ] - ] ] ], [ @@ -733,15 +849,15 @@ is_deeply($sqlat->parse('SELECT foo FROM bar ORDER BY x + ? DESC, oomph, y - ? D [ "/" ] - ] + ], + [ + "-PLACEHOLDER", + [ + "?" + ] + ], ] ], - [ - "-PLACEHOLDER", - [ - "?" - ] - ] ] ], [ @@ -776,11 +892,22 @@ is_deeply($sqlat->parse('SELECT foo FROM bar ORDER BY x + ? DESC, oomph, y - ? D "-DESC", [ [ - "-LITERAL", + "LIKE", [ - "foo" - ] - ] + [ + "-LITERAL", + [ + "foo" + ] + ], + [ + "-PLACEHOLDER", + [ + "?" + ] + ], + ], + ], ] ], [ @@ -800,7 +927,7 @@ is_deeply($sqlat->parse('SELECT foo FROM bar ORDER BY x + ? DESC, oomph, y - ? D ] ], 'Crazy ORDER BY parsed correctly'); -is_deeply( $sqlat->parse("META SELECT * * FROM (SELECT *, FROM foobar baz buzz) foo bar WHERE NOT NOT NOT EXISTS (SELECT 'cr,ap') AND foo.a = ? STUFF and not (foo.b LIKE 'station') and x = y and a = b and GROUP BY , ORDER BY x x1 x2 y asc, max(y) desc x z desc"), [ +is_deeply( $sqlat->parse("META SELECT * * FROM (SELECT *, FROM foobar baz buzz) foo bar WHERE NOT NOT NOT EXISTS (SELECT 'cr,ap') AND foo.a = ? STUFF moar(stuff) and not (foo.b LIKE 'station') and x = y and z in ((1, 2)) and a = b and GROUP BY , ORDER BY x x1 x2 y asc, max(y) desc x z desc"), [ [ "-LITERAL", [ @@ -948,30 +1075,46 @@ is_deeply( $sqlat->parse("META SELECT * * FROM (SELECT *, FROM foobar baz buzz) ] ], [ - "=", + "-MISC", [ [ - "-LITERAL", - [ - "foo.a" - ] - ], - [ - "-MISC", + "=", [ [ + "-LITERAL", + [ + "foo.a" + ] + ], + [ "-PLACEHOLDER", [ "?" ] ], + ], + ], + [ + "-LITERAL", + [ + "STUFF" + ] + ], + ], + ], + [ + 'moar', + [ + [ + '-PAREN', + [ [ - "-LITERAL", + '-LITERAL', [ - "STUFF" + 'stuff' ] - ] - ], + ] + ] ] ] ], @@ -1020,6 +1163,44 @@ is_deeply( $sqlat->parse("META SELECT * * FROM (SELECT *, FROM foobar baz buzz) ] ], [ + 'IN', + [ + [ + '-LITERAL', + [ + 'z', + ], + ], + [ + '-PAREN', + [ + [ + '-PAREN', + [ + [ + '-LIST', + [ + [ + '-LITERAL', + [ + '1' + ] + ], + [ + '-LITERAL', + [ + '2' + ] + ], + ], + ], + ], + ], + ], + ], + ], + ], + [ "=", [ [ @@ -1093,19 +1274,16 @@ is_deeply( $sqlat->parse("META SELECT * * FROM (SELECT *, FROM foobar baz buzz) ], ], [ - "max", - [ - [ "-DESC", [ [ "-MISC", [ [ - "-MISC", + "-DESC", [ [ - "-DESC", + "max", [ [ "-PAREN", @@ -1118,22 +1296,20 @@ is_deeply( $sqlat->parse("META SELECT * * FROM (SELECT *, FROM foobar baz buzz) ] ] ] - ] - ], - [ - "-LITERAL", - [ - "x" - ] - ], + ], + ] ] ], [ "-LITERAL", [ - "z" + "x" ] - ] + ], + [ + "-LITERAL", + [ + "z" ] ] ]