# antlr-plsql
[![Build Status](https://travis-ci.org/datacamp/antlr-plsql.svg?branch=master)](https://travis-ci.org/datacamp/antlr-plsql)
[![PyPI version](https://badge.fury.io/py/antlr-plsql.svg)](https://badge.fury.io/py/antlr-plsql)
## Development
ANTLR requires Java, so we suggest you use Docker when building grammars. The `Makefile` contains directives to clean, build, test and deploy the ANTLR grammar. It does not run Docker itself, so run `make` inside Docker.
### Build the grammar
```bash
# 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
```
### Set up the Python module
Now that the Python parsing files are available, you can install them with `pip`:
```bash
pip install -r requirements.txt
pip install -e .
```
And parse SQL code in Python:
```python
from antlr_plsql import ast
ast.parse("SELECT a from b")
```
### Using the AST viewer
If you're actively developing on the ANLTR grammar or the tree shaping, it's a good idea to set up the [AST viewer](https://github.com/datacamp/ast-viewer) locally so you can immediately see the impact of your changes in a visual way.
- Clone the ast-viewer repo and build the Docker image according to the instructions.
- Spin up a docker container that volume mounts the Python package, symlink-installs the package and runs the server on port 3000:
```bash
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"
```
When simultaneously developing other packages, volume mount and install those too:
```bash
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"
```
- If you update the tree shaping logic in this repo, the app will auto-update.
- If you change the grammar, you will have to first rebuild the grammar (with the `antlr_plsql` docker image) and restart the `ast-viewer` container.
### Run tests
```bash
# 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
```
Or run the test locally, first build the grammar then run:
```python
pytest
```
## Travis deployment
- Builds the Docker image.
- Runs the Docker image to build the grammar and run the unit tests.
- Deploys the resulting python files to PyPi when a new release is made, so they can be installed easily.
Raw data
{
"_id": null,
"home_page": "https://github.com/datacamp/antlr-plsql",
"name": "antlr-plsql",
"maintainer": "Jeroen Hermans",
"docs_url": null,
"requires_python": "",
"maintainer_email": "content-engineering@datacamp.com",
"keywords": "",
"author": "Michael Chow",
"author_email": "michael@datacamp.com",
"download_url": "https://files.pythonhosted.org/packages/3a/54/6d96bdfbd5dee02533992fa60ec8ac53040470f2d1c4a2f751f9c8e33329/antlr-plsql-0.9.1.tar.gz",
"platform": "",
"description": "# antlr-plsql\n\n[![Build Status](https://travis-ci.org/datacamp/antlr-plsql.svg?branch=master)](https://travis-ci.org/datacamp/antlr-plsql)\n[![PyPI version](https://badge.fury.io/py/antlr-plsql.svg)](https://badge.fury.io/py/antlr-plsql)\n\n## Development\n\nANTLR requires Java, so we suggest you use Docker when building grammars. The `Makefile` contains directives to clean, build, test and deploy the ANTLR grammar. It does not run Docker itself, so run `make` inside Docker.\n\n### Build the grammar\n\n```bash\n# Build the docker container\ndocker build -t antlr_plsql .\n\n# Run the container to build the python grammar\n# Write parser files to local file system through volume mounting\ndocker run -it -v ${PWD}:/usr/src/app antlr_plsql make build\n```\n\n### Set up the Python module\n\nNow that the Python parsing files are available, you can install them with `pip`:\n\n```bash\npip install -r requirements.txt\npip install -e .\n```\n\nAnd parse SQL code in Python:\n\n```python\nfrom antlr_plsql import ast\nast.parse(\"SELECT a from b\")\n```\n\n### Using the AST viewer\n\nIf you're actively developing on the ANLTR grammar or the tree shaping, it's a good idea to set up the [AST viewer](https://github.com/datacamp/ast-viewer) locally so you can immediately see the impact of your changes in a visual way.\n\n- Clone the ast-viewer repo and build the Docker image according to the instructions.\n- Spin up a docker container that volume mounts the Python package, symlink-installs the package and runs the server on port 3000:\n\n```bash\ndocker run -it \\\n -u root \\\n -v ~/workspace/antlr-plsql:/app/app/antlr-plsql \\\n -p 3000:3000 \\\n ast-viewer \\\n /bin/bash -c \"echo 'Install development requirements in development:' \\\n && pip install --no-deps -e app/antlr-plsql \\\n && python3 run.py\"\n```\n\nWhen simultaneously developing other packages, volume mount and install those too:\n\n```bash\ndocker run -it \\\n -u root \\\n -v ~/workspace/antlr-ast:/app/app/antlr-ast \\\n -v ~/workspace/antlr-plsql:/app/app/antlr-plsql \\\n -v ~/workspace/antlr-tsql:/app/app/antlr-tsql \\\n -p 3000:3000 \\\n ast-viewer \\\n /bin/bash -c \"echo 'Install development requirements in development:' \\\n && pip install --no-deps -e app/antlr-ast \\\n && pip install --no-deps -e app/antlr-plsql \\\n && pip install --no-deps -e app/antlr-tsql \\\n && python3 run.py\"\n```\n\n- If you update the tree shaping logic in this repo, the app will auto-update.\n- If you change the grammar, you will have to first rebuild the grammar (with the `antlr_plsql` docker image) and restart the `ast-viewer` container.\n\n### Run tests\n\n```bash\n# Similar to building the grammar, but running tests\n# and not saving the generated files\ndocker build -t antlr_plsql .\ndocker run -t antlr_plsql make build test\n```\n\nOr run the test locally, first build the grammar then run:\n\n```python\npytest\n```\n\n## Travis deployment\n\n- Builds the Docker image.\n- Runs the Docker image to build the grammar and run the unit tests.\n- Deploys the resulting python files to PyPi when a new release is made, so they can be installed easily.",
"bugtrack_url": null,
"license": "",
"summary": "A procedural sql parser, written in Antlr4",
"version": "0.9.1",
"project_urls": {
"Homepage": "https://github.com/datacamp/antlr-plsql"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "3a546d96bdfbd5dee02533992fa60ec8ac53040470f2d1c4a2f751f9c8e33329",
"md5": "1df7725be812face1d3214645535d289",
"sha256": "5bef8261031239176d483005fa5764eb6cafa6c7826d398f3e84d17038f88730"
},
"downloads": -1,
"filename": "antlr-plsql-0.9.1.tar.gz",
"has_sig": false,
"md5_digest": "1df7725be812face1d3214645535d289",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 622317,
"upload_time": "2019-10-18T11:42:32",
"upload_time_iso_8601": "2019-10-18T11:42:32.828957Z",
"url": "https://files.pythonhosted.org/packages/3a/54/6d96bdfbd5dee02533992fa60ec8ac53040470f2d1c4a2f751f9c8e33329/antlr-plsql-0.9.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2019-10-18 11:42:32",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "datacamp",
"github_project": "antlr-plsql",
"travis_ci": true,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "antlr-plsql"
}