# parsesql

Dark Mode

- Manual
- Standard library
- Index
- devel, stable

Search:
Group by:

The `parsesql` module implements a high performance SQL file parser. It parses PostgreSQL syntax and the SQL ANSI standard.

Unstable API.

# Imports

strutils, lexbase, streams

# 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