Skip to main content

SQL语法解析器,包含词法树解析、语法树解析和语法树分析功能。

Project description

metasequoia-sql

SQL 语法解析器,包含词法树解析(lexical 模块)、语法树解析(core 模块)和语法树分析(analyzer 模块)功能。

自 0.6.0 版本起,对外暴露的 API 将支持向前兼容。

安装方法

pip install metasequoia-sql

使用方法

词法树解析

将 SQL 语句解析为一个抽象词法树节点的列表:

from metasequoia_sql import FSMMachine
FSMMachine.parse("your sql")

语法树解析

将 SQL 语句解析为一个抽象语法树,支持一次性解析多个 SQL 语句,支持解析 SQL 语句中的某个语法元素:

from metasequoia_sql import *

statements = SQLParser.parse_statements("your sql file")

语法树分析:数据血缘分析

分析 INSERT 语句的数据血缘。数据血缘分析需要依赖元数据,所以需要根据你的数据源继承 CreateTableStatementGetter 类并提供给数据血缘分析器。

from metasequoia_sql import *
from metasequoia_sql.analyzer import CreateTableStatementGetter
from metasequoia_sql.analyzer.data_linage.table_lineage_analyzer import TableLineageAnalyzer

table_lineage_analyzer = TableLineageAnalyzer(CreateTableStatementGetter(...))
for statement in SQLParser.parse_statements("your sql file"):
    if isinstance(statement, ASTInsertSelectStatement):
        result = table_lineage_analyzer.get_insert_table_lineage(statement)

实现原理

将词法分析与句法分析分离,先对解析 SQL 语句生成抽象词法树,然后解析抽象词法树生成抽象语法树。

在词法分析中,使用有限状态自动机进行解析。

在语法分析中,根据语法结构确定可能得元素类型后进行解析。

参与贡献

已知问题

  • MySQL 中,使用连续的 ! 符号的场景

提交前自检

pylint 检查:在 Pull Request 时会自动执行检查。

pylint --max-line-length=120 metasequoia_sql

单元测试覆盖率检查:

# 将 metasequoia-sql 文件夹添加到 PYTHONPATH,并在 metasequoia-sql 文件夹下执行
coverage run .\scripts\tests\test_main.py
coverage report  # 生成文字报告
coverage html  # 生成 HTML 报告

版本更新记录

文档地址

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

metasequoia-sql-0.5.0.tar.gz (55.9 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page