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
- the parser object.
SqlNode = ref SqlNodeObj
- an SQL abstract syntax tree node
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, nkJoin, nkNaturalJoin, nkUsing, nkGroup, nkLimit, nkOffset, nkHaving, nkOrder, nkDesc, nkUnion, nkIntersect, nkExcept, nkColumnList, nkValueList, nkWhere, nkCreateTable, nkCreateTableIfNotExists, nkCreateType, nkCreateTypeIfNotExists, nkCreateIndex, nkCreateIndexIfNotExists, nkEnumDef
- kind of SQL abstract syntax tree
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
SqlParseError = object of ValueError
- Invalid SQL encountered
Procs
proc newNode(k: SqlNodeKind): SqlNode {....raises: [], tags: [], forbids: [].}
proc newNode(k: SqlNodeKind; s: string): SqlNode {....raises: [], tags: [], forbids: [].}
proc newNode(k: SqlNodeKind; sons: seq[SqlNode]): SqlNode {....raises: [], tags: [], forbids: [].}
proc parseSql(input: Stream; filename: string; considerTypeParams = false): SqlNode {....raises: [ IOError, OSError, IOError, OSError, ValueError, SqlParseError, Exception], tags: [ReadIOEffect, RootEffect, WriteIOEffect], forbids: [].}
- 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.
proc parseSql(input: string; filename = ""; considerTypeParams = false): SqlNode {. ...raises: [IOError, OSError, ValueError, SqlParseError, Exception], tags: [ReadIOEffect, RootEffect, WriteIOEffect], forbids: [].}
- 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.