Adding upstream version 10.4.2.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
275e9758ad
commit
63044b3f6c
88 changed files with 1637 additions and 436 deletions
64
README.md
64
README.md
|
@ -1,8 +1,8 @@
|
|||
# SQLGlot
|
||||
|
||||
SQLGlot is a no dependency Python SQL parser, transpiler, and optimizer. It can be used to format SQL or translate between different dialects like [DuckDB](https://duckdb.org/), [Presto](https://prestodb.io/), [Spark](https://spark.apache.org/), [Snowflake](https://www.snowflake.com/en/), and [BigQuery](https://cloud.google.com/bigquery/). It aims to read a wide variety of SQL inputs and output syntactically correct SQL in the targeted dialects.
|
||||
SQLGlot is a no dependency Python SQL parser, transpiler, optimizer, and engine. It can be used to format SQL or translate between different dialects like [DuckDB](https://duckdb.org/), [Presto](https://prestodb.io/), [Spark](https://spark.apache.org/), [Snowflake](https://www.snowflake.com/en/), and [BigQuery](https://cloud.google.com/bigquery/). It aims to read a wide variety of SQL inputs and output syntactically correct SQL in the targeted dialects.
|
||||
|
||||
It is a very comprehensive generic SQL parser with a robust [test suite](tests). It is also quite [performant](#benchmarks) while being written purely in Python.
|
||||
It is a very comprehensive generic SQL parser with a robust [test suite](https://github.com/tobymao/sqlglot/blob/main/tests/). It is also quite [performant](#benchmarks) while being written purely in Python.
|
||||
|
||||
You can easily [customize](#custom-dialects) the parser, [analyze](#metadata) queries, traverse expression trees, and programmatically [build](#build-and-modify-sql) SQL.
|
||||
|
||||
|
@ -13,8 +13,7 @@ Contributions are very welcome in SQLGlot; read the [contribution guide](https:/
|
|||
## Table of Contents
|
||||
|
||||
* [Install](#install)
|
||||
* [Documentation](#documentation)
|
||||
* [Run Tests and Lint](#run-tests-and-lint)
|
||||
* [Get in Touch](#get-in-touch)
|
||||
* [Examples](#examples)
|
||||
* [Formatting and Transpiling](#formatting-and-transpiling)
|
||||
* [Metadata](#metadata)
|
||||
|
@ -26,6 +25,8 @@ Contributions are very welcome in SQLGlot; read the [contribution guide](https:/
|
|||
* [AST Diff](#ast-diff)
|
||||
* [Custom Dialects](#custom-dialects)
|
||||
* [SQL Execution](#sql-execution)
|
||||
* [Documentation](#documentation)
|
||||
* [Run Tests and Lint](#run-tests-and-lint)
|
||||
* [Benchmarks](#benchmarks)
|
||||
* [Optional Dependencies](#optional-dependencies)
|
||||
|
||||
|
@ -40,30 +41,17 @@ pip3 install sqlglot
|
|||
Or with a local checkout:
|
||||
|
||||
```
|
||||
pip3 install -e .
|
||||
make install
|
||||
```
|
||||
|
||||
Requirements for development (optional):
|
||||
|
||||
```
|
||||
pip3 install -r dev-requirements.txt
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
SQLGlot uses [pdocs](https://pdoc.dev/) to serve its API documentation:
|
||||
|
||||
```
|
||||
pdoc sqlglot --docformat google
|
||||
```
|
||||
|
||||
## Run Tests and Lint
|
||||
|
||||
```
|
||||
# set `SKIP_INTEGRATION=1` to skip integration tests
|
||||
./run_checks.sh
|
||||
make install-dev
|
||||
```
|
||||
|
||||
## Get in Touch
|
||||
We'd love to hear from you. Join our community [Slack channel](https://join.slack.com/t/tobiko-data/shared_invite/zt-1ma66d79v-a4dbf4DUpLAQJ8ptQrJygg)!
|
||||
|
||||
## Examples
|
||||
|
||||
|
@ -163,16 +151,16 @@ from sqlglot import parse_one, exp
|
|||
|
||||
# print all column references (a and b)
|
||||
for column in parse_one("SELECT a, b + 1 AS c FROM d").find_all(exp.Column):
|
||||
print(column.alias_or_name)
|
||||
print(column.alias_or_name)
|
||||
|
||||
# find all projections in select statements (a and c)
|
||||
for select in parse_one("SELECT a, b + 1 AS c FROM d").find_all(exp.Select):
|
||||
for projection in select.expressions:
|
||||
print(projection.alias_or_name)
|
||||
for projection in select.expressions:
|
||||
print(projection.alias_or_name)
|
||||
|
||||
# find all tables (x, y, z)
|
||||
for table in parse_one("SELECT * FROM x JOIN y JOIN z").find_all(exp.Table):
|
||||
print(table.name)
|
||||
print(table.name)
|
||||
```
|
||||
|
||||
### Parser Errors
|
||||
|
@ -274,7 +262,7 @@ transformed_tree.sql()
|
|||
|
||||
### SQL Optimizer
|
||||
|
||||
SQLGlot can rewrite queries into an "optimized" form. It performs a variety of [techniques](sqlglot/optimizer/optimizer.py) to create a new canonical AST. This AST can be used to standardize queries or provide the foundations for implementing an actual engine. For example:
|
||||
SQLGlot can rewrite queries into an "optimized" form. It performs a variety of [techniques](https://github.com/tobymao/sqlglot/blob/main/sqlglot/optimizer/optimizer.py) to create a new canonical AST. This AST can be used to standardize queries or provide the foundations for implementing an actual engine. For example:
|
||||
|
||||
```python
|
||||
import sqlglot
|
||||
|
@ -292,7 +280,7 @@ print(
|
|||
)
|
||||
```
|
||||
|
||||
```
|
||||
```sql
|
||||
SELECT
|
||||
(
|
||||
"x"."A" OR "x"."B" OR "x"."C"
|
||||
|
@ -351,9 +339,11 @@ diff(parse_one("SELECT a + b, c, d"), parse_one("SELECT c, a - b, d"))
|
|||
]
|
||||
```
|
||||
|
||||
See also: [Semantic Diff for SQL](https://github.com/tobymao/sqlglot/blob/main/posts/sql_diff.md).
|
||||
|
||||
### Custom Dialects
|
||||
|
||||
[Dialects](sqlglot/dialects) can be added by subclassing `Dialect`:
|
||||
[Dialects](https://github.com/tobymao/sqlglot/tree/main/sqlglot/dialects) can be added by subclassing `Dialect`:
|
||||
|
||||
```python
|
||||
from sqlglot import exp
|
||||
|
@ -391,7 +381,7 @@ class Custom(Dialect):
|
|||
print(Dialect["custom"])
|
||||
```
|
||||
|
||||
```python
|
||||
```
|
||||
<class '__main__.Custom'>
|
||||
```
|
||||
|
||||
|
@ -442,9 +432,23 @@ user_id price
|
|||
2 3.0
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
SQLGlot uses [pdocs](https://pdoc.dev/) to serve its API documentation:
|
||||
|
||||
```
|
||||
make docs-serve
|
||||
```
|
||||
|
||||
## Run Tests and Lint
|
||||
|
||||
```
|
||||
make check # Set SKIP_INTEGRATION=1 to skip integration tests
|
||||
```
|
||||
|
||||
## Benchmarks
|
||||
|
||||
[Benchmarks](benchmarks) run on Python 3.10.5 in seconds.
|
||||
[Benchmarks](https://github.com/tobymao/sqlglot/blob/main/benchmarks/bench.py) run on Python 3.10.5 in seconds.
|
||||
|
||||
| Query | sqlglot | sqlfluff | sqltree | sqlparse | moz_sql_parser | sqloxide |
|
||||
| --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- |
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue