Skip to content
Prev Previous commit
Next Next commit
support SET ROLE/SESSION/TIMEZONE statement in presto
  • Loading branch information
nooberfsh committed Jan 19, 2022
commit 9d8ac5dc1ead5a3ddce82508ad487c30e21a1063
10 changes: 10 additions & 0 deletions dialects/presto/src/Database/Sql/Presto/Parser.hs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ statementParser = do
, PrestoUnhandledStatement <$> showP
, PrestoUnhandledStatement <$> callP
, PrestoUnhandledStatement <$> describeP
, PrestoUnhandledStatement <$> setP
]
case maybeStmt of
Just stmt -> terminator >> return stmt
Expand Down Expand Up @@ -1558,3 +1559,12 @@ describeP = do
s <- Tok.describeP
e <- P.many1 Tok.notSemicolonP
return $ s <> last e

setP :: Parser Range
setP = do
s <- Tok.setP
_ <- choice [Tok.roleP, Tok.sessionP, Tok.timezoneP]
ts <- P.many Tok.notSemicolonP
pure $ case reverse ts of
[] -> s
e:_ -> s <> e
9 changes: 9 additions & 0 deletions dialects/presto/src/Database/Sql/Presto/Parser/Token.hs
Original file line number Diff line number Diff line change
Expand Up @@ -635,3 +635,12 @@ whereP = keywordP "where"

withP :: Parser Range
withP = keywordP "with"

setP :: Parser Range
setP = keywordP "set"

roleP :: Parser Range
roleP = keywordP "role"

sessionP :: Parser Range
sessionP = keywordP "session"
11 changes: 11 additions & 0 deletions test/Database/Sql/Presto/Parser/Test.hs
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,17 @@ testParser = test
, "SELECT a,b FROM (foo CROSS JOIN bar);"
, "SELECT a,b FROM (foo CROSS JOIN bar) a;"
, "SELECT a,b FROM (foo CROSS JOIN bar) a (a,b);"

-- test set statement
, "SET ROLE NONE;"
, "SET SESSION optimize_hash_generation = true;"
, "SET SESSION data.optimize_locality_enabled = false;"
, "SET TIME ZONE LOCAL;"
, "SET TIME ZONE '-08:00';"
, "SET TIME ZONE INTERVAL '10' HOUR;"
, "SET TIME ZONE INTERVAL -'08:00' HOUR TO MINUTE;"
, "SET TIME ZONE 'America/Los_Angeles';"
, "SET TIME ZONE concat_ws('/', 'America', 'Los_Angeles');"
]

, "Exclude some broken examples" ~: map (TestCase . parsesUnsuccessfully)
Expand Down