用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第三方库


热门话题
创建大十进制对象时发生java错误   java为什么netty日志不显示正确的类和包信息   java AWS Lambda,如何正确实例化AmazonHttpClient?   java如何防止控制器中的Put API受到CheckMarx扫描中反映的XSS攻击?   java如何在Android上滚动时更改图像   java为什么通知没有显示在API 28中?   java分配问题OCJP;为什么我不能将int传递给short?   java在非静态内部类中使用泛型   正则表达式从Java字符串中提取word中指定的日期值   java Primefaces selectManyCheckbox未在bean中填充   美化javaxml输出   java带2个箭头的按位移位和带3个箭头的按位移位有什么区别?   使用JAXB和SpringMVC进行java XML绑定   Java高级功能weblogic中的Web服务   java IIN插入HQL中   缺少java PrintCommandListener   java如何模拟SpringBean的自动连接列表?   javasocket服务器、客户端检测服务器已死亡   将按钮添加到使用java图形的contentPane   java EJB3在第一次运行时调用计时器超时时出错