The parsesql module implements a high performance SQL file parser. It parses PostgreSQL syntax and the SQL ANSI standard.
SqlLexer = object of BaseLexer filename: string
SqlNodeKind = enum nkNone, nkIdent, nkStringLit, nkBitStringLit, nkHexStringLit, nkIntegerLit, nkNumericLit, nkPrimaryKey, nkForeignKey, nkNotNull, nkNull, nkStmtList, nkDot, nkDotDot, nkPrefix, nkInfix, nkCall, nkColumnReference, nkReferences, nkDefault, nkCheck, nkConstraint, nkUnique, nkIdentity, nkColumnDef, ## name, datatype, constraints nkInsert, nkUpdate, nkDelete, nkSelect, nkSelectDistinct, nkSelectColumns, nkAsgn, nkFrom, nkGroup, nkHaving, nkOrder, nkDesc, nkUnion, nkIntersect, nkExcept, nkColumnList, nkValueList, nkWhere, nkCreateTable, nkCreateTableIfNotExists, nkCreateType, nkCreateTypeIfNotExists, nkCreateIndex, nkCreateIndexIfNotExists, nkEnumDef
SqlParseError = object of ValueError
SqlNode = ref SqlNodeObj
SqlNodeObj = object
case kind*: SqlNodeKind ## kind of syntax tree
of nkIdent, nkStringLit, nkBitStringLit, nkHexStringLit, nkIntegerLit, nkNumericLit:
strVal*: string ## AST leaf: the identifier, numeric literal
## string literal, etc.
else:
sons*: seq[SqlNode] ## the node's childrenSqlParser = object of SqlLexer tok: Token
proc len(n: SqlNode): int {.raises: [], tags: [].}proc `[]`(n: SqlNode; i: int): SqlNode {.raises: [], tags: [].}proc add(father, n: SqlNode) {.raises: [], tags: [].}proc parseSQL(input: Stream; filename: string): SqlNode {.
raises: [Exception, Exception, ValueError, SqlParseError],
tags: [ReadIOEffect, RootEffect].}proc renderSQL(n: SqlNode): string {.raises: [Exception], tags: [RootEffect].}proc `$`(n: SqlNode): string {.raises: [Exception], tags: [RootEffect].}
© 2006–2017 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/parsesql.html