summaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-01-04 07:24:08 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-01-04 07:24:08 +0000
commit7a2201963d5b03bd1828d350ccaecb4eda30d30c (patch)
tree19effbe90b8d78fdcb5f7d4bd0dd46b177ffdaab /README.md
parentReleasing debian version 10.2.9-1. (diff)
downloadsqlglot-7a2201963d5b03bd1828d350ccaecb4eda30d30c.tar.xz
sqlglot-7a2201963d5b03bd1828d350ccaecb4eda30d30c.zip
Merging upstream version 10.4.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'README.md')
-rw-r--r--README.md64
1 files changed, 34 insertions, 30 deletions
diff --git a/README.md b/README.md
index 218d86c..06cb791 100644
--- a/README.md
+++ b/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 |
| --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- |