Skip to main content

Package for parsing PostgreSQL/MySQL and translating ADQL to PostgreSQL/MySQL.

Project description

queryparser

Tool for parsing and processing of (MySQL*)/PostgreSQL and translation of ADQL SELECT-like queries

Designed to be used in conjunction with django-daiquri as a query processing backend but it can be easily used as a stand-alone tool or integrated into another project.

*NOTE: Since version 0.7.0 MySQL is not supported (maintained) anymore.

pytest Workflow Status Coverage Status License Latest Version

Installation

The easiest way to install the package is by using the pip tool:

python -m pip install queryparser-python3

Alternatively, you can clone the repository and install it from there. However, this step also requires generating the parser which is a slightly more elaborate process (see below).

Generating the parser from the git repository

To generate the parsers you need python3 , java above version 7, and antlr4 (antlr-4.*-complete.jar has to be installed inside the /usr/local/lib/, /usr/local/bin/ or root directory of the project).

The current version of antlr-4.*-complete.jar can be downloaded via

wget http://www.antlr.org/download/antlr-4.13.1-complete.jar

After cloning the project run

make

and a lib directory will be created. After that, run

python -m pip install .

to install the generated parser in your virtual environment.

Additional requirements

The queryparser assumes that the PostgreSQL database has the extension pg_sphere installed. Although the pg_sphere is not required for the python module, the PostgreSQL queries will not run without this extension installed on the database.

Parsing MySQL and PostgreSQL

Since version 0.7, MySQL part of the parser is not maintained anymore. Thus, the MySQL related functionality cannot be guaranteed!

Parsing and processing of MySQL queries can be done by creating an instance of the MySQLQueryProcessor class

from queryparser.mysql import MySQLQueryProcessor
qp = MySQLQueryProcessor()

feeding it a MySQL query

sql = "SELECT a FROM db.tab;"
qp.set_query(sql)

and running it with

qp.process_query()

After the processing is completed, the processor object qp will include tables, columns, functions, and keywords used in the query or will raise a QuerySyntaxError if there are any syntax errors in the query.

Alternatively, passing the query at initialization automatically processes it.

PostgreSQL parsing is very similar to MySQL, except it requires importing the PostgreSQLProcessor class:

from queryparser.postgresql import PostgreSQLQueryProcessor
qp = PostgreSQLQueryProcessor()

The rest of the functionality remains the same.

Translating ADQL

Translation of ADQL queries is done similarly by first creating an instance of the ADQLQueryTranslator class

from queryparser.adql import ADQLQueryTranslator
adql = "SELECT TOP 100 POINT('ICRS', ra, de) FROM db.tab;"
adt = ADQLQueryTranslator(adql)

and calling

adt.to_postgresql()

which returns a translated string representing a valid MySQL query if the ADQL query had no errors. The PostgreSQL query can then be parsed with the PostgreSQLQueryProcessor in the same way as shown above.

Testing

First in the root directory of the project, install optional dependencies (PyYAML and pytest) by running

python -m pip install .[test]

then run the test suite with

python -m pytest lib/

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

queryparser_python3-0.7.0.tar.gz (266.2 kB view details)

Uploaded Source

Built Distribution

queryparser_python3-0.7.0-py3-none-any.whl (271.0 kB view details)

Uploaded Python 3

File details

Details for the file queryparser_python3-0.7.0.tar.gz.

File metadata

  • Download URL: queryparser_python3-0.7.0.tar.gz
  • Upload date:
  • Size: 266.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.11.2

File hashes

Hashes for queryparser_python3-0.7.0.tar.gz
Algorithm Hash digest
SHA256 d1d35f73c034fac92bd526f8f68ce006988a7744e0fc35f7a3525051903c3d2e
MD5 6cb767a4d9ce348dfab0c578e7153b18
BLAKE2b-256 dad04fdd3f0e704b3add299f3f9127788deaf3ec61d3e3e57503af4251e14103

See more details on using hashes here.

File details

Details for the file queryparser_python3-0.7.0-py3-none-any.whl.

File metadata

File hashes

Hashes for queryparser_python3-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 73483fa8818e9ddf9e07c95147852238452292d38fcd3e11cefa3ad3337fc455
MD5 8fe2db1a9656682b0122d1c15e3d1be0
BLAKE2b-256 d518fb759a262e6bf7106445147025c3e518e345c192edc226461858cf5b2c4c

See more details on using hashes here.

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