The parsesql module implements a high performance SQL file parser. It parses PostgreSQL syntax and the SQL ANSI standard.
Unstable API.
Types
SqlLexer = object of BaseLexer filename: string
- the parser object. Source Edit
SqlNodeKind = enum nkNone, nkIdent, nkQuotedIdent, nkStringLit, nkBitStringLit, nkHexStringLit, nkIntegerLit, nkNumericLit, nkPrimaryKey, nkForeignKey, nkNotNull, nkNull, nkStmtList, nkDot, nkDotDot, nkPrefix, nkInfix, nkCall, nkPrGroup, nkColumnReference, nkReferences, nkDefault, nkCheck, nkConstraint, nkUnique, nkIdentity, nkColumnDef, ## name, datatype, constraints nkInsert, nkUpdate, nkDelete, nkSelect, nkSelectDistinct, nkSelectColumns, nkSelectPair, nkAsgn, nkFrom, nkFromItemPair, nkGroup, nkLimit, nkHaving, nkOrder, nkJoin, nkDesc, nkUnion, nkIntersect, nkExcept, nkColumnList, nkValueList, nkWhere, nkCreateTable, nkCreateTableIfNotExists, nkCreateType, nkCreateTypeIfNotExists, nkCreateIndex, nkCreateIndexIfNotExists, nkEnumDef
- kind of SQL abstract syntax tree Source Edit
SqlParseError = object of ValueError
- Invalid SQL encountered Source Edit
SqlNode = ref SqlNodeObj
- an SQL abstract syntax tree node Source Edit
SqlNodeObj = object case kind*: SqlNodeKind ## kind of syntax tree of LiteralNodes: strVal*: string ## AST leaf: the identifier, numeric literal ## string literal, etc. else: sons*: seq[SqlNode] ## the node's children
- an SQL abstract syntax tree node Source Edit
SqlParser = object of SqlLexer tok: Token
- SQL parser object Source Edit
Procs
proc newNode(k: SqlNodeKind): SqlNode {...}{.raises: [], tags: [].}
- Source Edit
proc newNode(k: SqlNodeKind; s: string): SqlNode {...}{.raises: [], tags: [].}
- Source Edit
proc newNode(k: SqlNodeKind; sons: seq[SqlNode]): SqlNode {...}{.raises: [], tags: [].}
- Source Edit
proc len(n: SqlNode): int {...}{.raises: [], tags: [].}
- Source Edit
proc `[]`(n: SqlNode; i: int): SqlNode {...}{.raises: [], tags: [].}
- Source Edit
proc `[]`(n: SqlNode; i: BackwardsIndex): SqlNode {...}{.raises: [], tags: [].}
- Source Edit
proc add(father, n: SqlNode) {...}{.raises: [], tags: [].}
- Source Edit
proc renderSQL(n: SqlNode; upperCase = false): string {...}{.raises: [Exception], tags: [RootEffect].}
- Converts an SQL abstract syntax tree to its string representation. Source Edit
proc `$`(n: SqlNode): string {...}{.raises: [Exception], tags: [RootEffect].}
- an alias for renderSQL. Source Edit
proc treeRepr(s: SqlNode): string {...}{.raises: [], tags: [].}
- Source Edit
proc parseSQL(input: Stream; filename: string): SqlNode {...}{.raises: [Defect, IOError, OSError, Defect, IOError, OSError, ValueError, SqlParseError, Exception], tags: [ReadIOEffect, RootEffect, WriteIOEffect].}
- parses the SQL from input into an AST and returns the AST. filename is only used for error messages. Syntax errors raise an SqlParseError exception. Source Edit
proc parseSQL(input: string; filename = ""): SqlNode {...}{. raises: [Defect, IOError, OSError, ValueError, SqlParseError, Exception], tags: [ReadIOEffect, RootEffect, WriteIOEffect].}
- parses the SQL from input into an AST and returns the AST. filename is only used for error messages. Syntax errors raise an SqlParseError exception. Source Edit