trino-sql-validator
Fast Trino SQL syntax validator — a Python library whose core is written in Rust and compiled to a native extension via PyO3 + maturin.
Installable from PyPI:
pip install trino-sql-validator
Quickstart
from trino_sql_validator import validate, validate_file
# A string with one or many statements
result = validate("SELECT 1; SELECT * FROM t WHERE a > 0;")
assert result.valid
assert result.statement_count == 2
# Invalid SQL returns a value, never raises
result = validate("SELECT * FORM t")
assert not result.valid
print(result.error) # e.g. "Expected: end of statement, found: FORM at line 1, column 10"
print(result.error.line) # 1
# Validate a file
result = validate_file("queries.sql", dialect="trino")
Invalid SQL (and files containing it) is returned as a ValidationResult;
it is not raised as an exception. Only genuine misuse (unknown dialect,
unreadable file) raises.
Catalog warnings (functions and data types)
For dialect="trino", validate() also checks that every function called and
every data type used in the SQL exists in the documented Trino catalog. Unknown
names are reported as non-fatal warnings — valid stays True because syntax
is fine:
result = validate("SELECT marh(1.5)") # round() misspelled
assert result.valid
print(result.warnings) # (FunctionWarning(name='marh', line=1, column=8),)
print(result.unknown_functions) # ['marh']
result = validate("CREATE TABLE t (a bignum, b bigint)") # bigint vs bignum
print(result.warnings[0]) # TypeWarning(name='bignum', line=1, column=19)
print(result.unknown_types) # ['bignum']
The catalogs are auto-generated from the Trino docs and only check name
existence, not argument counts, precision/scale, or semantic correctness.
hive/generic dialects skip these checks. False positives are possible if a
deployed Trino adds plugin functions/types beyond the docs.
dbt and Jinja templates
Jinja/dbt SQL is supported by default. validate() and validate_file() use
jinja="auto" to mask Jinja expressions, statements, and comments before
parsing while preserving line numbers and file structure. This supports
constructs such as {{ ref("orders") }} and {{ var("catalog") }} without
requiring a dbt installation or project context. Use jinja="mask" as an
explicit spelling of the same mode.
Use jinja="reject" to pass the original template directly to the SQL parser.
Masking cannot determine SQL generated by control-flow blocks, macros, or
adapter semantics; render those cases with dbt and validate the rendered SQL
for complete coverage.
Dialects
"trino"(default) — Trino-flavored with a custom override tuned for Presto/Trino syntax (LIMIT ALL, backslash escapes, etc.)."hive"and"generic"— offered as permissive alternates.
Known limitations
sqlparser-rs (the parser we use) performs syntax validation, not semantic
analysis. It may accept SQL that Trino would reject at analysis time (unknown
columns/tables, duplicate columns), and it can reject exotic Trino-specific DDL.
The validator has targeted compatibility parsing for documented Trino syntax,
including nested ROW/ARRAY/MAP types, but it does not replace Trino's
semantic analyzer. For the overwhelming majority of SELECT/DDL statements the
results are accurate. See plan/roadmap.md for the path toward
stricter Trino fidelity.
Development
See AGENTS.md for setup, internal conventions, and release steps.
Key commands:
python3 -m venv .venv && source .venv/bin/activate
pip install -U pip maturin && pip install -e ".[dev]"
maturin develop # build + install native ext into the venv
cargo test # Rust tests
pytest -q # Python tests
cargo fmt --check # formatting
cargo clippy --all-targets -- -D warnings
License
MIT
Release files for trino-sql-validator 0.10.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| trino_sql_validator-0.10.0.tar.gz | 74.5 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| trino_sql_validator-0.10.0-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| trino_sql_validator-0.10.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| trino_sql_validator-0.10.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| trino_sql_validator-0.10.0-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
| trino_sql_validator-0.10.0-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 10.1 MB
Release files / trino_sql_validator-0.10.0.tar.gz
| Download URL | trino_sql_validator-0.10.0.tar.gz |
|---|---|
| Size | 74.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5bcbc81169ed93890f73a65bf1853df180e182769d2f04aee408974d2faa696d
|
|
BLAKE2b-256 checksum How to use checksums |
a9b0b912ac3807d5e8798ffd1bd0a5d2442fdd698791fab601da978ebf62c76a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / trino_sql_validator-0.10.0-cp310-abi3-win_amd64.whl
| Download URL | trino_sql_validator-0.10.0-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
3fb3eec4fced7c50ba3cb7f1789b112b46b93da0ac27bb9164f87b1273b26143
|
|
BLAKE2b-256 checksum How to use checksums |
e50b728189f36a15534bd8e95e3ef2f32208b849051e0c93122986c8e35c6829
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / trino_sql_validator-0.10.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | trino_sql_validator-0.10.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
15b71abed2c3e56abc82afb88090024c50e35848069aa203e3a859b142ba1cce
|
|
BLAKE2b-256 checksum How to use checksums |
9c479d8bd7b291868cfd8b665a19401c082174bdba1fc563983611c6f00cb606
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / trino_sql_validator-0.10.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | trino_sql_validator-0.10.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
58277d5d1ca8a90beaa3800c488cb46a51c1d0ff390ecfe52ada83cf88eb926d
|
|
BLAKE2b-256 checksum How to use checksums |
f2e3b057ed6435119a3896ebab4d7bbbe244e8008ac3d363a7c499fe4bffb05d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / trino_sql_validator-0.10.0-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | trino_sql_validator-0.10.0-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
60e5f61c674d42c2742a0b9e141a4fbf6a3ec002f45bcf411f335bfb127caa98
|
|
BLAKE2b-256 checksum How to use checksums |
b31ef1ad062431abb40379cde3cc4c8078dcfc2051197afebde3bb307b966290
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / trino_sql_validator-0.10.0-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | trino_sql_validator-0.10.0-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
90f8d5d746e9c92e95de230b2362f93408624cd8b26d402d1ceb731188bb8810
|
|
BLAKE2b-256 checksum How to use checksums |
89827feb545b77951bd51a8a6a99ec45fa608a32e24abf2a4ac7ea7e2a066c82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|