parsesql
Модуль parsesql реализует высокопроизводительный парсер SQL-файлов. Он парсит синтаксис PostgreSQL и стандарт SQL ANSI.
Нестабильный API.
Импорты
- strutils, lexbase, streams
Типы
SqlLexer = object of BaseLexer filename: string
- объект парсера. Исходный код Редактировать
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
- тип абстрактного синтаксического дерева SQL Исходный код Редактировать
SqlParseError = object of ValueError
- обнаружено неверное SQL Исходный код Редактировать
SqlNode = ref SqlNodeObj
- узел абстрактного синтаксического дерева SQL Исходный код Редактировать
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- узел абстрактного синтаксического дерева SQL Исходный код Редактировать
SqlParser = object of SqlLexer tok: Token
- объект парсера SQL Исходный код Редактировать
Процедуры
proc newNode(k: SqlNodeKind): SqlNode {...}{.raises: [], tags: [].}- Исходный код Редактировать
proc newNode(k: SqlNodeKind; s: string): SqlNode {...}{.raises: [], tags: [].}- Исходный код Редактировать
proc newNode(k: SqlNodeKind; sons: seq[SqlNode]): SqlNode {...}{.raises: [], tags: [].}- Исходный код Редактировать
proc len(n: SqlNode): int {...}{.raises: [], tags: [].}- Исходный код Редактировать
proc `[]`(n: SqlNode; i: int): SqlNode {...}{.raises: [], tags: [].}- Исходный код Редактировать
proc `[]`(n: SqlNode; i: BackwardsIndex): SqlNode {...}{.raises: [], tags: [].}- Исходный код Редактировать
proc add(father, n: SqlNode) {...}{.raises: [], tags: [].}- Исходный код Редактировать
proc renderSQL(n: SqlNode; upperCase = false): string {...}{.raises: [Exception], tags: [RootEffect].}- Преобразует абстрактное синтаксическое дерево SQL в его строковое представление. Исходный код Редактировать
proc `$`(n: SqlNode): string {...}{.raises: [Exception], tags: [RootEffect].}- псевдоним для
renderSQL. Исходный код Редактировать proc treeRepr(s: SqlNode): string {...}{.raises: [], tags: [].}- Исходный код Редактировать
proc parseSQL(input: Stream; filename: string): SqlNode {...}{.raises: [IOError, OSError, IOError, OSError, ValueError, SqlParseError, Exception], tags: [ReadIOEffect, RootEffect, WriteIOEffect].}- парсит SQL из
inputв AST и возвращает AST.filenameиспользуется только для сообщений об ошибках. Синтаксические ошибки генерируют исключениеSqlParseError. Исходный код Редактировать proc parseSQL(input: string; filename = ""): SqlNode {...}{. raises: [IOError, OSError, ValueError, SqlParseError, Exception], tags: [ReadIOEffect, RootEffect, WriteIOEffect].}- парсит SQL из
inputв AST и возвращает AST.filenameиспользуется только для сообщений об ошибках. Синтаксические ошибки генерируют исключениеSqlParseError. Исходный код Редактировать
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/parsesql.html