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 children
SqlParser = 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