用antlr4编写的过程性sql解析器

antlr-plsql的Python项目详细描述


antlr plsql

Build StatusPyPI version

开发

antlr需要java,因此我们建议您在构建语法时使用docker。Makefile包含清理、构建、测试和部署antlr语法的指令。它本身不运行docker,所以在docker内部运行make

构建语法

# Build the docker container
docker build -t antlr_plsql .

# Run the container to build the python grammar# Write parser files to local file system through volume mounting
docker run -it -v ${PWD}:/usr/src/app antlr_plsql make build

设置python模块

现在python解析文件已经可用,您可以使用pip

安装它们。
pip install -r requirements.txt
pip install -e .

并在python中解析sql代码:

fromantlr_plsqlimportastast.parse("SELECT a from b")

使用ast查看器

如果您正在积极开发anltr语法或树形,那么最好在本地设置AST viewer,这样您就可以立即以可视化的方式看到更改的影响。

  • 克隆ast viewer repo并按照说明构建docker映像。
  • 启动一个Docker容器,Volume装载Python包,Symlink安装包并在端口3000上运行服务器:
docker run -it \
  -u root \
  -v ~/workspace/antlr-plsql:/app/app/antlr-plsql \
  -p 3000:3000 \
  ast-viewer \
  /bin/bash -c "echo 'Install development requirements in development:' \    && pip install --no-deps -e app/antlr-plsql \    && python3 run.py"

在同时开发其他软件包时,也要进行卷安装:

docker run -it \
  -u root \
  -v ~/workspace/antlr-ast:/app/app/antlr-ast \
  -v ~/workspace/antlr-plsql:/app/app/antlr-plsql \
  -v ~/workspace/antlr-tsql:/app/app/antlr-tsql \
  -p 3000:3000 \
  ast-viewer \
  /bin/bash -c "echo 'Install development requirements in development:' \    && pip install --no-deps -e app/antlr-ast \    && pip install --no-deps -e app/antlr-plsql \    && pip install --no-deps -e app/antlr-tsql \    && python3 run.py"
  • 如果您更新此回购协议中的树形逻辑,应用程序将自动更新。
  • 如果更改语法,则必须首先重建语法(使用antlr_plsqldocker映像)并重新启动ast-viewer容器。

运行测试

# Similar to building the grammar, but running tests# and not saving the generated files
docker build -t antlr_plsql .
docker run -t antlr_plsql make build test

或者在本地运行测试,首先生成语法,然后运行:

pytest

特拉维斯部署

  • 建立Docker图像。
  • 运行docker映像来构建语法并运行单元测试。
  • 在新版本发布时,将生成的python文件部署到pypi,以便可以轻松安装它们。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
手机上的html调试Java web应用程序   Java当前日期和过去日期之间的差值,以年、月、日、小时、分、秒为单位   如果方法名称相同,java如何使扩展类不从上面的类触发方法?   即使在提供了准确的firebase引用之后,java仍出现“无法跳转到类型”异常。请看详情   jar文件中的java图像   java如何避免从缓存读取时修改相同的对象实例?   Android中java完全控制的线程队列   JTextArea中的java计算   java如何独立运行。jar作为64位mashine上的32位   java在尝试实例化自引用泛型类的实例时,如何处理自引用类型参数   java如何安装着色jar而不是原来的jar   java在resultSet之后使用If-Else   多线程是java。朗,反思一下。方法调用线程安全   java 7语言向后兼容性   Objective C中的Category和Java 8中的Default方法是否等效?