std/parsesql: Add OFFSET keyword support. (#21255)

Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
This commit is contained in:
Phil Krylov 2023-01-18 19:11:15 +01:00 • committed by GitHub
commit f04f3e8bf7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -60,7 +60,7 @@ const
reservedKeywords = @[ reservedKeywords = @[
# statements # statements
"select", "from", "where", "group", "limit", "having", "select", "from", "where", "group", "limit", "offset", "having",
# functions # functions
"count", "count",
] ]
@ -509,6 +509,7 @@ type
nkFromItemPair, nkFromItemPair,
nkGroup, nkGroup,
nkLimit, nkLimit,
nkOffset,
nkHaving, nkHaving,
nkOrder, nkOrder,
nkJoin, nkJoin,
@ -1126,6 +1127,11 @@ proc parseSelect(p: var SqlParser): SqlNode =
var l = newNode(nkLimit) var l = newNode(nkLimit)
l.add(parseExpr(p)) l.add(parseExpr(p))
result.add(l) result.add(l)
if isKeyw(p, "offset"):
getTok(p)
var o = newNode(nkOffset)
o.add(parseExpr(p))
result.add(o)
proc parseStmt(p: var SqlParser; parent: SqlNode) = proc parseStmt(p: var SqlParser; parent: SqlNode) =
if isKeyw(p, "create"): if isKeyw(p, "create"):
@ -1388,6 +1394,9 @@ proc ra(n: SqlNode, s: var SqlWriter) =
of nkLimit: of nkLimit:
s.addKeyw("limit") s.addKeyw("limit")
s.addMulti(n) s.addMulti(n)
of nkOffset:
s.addKeyw("offset")
s.addMulti(n)
of nkHaving: of nkHaving:
s.addKeyw("having") s.addKeyw("having")
s.addMulti(n) s.addMulti(n)