sqlty 0.4.0__tar.gz → 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlty-0.4.0 → sqlty-0.6.0}/PKG-INFO +24 -18
- {sqlty-0.4.0 → sqlty-0.6.0}/README.md +18 -13
- {sqlty-0.4.0 → sqlty-0.6.0}/pyproject.toml +26 -8
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/Cargo.lock +422 -19
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/Cargo.toml +6 -3
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-ext/Cargo.toml +4 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-ext/src/config.rs +7 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-ext/src/lib.rs +1221 -46
- sqlty-0.6.0/rust/crates/sqlty-ext/src/outline.rs +1038 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-ext/src/server.rs +8 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-format/Cargo.toml +2 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-format/src/lib.rs +3 -3
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-lsp/src/actions.rs +1 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-lsp/src/lib.rs +14 -2
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-lsp/src/tests.rs +33 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-lsp/src/worker.rs +8 -7
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/Cargo.toml +5 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/calls.rs +739 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/check.rs +1407 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/checker.rs +27 -18
- sqlty-0.6.0/rust/crates/sqlty-python/src/compose.rs +1092 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/config.rs +150 -1
- sqlty-0.6.0/rust/crates/sqlty-python/src/drivers.rs +654 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/helpers.rs +245 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/index.rs +702 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/json_types.rs +340 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/lib.rs +24 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/module.rs +354 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/params.rs +101 -17
- sqlty-0.6.0/rust/crates/sqlty-python/src/parse.rs +377 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/queries.rs +19 -4
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/rewriter.rs +41 -10
- sqlty-0.6.0/rust/crates/sqlty-python/src/rows/json_shape.rs +440 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/rows/mod.rs +1042 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/rules.rs +13 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/scan.rs +19 -1
- sqlty-0.6.0/rust/crates/sqlty-python/src/scopes.rs +462 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/suppress.rs +139 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/templates.rs +156 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/types/compat.rs +204 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/types/extract.rs +1186 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/types/generic.rs +177 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/types/info.rs +198 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/types/mod.rs +23 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/types/pydantic.rs +245 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/types/resolve.rs +330 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/types/stdlib.rs +78 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/types/stdlib_table.rs +2679 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/types/symbols.rs +526 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/types/ty.rs +584 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/unparse.rs +1114 -0
- sqlty-0.6.0/rust/crates/sqlty-python/src/variants.rs +1715 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/sqlite/bitwise.inference.toml +1 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/api.rs +9 -12
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/complete.rs +41 -8
- sqlty-0.6.0/rust/crates/sqlty-sql/src/analyzer/databases.rs +195 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/dialect.rs +20 -4
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/dml.rs +7 -5
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/entities.rs +12 -5
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/explain.rs +1 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/expr.rs +25 -5
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/fanout.rs +48 -13
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/functions.rs +18 -30
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/hover.rs +2 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/input.rs +5 -88
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/json.rs +4 -10
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/memo.rs +1 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/mod.rs +8 -30
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/narrowing.rs +72 -18
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/nullability.rs +105 -47
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/operators.rs +0 -2
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/params.rs +20 -13
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/preprocess.rs +53 -7
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/resolve.rs +83 -15
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/respell.rs +17 -88
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/scope.rs +27 -54
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__aggregates_in_postgres.snap +1 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__projection_forms.snap +0 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/sql_type.rs +11 -7
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/star_expand.rs +1 -0
- sqlty-0.6.0/rust/crates/sqlty-sql/src/analyzer/tables.rs +244 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/test_support.rs +2 -3
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/tests.rs +14 -51
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/catalog/alter.rs +1 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/catalog/loader.rs +1 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/catalog/mod.rs +2 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/catalog/read.rs +14 -6
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/catalog/resolve.rs +1 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/ddl.rs +0 -25
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/diagnostics.rs +33 -14
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/lib.rs +1 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/placeholders.rs +18 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/values.rs +4 -2
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/tests/timing.rs +1 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/skills/sqlty/SKILL.md +8 -8
- {sqlty-0.4.0 → sqlty-0.6.0}/skills/sqlty-adopt/SKILL.md +12 -7
- {sqlty-0.4.0 → sqlty-0.6.0}/skills/sqlty-breaking/SKILL.md +2 -2
- {sqlty-0.4.0 → sqlty-0.6.0}/skills/sqlty-check/SKILL.md +52 -9
- {sqlty-0.4.0 → sqlty-0.6.0}/skills/sqlty-ci/SKILL.md +4 -4
- {sqlty-0.4.0 → sqlty-0.6.0}/skills/sqlty-rewrite/SKILL.md +4 -4
- {sqlty-0.4.0 → sqlty-0.6.0}/skills/sqlty-server/SKILL.md +4 -4
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/__init__.py +11 -3
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_breaking.py +76 -7
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_check.py +317 -27
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_cli.py +237 -90
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_config.py +109 -9
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_core.pyi +189 -3
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_drivers.py +210 -49
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_helpers.py +300 -40
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_json_types.py +1 -4
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_lint.py +24 -3
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_lsp_breaking.py +1 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_lsp_bridge.py +28 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_psycopg.py +3 -2
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_source.py +205 -5
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_type_extractor/_stdlib.py +2 -2
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_type_extractor/ast_fields.py +17 -4
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_type_extractor/extract.py +28 -2
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_type_extractor/info.py +4 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_type_extractor/symbols.py +1 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_variants.py +69 -4
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/core.py +224 -56
- sqlty-0.6.0/src/sqlty/lexer.py +74 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/column-count-mismatch.md +21 -0
- sqlty-0.6.0/src/sqlty/rules/duplicate-alias.md +52 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/dynamic-query.md +19 -0
- sqlty-0.6.0/src/sqlty/rules/extra-param.md +53 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/fanout-aggregate.md +3 -1
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/param-count-mismatch.md +9 -5
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/param-type-mismatch.md +9 -6
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/params-type-mismatch.md +1 -0
- sqlty-0.6.0/src/sqlty/rules/unknown-database.md +30 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/LICENSE +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-ext/build.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-lsp/Cargo.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-lsp/src/completion.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-lsp/src/highlight.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-lsp/src/hover.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-lsp/src/text.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-lsp/src/uri.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/clippy.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/edit.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/fixer.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/locate.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/options.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/template.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-python/src/tokens.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/Cargo.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/build.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/clippy.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/README.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/common/aggregates.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/common/arithmetic.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/common/comparison.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/common/concat.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/common/conditional.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/common/datetime.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/common/json.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/common/math.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/common/strings.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/common/window.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/compile.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/dialects.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/aggregates.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/arithmetic.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/bits.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/comparison.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/concat.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/conditional.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/datetime.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/encryption.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/json.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/math.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/misc.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/spatial.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/strings.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/mysql/system.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/admin.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/aggregates.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/arithmetic.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/arrays.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/binary.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/comparison.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/concat.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/conditional.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/datetime.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/enums.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/events.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/extensions.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/formatting.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/geometry.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/json.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/math.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/merge.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/network.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/ranges.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/rows.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/sequences.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/series.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/strings.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/system.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/textsearch.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/uuid.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/postgres/xml.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/sqlite/aggregates.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/sqlite/arithmetic.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/sqlite/datetime.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/sqlite/fts.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/sqlite/json.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/sqlite/math.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/sqlite/scalar.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/rules/sqlite/strings.inference.toml +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/grouping.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/hashing.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/inference.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/literals.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/merged_star.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/names.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/pg_record_functions.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/planner_hints.sql +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/query.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/references.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/registry.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__dml__tests__returning_columns_in_queries.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__arrays_and_subscripts.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__case_expressions.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__casts.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__casts_without_a_schema_do_not_complain.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__composite_fields_and_json_access.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__literals_and_unary_operators.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__misc_expressions.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__mysql_and_sqlite_expressions.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__function_availability_differs_by_dialect.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__return_types_follow_the_argument.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__unknown_functions_are_untyped_and_explained.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__literals__tests__value_sets_flow_through_expressions.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__names__tests__column_names_follow_postgres_figure_colname.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__arithmetic_promotes_numbers_and_types_date_math.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__binary_operators_in_queries.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__common_type_follows_postgres_union_rules.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__division_differs_between_postgres_and_mysql.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__column_names_come_from_the_first_branch.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__ctes.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__dialects_name_and_type_the_same_query_differently.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__recursive_ctes_settle_nullability.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__set_operations_combine_nullability.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__set_operations_unify_types.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__statements_that_are_not_queries_have_no_columns.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__unsupported_query_forms_are_explained.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__values_lists.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__ambiguous_names_are_reported_once_per_query.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__cte_columns_are_resolved_like_tables.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__names_are_not_judged_without_a_schema.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__nullability_comes_from_the_declaration.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__quoted_names_keep_their_case_in_postgres_only.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__star_over_unreadable_sources_names_the_reason.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__system_columns_exist_without_being_declared.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__unknown_names_say_what_is_missing.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__unqualified_names_resolve_to_the_first_source_that_has_them.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__correlated_subqueries_see_the_outer_scope.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__derived_tables_ctes_and_views.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__nullability_follows_the_join_kind.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__opaque_sources_explain_themselves.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__star_expansion_over_joins.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__table_names_fold_by_dialect.snap +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/suggest.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/table_functions.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/text_names.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/tokens.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/analyzer/typed.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/catalog/builtin_catalog.sql +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/catalog/columns.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/catalog/index.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/catalog/joins.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/catalog/names.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/catalog/pg_catalog_views.sql +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/highlight.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/src/json.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/rust/crates/sqlty-sql/tests/inference_compiler.rs +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/__main__.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_decode.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_gitignore.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_json_shape.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_params.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_queries.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_sarif.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_snapshot.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_type_extractor/__init__.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_type_extractor/compat.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_type_extractor/generic.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_type_extractor/pydantic_types.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_type_extractor/stdlib.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/_type_extractor/subtype.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/drivers/psycopg.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/magic.py +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/py.typed +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/ambiguous-column.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/chasm-join.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/column-name-mismatch.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/column-type-mismatch.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/entity-mismatch.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/fstring-skipped.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/inline-sql-comment.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/insert-missing-column.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/insert-value-count.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/json-shape-mismatch.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/literal-mismatch.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/mysql-sql-marker.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/narrow-type.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/nullable-mismatch.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/redundant-literal.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/redundant-optional.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/select-star-no-schema.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/select-star.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/sqruff.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/stale-rewrite.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/stale-type.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/tstring-skipped.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/typeddict-inheritance.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/typeddict-key-mismatch.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/unchecked-query.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/ungrouped-column.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/unknown-column.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/unknown-function.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/unknown-table.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/unknown-type.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/unparsed-query.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/unproven-join.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/unsupported-syntax.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/untyped-query.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty/rules/unused-ignore.md +0 -0
- {sqlty-0.4.0 → sqlty-0.6.0}/src/sqlty_magic.pth +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlty
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Environment :: Console
|
|
6
6
|
Classifier: Intended Audience :: Developers
|
|
@@ -12,6 +12,7 @@ Classifier: Programming Language :: Rust
|
|
|
12
12
|
Classifier: Programming Language :: SQL
|
|
13
13
|
Classifier: Topic :: Software Development :: Code Generators
|
|
14
14
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
15
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
15
16
|
Classifier: Topic :: Database
|
|
16
17
|
Classifier: Typing :: Typed
|
|
17
18
|
Requires-Dist: pathspec>=0.12.1
|
|
@@ -19,15 +20,15 @@ Requires-Dist: typing-extensions>=4.15.0 ; python_full_version < '3.15'
|
|
|
19
20
|
Requires-Dist: psycopg>=3.2.12 ; extra == 'psycopg'
|
|
20
21
|
Provides-Extra: psycopg
|
|
21
22
|
License-File: LICENSE
|
|
22
|
-
Summary: Type-safe SQL
|
|
23
|
-
Keywords: sql,type-
|
|
23
|
+
Summary: Type-safe raw SQL for Python: row and parameter types inferred from your SQL and schema, no ORM or database needed
|
|
24
|
+
Keywords: sql,raw-sql,type-safety,type-checking,type-hints,static-analysis,linter,mypy,pyright,ty,postgresql,sqlite,mysql,psycopg,migrations,code-generation,orm-alternative
|
|
24
25
|
Author-email: Jiri Kuncar <jiri.kuncar@gmail.com>
|
|
25
26
|
License-Expression: MIT
|
|
26
27
|
Requires-Python: >=3.14
|
|
27
28
|
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
28
29
|
Project-URL: Changelog, https://github.com/jirikuncar/sqlty/releases
|
|
29
|
-
Project-URL: Documentation, https://
|
|
30
|
-
Project-URL: Homepage, https://
|
|
30
|
+
Project-URL: Documentation, https://sqlty.kuncar.dev/
|
|
31
|
+
Project-URL: Homepage, https://sqlty.kuncar.dev/
|
|
31
32
|
Project-URL: Issues, https://github.com/jirikuncar/sqlty/issues
|
|
32
33
|
Project-URL: Repository, https://github.com/jirikuncar/sqlty
|
|
33
34
|
|
|
@@ -56,13 +57,14 @@ migration that changes a column is caught in review, not in production.
|
|
|
56
57
|
(<a href="https://github.com/jirikuncar/sqlty/blob/main/docs/assets/demo.tape">view source</a>)
|
|
57
58
|
</p>
|
|
58
59
|
|
|
59
|
-
**Documentation: [
|
|
60
|
+
**Documentation: [sqlty.kuncar.dev](https://sqlty.kuncar.dev/)** ·
|
|
61
|
+
**Try it in your browser: [Playground](https://sqlty.kuncar.dev/playground/)**
|
|
60
62
|
|
|
61
63
|
**Fits if** you write SQL as string literals on Python 3.14+, against
|
|
62
64
|
PostgreSQL, SQLite or MySQL, with a schema dump or SQL migrations in the
|
|
63
65
|
repository. Rows are typed end to end with psycopg 3; with other drivers sqlty
|
|
64
66
|
checks the query and its parameters, and you annotate what the cursor returns
|
|
65
|
-
([Drivers](https://
|
|
67
|
+
([Drivers](https://sqlty.kuncar.dev/guide/drivers-and-orms/)).
|
|
66
68
|
|
|
67
69
|
> **Beta.** APIs and configuration may change before 1.0. Feedback welcome in
|
|
68
70
|
> [GitHub Issues](https://github.com/jirikuncar/sqlty/issues).
|
|
@@ -91,6 +93,8 @@ query = "--sql\nSELECT id, name, email FROM users"
|
|
|
91
93
|
# rewritten: query = SQL[tuple[int, str, str]]("--sql\nSELECT id, name, email FROM users")
|
|
92
94
|
```
|
|
93
95
|
|
|
96
|
+
[Open in playground](https://sqlty.kuncar.dev/playground/#eJw9jcsKwjAURH_lkpWFdiN0o7iI5arFPiRGsZBNSWMN9GGbdiHiv9tQdDGbM8OcNzHt2EtFVkC6UfUv2IAgnme6SojmjBEGHHThQpPXygVV57qCHUtjGI3qjSCiIS4QIx9TZU8ChpQjcLqNcN7AQhcQJhz3yODEwpiyDI6YzZ_A8cYhSadcouhnuFIWHChbLH3f-ZfO2qoKnVdKDtb1bM1Q9spYLNvmrktLyecL_GI_Gw)
|
|
97
|
+
|
|
94
98
|
`SQL[T]` is a `str` subclass, so the query still runs anywhere a string does,
|
|
95
99
|
and mypy, pyright and ty see `T`. Without a schema, casts such as `id::INTEGER`
|
|
96
100
|
type the columns; a query with neither stays as it is. With a space instead of
|
|
@@ -120,14 +124,16 @@ from sqlty import SQL
|
|
|
120
124
|
query = SQL[tuple[int, str]]("--sql\nSELECT id, email FROM users")
|
|
121
125
|
```
|
|
122
126
|
|
|
127
|
+
[Open in playground](https://sqlty.kuncar.dev/playground/#eJw1jUsOgjAURbfy0pEksAGNAyRPYwQ_pQMJdWCgYBNooS0DYty7NMbh_Z37JlZPphJkDaQxugc7dm4G2Q_aOMhvKVdcjZMwM2y9LN00dKKUyoVgnXk8VpxE0TLiXOWYYsJA1iGI_ik72NNLBpMVxnIScEVCILZ6LZl_SyjGDIHFuxR_JVjJGo5nhgekcKXHLKYFnLD44xjeWbDxlFo-O1E5jxm0da0R1tuVVo1svUs-X3IeRJA)
|
|
128
|
+
|
|
123
129
|
`sqlty check --fix .` updates the type, and your type checker finds every
|
|
124
130
|
caller that now needs a `None` check. `narrow-type` is an error, so CI fails on
|
|
125
131
|
it; an annotation that is only wider than the rows, such as `str | None` for a
|
|
126
132
|
column made `NOT NULL`, is a `stale-type` warning
|
|
127
|
-
([CI](https://
|
|
133
|
+
([CI](https://sqlty.kuncar.dev/recipes/ci/)). For rolling deploys,
|
|
128
134
|
`sqlty breaking --against origin/main` exits 1 when old code breaks on the new
|
|
129
135
|
schema or new code on the old one
|
|
130
|
-
([Breaking schema changes](https://
|
|
136
|
+
([Breaking schema changes](https://sqlty.kuncar.dev/guide/breaking-changes/)).
|
|
131
137
|
|
|
132
138
|
### A row type that doesn't match its query
|
|
133
139
|
|
|
@@ -144,7 +150,7 @@ query = SQL[User]("--sql\nSELECT id::INTEGER, name::TEXT FROM users")
|
|
|
144
150
|
```
|
|
145
151
|
|
|
146
152
|
`TypedDict`, `NamedTuple`, dataclasses and Pydantic models are all checked
|
|
147
|
-
([Row types](https://
|
|
153
|
+
([Row types](https://sqlty.kuncar.dev/guide/row-types/)).
|
|
148
154
|
|
|
149
155
|
### Wrong parameters, misspelled columns
|
|
150
156
|
|
|
@@ -176,11 +182,11 @@ conn.execute(SQL[tuple[str | None]]("--sql\nSELECT email FROM users WHERE id = ?
|
|
|
176
182
|
conn.execute("--sql\nSELECT emial FROM users")
|
|
177
183
|
```
|
|
178
184
|
|
|
179
|
-
`?`, `$1`, `%s` and `:name` placeholders are checked on sqlite3,
|
|
180
|
-
asyncpg calls ([Parameters](https://
|
|
185
|
+
`?`, `$1`, `%s` and `:name` placeholders are checked on sqlite3, aiosqlite,
|
|
186
|
+
psycopg and asyncpg calls ([Parameters](https://sqlty.kuncar.dev/guide/parameters/)).
|
|
181
187
|
These are the mistakes coding agents make: every problem is one
|
|
182
188
|
`file:line: [rule] message` line and a non-zero exit code they can act on, and
|
|
183
|
-
the [sqlty skills](https://
|
|
189
|
+
the [sqlty skills](https://sqlty.kuncar.dev/recipes/agents/) teach
|
|
184
190
|
them the conventions. In Claude Code, `/plugin install sqlty --marketplace jirikuncar/sqlty`
|
|
185
191
|
installs them.
|
|
186
192
|
|
|
@@ -196,13 +202,13 @@ sqlty strip . # undo: back to plain strings
|
|
|
196
202
|
|
|
197
203
|
`rewrite` and `strip` only touch the wrapper, never the SQL, so you can adopt
|
|
198
204
|
sqlty one module at a time and back out. New project:
|
|
199
|
-
[Quickstart](https://
|
|
200
|
-
[Migration](https://
|
|
205
|
+
[Quickstart](https://sqlty.kuncar.dev/quickstart/). Existing codebase:
|
|
206
|
+
[Migration](https://sqlty.kuncar.dev/recipes/migration/), starting
|
|
201
207
|
with `pg_dump --schema-only app > schema.sql`. In the editor:
|
|
202
|
-
[VS Code](https://
|
|
208
|
+
[VS Code](https://sqlty.kuncar.dev/recipes/vscode/).
|
|
203
209
|
|
|
204
210
|
Not a fit for ORMs, SQL built at runtime, or runtime validation;
|
|
205
|
-
[Why SQLTy?](https://
|
|
211
|
+
[Why SQLTy?](https://sqlty.kuncar.dev/motivation/) compares it with
|
|
206
212
|
sqlc, sqlx, PgTyped and others.
|
|
207
213
|
|
|
208
214
|
## About
|
|
@@ -213,6 +219,6 @@ developed with AI coding agents, mainly Claude Code; every change is reviewed by
|
|
|
213
219
|
a maintainer (see the
|
|
214
220
|
[AI-assisted contributions](https://github.com/jirikuncar/sqlty/blob/main/CONTRIBUTING.md#ai-assisted-contributions)
|
|
215
221
|
policy). [Contributing](https://github.com/jirikuncar/sqlty/blob/main/CONTRIBUTING.md) ·
|
|
216
|
-
[Credits](https://
|
|
222
|
+
[Credits](https://sqlty.kuncar.dev/credits/) ·
|
|
217
223
|
MIT [License](https://github.com/jirikuncar/sqlty/blob/main/LICENSE).
|
|
218
224
|
|
|
@@ -23,13 +23,14 @@ migration that changes a column is caught in review, not in production.
|
|
|
23
23
|
(<a href="https://github.com/jirikuncar/sqlty/blob/main/docs/assets/demo.tape">view source</a>)
|
|
24
24
|
</p>
|
|
25
25
|
|
|
26
|
-
**Documentation: [
|
|
26
|
+
**Documentation: [sqlty.kuncar.dev](https://sqlty.kuncar.dev/)** ·
|
|
27
|
+
**Try it in your browser: [Playground](https://sqlty.kuncar.dev/playground/)**
|
|
27
28
|
|
|
28
29
|
**Fits if** you write SQL as string literals on Python 3.14+, against
|
|
29
30
|
PostgreSQL, SQLite or MySQL, with a schema dump or SQL migrations in the
|
|
30
31
|
repository. Rows are typed end to end with psycopg 3; with other drivers sqlty
|
|
31
32
|
checks the query and its parameters, and you annotate what the cursor returns
|
|
32
|
-
([Drivers](https://
|
|
33
|
+
([Drivers](https://sqlty.kuncar.dev/guide/drivers-and-orms/)).
|
|
33
34
|
|
|
34
35
|
> **Beta.** APIs and configuration may change before 1.0. Feedback welcome in
|
|
35
36
|
> [GitHub Issues](https://github.com/jirikuncar/sqlty/issues).
|
|
@@ -58,6 +59,8 @@ query = "--sql\nSELECT id, name, email FROM users"
|
|
|
58
59
|
# rewritten: query = SQL[tuple[int, str, str]]("--sql\nSELECT id, name, email FROM users")
|
|
59
60
|
```
|
|
60
61
|
|
|
62
|
+
[Open in playground](https://sqlty.kuncar.dev/playground/#eJw9jcsKwjAURH_lkpWFdiN0o7iI5arFPiRGsZBNSWMN9GGbdiHiv9tQdDGbM8OcNzHt2EtFVkC6UfUv2IAgnme6SojmjBEGHHThQpPXygVV57qCHUtjGI3qjSCiIS4QIx9TZU8ChpQjcLqNcN7AQhcQJhz3yODEwpiyDI6YzZ_A8cYhSadcouhnuFIWHChbLH3f-ZfO2qoKnVdKDtb1bM1Q9spYLNvmrktLyecL_GI_Gw)
|
|
63
|
+
|
|
61
64
|
`SQL[T]` is a `str` subclass, so the query still runs anywhere a string does,
|
|
62
65
|
and mypy, pyright and ty see `T`. Without a schema, casts such as `id::INTEGER`
|
|
63
66
|
type the columns; a query with neither stays as it is. With a space instead of
|
|
@@ -87,14 +90,16 @@ from sqlty import SQL
|
|
|
87
90
|
query = SQL[tuple[int, str]]("--sql\nSELECT id, email FROM users")
|
|
88
91
|
```
|
|
89
92
|
|
|
93
|
+
[Open in playground](https://sqlty.kuncar.dev/playground/#eJw1jUsOgjAURbfy0pEksAGNAyRPYwQ_pQMJdWCgYBNooS0DYty7NMbh_Z37JlZPphJkDaQxugc7dm4G2Q_aOMhvKVdcjZMwM2y9LN00dKKUyoVgnXk8VpxE0TLiXOWYYsJA1iGI_ik72NNLBpMVxnIScEVCILZ6LZl_SyjGDIHFuxR_JVjJGo5nhgekcKXHLKYFnLD44xjeWbDxlFo-O1E5jxm0da0R1tuVVo1svUs-X3IeRJA)
|
|
94
|
+
|
|
90
95
|
`sqlty check --fix .` updates the type, and your type checker finds every
|
|
91
96
|
caller that now needs a `None` check. `narrow-type` is an error, so CI fails on
|
|
92
97
|
it; an annotation that is only wider than the rows, such as `str | None` for a
|
|
93
98
|
column made `NOT NULL`, is a `stale-type` warning
|
|
94
|
-
([CI](https://
|
|
99
|
+
([CI](https://sqlty.kuncar.dev/recipes/ci/)). For rolling deploys,
|
|
95
100
|
`sqlty breaking --against origin/main` exits 1 when old code breaks on the new
|
|
96
101
|
schema or new code on the old one
|
|
97
|
-
([Breaking schema changes](https://
|
|
102
|
+
([Breaking schema changes](https://sqlty.kuncar.dev/guide/breaking-changes/)).
|
|
98
103
|
|
|
99
104
|
### A row type that doesn't match its query
|
|
100
105
|
|
|
@@ -111,7 +116,7 @@ query = SQL[User]("--sql\nSELECT id::INTEGER, name::TEXT FROM users")
|
|
|
111
116
|
```
|
|
112
117
|
|
|
113
118
|
`TypedDict`, `NamedTuple`, dataclasses and Pydantic models are all checked
|
|
114
|
-
([Row types](https://
|
|
119
|
+
([Row types](https://sqlty.kuncar.dev/guide/row-types/)).
|
|
115
120
|
|
|
116
121
|
### Wrong parameters, misspelled columns
|
|
117
122
|
|
|
@@ -143,11 +148,11 @@ conn.execute(SQL[tuple[str | None]]("--sql\nSELECT email FROM users WHERE id = ?
|
|
|
143
148
|
conn.execute("--sql\nSELECT emial FROM users")
|
|
144
149
|
```
|
|
145
150
|
|
|
146
|
-
`?`, `$1`, `%s` and `:name` placeholders are checked on sqlite3,
|
|
147
|
-
asyncpg calls ([Parameters](https://
|
|
151
|
+
`?`, `$1`, `%s` and `:name` placeholders are checked on sqlite3, aiosqlite,
|
|
152
|
+
psycopg and asyncpg calls ([Parameters](https://sqlty.kuncar.dev/guide/parameters/)).
|
|
148
153
|
These are the mistakes coding agents make: every problem is one
|
|
149
154
|
`file:line: [rule] message` line and a non-zero exit code they can act on, and
|
|
150
|
-
the [sqlty skills](https://
|
|
155
|
+
the [sqlty skills](https://sqlty.kuncar.dev/recipes/agents/) teach
|
|
151
156
|
them the conventions. In Claude Code, `/plugin install sqlty --marketplace jirikuncar/sqlty`
|
|
152
157
|
installs them.
|
|
153
158
|
|
|
@@ -163,13 +168,13 @@ sqlty strip . # undo: back to plain strings
|
|
|
163
168
|
|
|
164
169
|
`rewrite` and `strip` only touch the wrapper, never the SQL, so you can adopt
|
|
165
170
|
sqlty one module at a time and back out. New project:
|
|
166
|
-
[Quickstart](https://
|
|
167
|
-
[Migration](https://
|
|
171
|
+
[Quickstart](https://sqlty.kuncar.dev/quickstart/). Existing codebase:
|
|
172
|
+
[Migration](https://sqlty.kuncar.dev/recipes/migration/), starting
|
|
168
173
|
with `pg_dump --schema-only app > schema.sql`. In the editor:
|
|
169
|
-
[VS Code](https://
|
|
174
|
+
[VS Code](https://sqlty.kuncar.dev/recipes/vscode/).
|
|
170
175
|
|
|
171
176
|
Not a fit for ORMs, SQL built at runtime, or runtime validation;
|
|
172
|
-
[Why SQLTy?](https://
|
|
177
|
+
[Why SQLTy?](https://sqlty.kuncar.dev/motivation/) compares it with
|
|
173
178
|
sqlc, sqlx, PgTyped and others.
|
|
174
179
|
|
|
175
180
|
## About
|
|
@@ -180,5 +185,5 @@ developed with AI coding agents, mainly Claude Code; every change is reviewed by
|
|
|
180
185
|
a maintainer (see the
|
|
181
186
|
[AI-assisted contributions](https://github.com/jirikuncar/sqlty/blob/main/CONTRIBUTING.md#ai-assisted-contributions)
|
|
182
187
|
policy). [Contributing](https://github.com/jirikuncar/sqlty/blob/main/CONTRIBUTING.md) ·
|
|
183
|
-
[Credits](https://
|
|
188
|
+
[Credits](https://sqlty.kuncar.dev/credits/) ·
|
|
184
189
|
MIT [License](https://github.com/jirikuncar/sqlty/blob/main/LICENSE).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sqlty"
|
|
3
3
|
dynamic = ["version"]
|
|
4
|
-
description = "Type-safe SQL
|
|
4
|
+
description = "Type-safe raw SQL for Python: row and parameter types inferred from your SQL and schema, no ORM or database needed"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.14"
|
|
7
7
|
license = "MIT"
|
|
@@ -9,11 +9,22 @@ license-files = ["LICENSE"]
|
|
|
9
9
|
authors = [{ name = "Jiri Kuncar", email = "jiri.kuncar@gmail.com" }]
|
|
10
10
|
keywords = [
|
|
11
11
|
"sql",
|
|
12
|
-
"
|
|
13
|
-
"mypy",
|
|
12
|
+
"raw-sql",
|
|
14
13
|
"type-safety",
|
|
14
|
+
"type-checking",
|
|
15
|
+
"type-hints",
|
|
15
16
|
"static-analysis",
|
|
17
|
+
"linter",
|
|
18
|
+
"mypy",
|
|
19
|
+
"pyright",
|
|
20
|
+
"ty",
|
|
21
|
+
"postgresql",
|
|
22
|
+
"sqlite",
|
|
23
|
+
"mysql",
|
|
24
|
+
"psycopg",
|
|
25
|
+
"migrations",
|
|
16
26
|
"code-generation",
|
|
27
|
+
"orm-alternative",
|
|
17
28
|
]
|
|
18
29
|
classifiers = [
|
|
19
30
|
"Development Status :: 4 - Beta",
|
|
@@ -27,6 +38,7 @@ classifiers = [
|
|
|
27
38
|
"Programming Language :: SQL",
|
|
28
39
|
"Topic :: Software Development :: Code Generators",
|
|
29
40
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
41
|
+
"Topic :: Software Development :: Quality Assurance",
|
|
30
42
|
"Topic :: Database",
|
|
31
43
|
"Typing :: Typed",
|
|
32
44
|
]
|
|
@@ -36,8 +48,8 @@ dependencies = [
|
|
|
36
48
|
]
|
|
37
49
|
|
|
38
50
|
[project.urls]
|
|
39
|
-
Homepage = "https://
|
|
40
|
-
Documentation = "https://
|
|
51
|
+
Homepage = "https://sqlty.kuncar.dev/"
|
|
52
|
+
Documentation = "https://sqlty.kuncar.dev/"
|
|
41
53
|
Repository = "https://github.com/jirikuncar/sqlty"
|
|
42
54
|
Changelog = "https://github.com/jirikuncar/sqlty/releases"
|
|
43
55
|
Issues = "https://github.com/jirikuncar/sqlty/issues"
|
|
@@ -45,11 +57,14 @@ Issues = "https://github.com/jirikuncar/sqlty/issues"
|
|
|
45
57
|
[project.scripts]
|
|
46
58
|
sqlty = "sqlty._cli:main"
|
|
47
59
|
|
|
60
|
+
[project.entry-points."pygments.lexers"]
|
|
61
|
+
sqlty = "sqlty.lexer:SQLTyLexer"
|
|
62
|
+
|
|
48
63
|
[project.optional-dependencies]
|
|
49
64
|
psycopg = ["psycopg>=3.2.12"]
|
|
50
65
|
|
|
51
66
|
[build-system]
|
|
52
|
-
requires = ["maturin>=1.
|
|
67
|
+
requires = ["maturin>=1.15,<2.0"]
|
|
53
68
|
build-backend = "maturin"
|
|
54
69
|
|
|
55
70
|
[tool.maturin]
|
|
@@ -67,7 +82,7 @@ include = ["src/sqlty_magic.pth", { path = "skills/**/*", format = "sdist" }]
|
|
|
67
82
|
[dependency-groups]
|
|
68
83
|
dev = [
|
|
69
84
|
"inline-snapshot>=0.15.0",
|
|
70
|
-
"maturin>=1.
|
|
85
|
+
"maturin>=1.15,<2.0",
|
|
71
86
|
"mypy>=2.4.0",
|
|
72
87
|
"prek>=0.5.4",
|
|
73
88
|
"pyright>=1.1.414",
|
|
@@ -83,11 +98,14 @@ dev = [
|
|
|
83
98
|
"pydantic[email]>=2.14.1",
|
|
84
99
|
"jsonschema>=4.26.0",
|
|
85
100
|
"pytest-xdist>=3.8.0",
|
|
101
|
+
"types-pygments>=2.19",
|
|
86
102
|
]
|
|
87
103
|
cli = ["rich>=15.0.0"]
|
|
88
104
|
# Only the DuckDB type tests need it, and it has no wheel for every Python.
|
|
89
105
|
duckdb = ["duckdb>=1.4.0"]
|
|
90
106
|
psycopg = ["psycopg>=3.2.12"]
|
|
107
|
+
# The aiosqlite calls sqlty checks, run against aiosqlite (tests/test_aiosqlite.py).
|
|
108
|
+
aiosqlite = ["aiosqlite>=0.22.1"]
|
|
91
109
|
fuzz = [
|
|
92
110
|
"hypothesis>=6.140",
|
|
93
111
|
]
|
|
@@ -112,7 +130,7 @@ markers = [
|
|
|
112
130
|
concurrency = ["multiprocessing"]
|
|
113
131
|
parallel = true
|
|
114
132
|
sigterm = true
|
|
115
|
-
patch = ["subprocess"]
|
|
133
|
+
patch = ["subprocess", "_exit"]
|
|
116
134
|
omit = ["tests/*", "examples/*"]
|
|
117
135
|
|
|
118
136
|
[tool.coverage.paths]
|