sqlty 0.3.0__tar.gz → 0.5.1__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.
Files changed (307) hide show
  1. {sqlty-0.3.0 → sqlty-0.5.1}/PKG-INFO +25 -19
  2. {sqlty-0.3.0 → sqlty-0.5.1}/README.md +19 -14
  3. {sqlty-0.3.0 → sqlty-0.5.1}/pyproject.toml +31 -7
  4. {sqlty-0.3.0 → sqlty-0.5.1}/rust/Cargo.lock +557 -12
  5. {sqlty-0.3.0 → sqlty-0.5.1}/rust/Cargo.toml +10 -2
  6. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-ext/Cargo.toml +2 -0
  7. sqlty-0.5.1/rust/crates/sqlty-ext/src/config.rs +132 -0
  8. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-ext/src/lib.rs +480 -24
  9. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-ext/src/server.rs +37 -1
  10. sqlty-0.5.1/rust/crates/sqlty-format/Cargo.toml +19 -0
  11. sqlty-0.5.1/rust/crates/sqlty-format/src/lib.rs +269 -0
  12. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-lsp/Cargo.toml +4 -1
  13. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-lsp/src/actions.rs +7 -7
  14. sqlty-0.5.1/rust/crates/sqlty-lsp/src/completion.rs +154 -0
  15. sqlty-0.5.1/rust/crates/sqlty-lsp/src/highlight.rs +100 -0
  16. sqlty-0.5.1/rust/crates/sqlty-lsp/src/hover.rs +41 -0
  17. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-lsp/src/lib.rs +218 -45
  18. sqlty-0.5.1/rust/crates/sqlty-lsp/src/tests.rs +905 -0
  19. sqlty-0.5.1/rust/crates/sqlty-lsp/src/uri.rs +33 -0
  20. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-lsp/src/worker.rs +41 -23
  21. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-python/Cargo.toml +1 -0
  22. sqlty-0.5.1/rust/crates/sqlty-python/clippy.toml +34 -0
  23. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-python/src/checker.rs +171 -56
  24. sqlty-0.5.1/rust/crates/sqlty-python/src/config.rs +596 -0
  25. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-python/src/lib.rs +8 -0
  26. sqlty-0.5.1/rust/crates/sqlty-python/src/locate.rs +532 -0
  27. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-python/src/options.rs +3 -0
  28. sqlty-0.5.1/rust/crates/sqlty-python/src/params.rs +483 -0
  29. sqlty-0.5.1/rust/crates/sqlty-python/src/queries.rs +359 -0
  30. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-python/src/rewriter.rs +67 -13
  31. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-python/src/rules.rs +24 -5
  32. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-python/src/scan.rs +49 -2
  33. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-python/src/tokens.rs +13 -4
  34. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/build.rs +2 -0
  35. sqlty-0.5.1/rust/crates/sqlty-sql/clippy.toml +34 -0
  36. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/README.md +8 -6
  37. sqlty-0.5.1/rust/crates/sqlty-sql/rules/common/aggregates.inference.toml +111 -0
  38. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/common/arithmetic.inference.toml +9 -6
  39. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/common/comparison.inference.toml +10 -5
  40. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/common/concat.inference.toml +6 -4
  41. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/common/conditional.inference.toml +4 -2
  42. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/common/datetime.inference.toml +3 -3
  43. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/common/json.inference.toml +11 -9
  44. sqlty-0.5.1/rust/crates/sqlty-sql/rules/common/math.inference.toml +21 -0
  45. sqlty-0.5.1/rust/crates/sqlty-sql/rules/common/strings.inference.toml +35 -0
  46. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/common/window.inference.toml +11 -5
  47. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/compile.rs +44 -7
  48. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/aggregates.inference.toml +5 -5
  49. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/arithmetic.inference.toml +13 -13
  50. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/bits.inference.toml +1 -1
  51. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/comparison.inference.toml +3 -3
  52. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/concat.inference.toml +1 -1
  53. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/conditional.inference.toml +2 -2
  54. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/datetime.inference.toml +15 -15
  55. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/encryption.inference.toml +5 -5
  56. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/json.inference.toml +11 -11
  57. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/math.inference.toml +9 -9
  58. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/misc.inference.toml +12 -12
  59. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/spatial.inference.toml +13 -13
  60. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/strings.inference.toml +24 -24
  61. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/mysql/system.inference.toml +13 -13
  62. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/admin.inference.toml +16 -16
  63. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/aggregates.inference.toml +19 -19
  64. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/arithmetic.inference.toml +54 -54
  65. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/arrays.inference.toml +13 -13
  66. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/binary.inference.toml +5 -5
  67. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/comparison.inference.toml +2 -2
  68. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/concat.inference.toml +7 -7
  69. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/conditional.inference.toml +1 -1
  70. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/datetime.inference.toml +14 -14
  71. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/enums.inference.toml +2 -2
  72. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/events.inference.toml +2 -2
  73. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/extensions.inference.toml +3 -3
  74. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/formatting.inference.toml +3 -3
  75. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/geometry.inference.toml +19 -19
  76. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/json.inference.toml +27 -27
  77. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/math.inference.toml +10 -10
  78. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/merge.inference.toml +1 -1
  79. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/network.inference.toml +7 -7
  80. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/ranges.inference.toml +15 -15
  81. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/rows.inference.toml +1 -1
  82. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/sequences.inference.toml +1 -1
  83. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/series.inference.toml +2 -2
  84. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/strings.inference.toml +11 -11
  85. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/system.inference.toml +39 -39
  86. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/textsearch.inference.toml +17 -17
  87. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/uuid.inference.toml +3 -3
  88. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/postgres/xml.inference.toml +6 -6
  89. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/sqlite/aggregates.inference.toml +3 -3
  90. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/sqlite/arithmetic.inference.toml +5 -5
  91. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/sqlite/bitwise.inference.toml +2 -2
  92. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/sqlite/datetime.inference.toml +4 -4
  93. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/sqlite/fts.inference.toml +4 -4
  94. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/sqlite/json.inference.toml +11 -11
  95. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/sqlite/math.inference.toml +4 -4
  96. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/sqlite/scalar.inference.toml +10 -10
  97. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/sqlite/strings.inference.toml +1 -1
  98. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/api.rs +23 -0
  99. sqlty-0.5.1/rust/crates/sqlty-sql/src/analyzer/complete.rs +969 -0
  100. sqlty-0.5.1/rust/crates/sqlty-sql/src/analyzer/databases.rs +195 -0
  101. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/dialect.rs +5 -0
  102. sqlty-0.5.1/rust/crates/sqlty-sql/src/analyzer/entities.rs +194 -0
  103. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/explain.rs +5 -3
  104. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/expr.rs +11 -5
  105. sqlty-0.5.1/rust/crates/sqlty-sql/src/analyzer/fanout.rs +612 -0
  106. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/grouping.rs +1 -1
  107. sqlty-0.5.1/rust/crates/sqlty-sql/src/analyzer/hover.rs +428 -0
  108. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/inference.rs +55 -5
  109. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/input.rs +35 -2
  110. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/mod.rs +18 -3
  111. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/narrowing.rs +40 -0
  112. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/nullability.rs +93 -8
  113. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/params.rs +1 -0
  114. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/preprocess.rs +44 -1
  115. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/query.rs +7 -1
  116. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/resolve.rs +40 -0
  117. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/respell.rs +29 -1
  118. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/scope.rs +21 -0
  119. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__literals_and_unary_operators.snap +1 -1
  120. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/sql_type.rs +1 -0
  121. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/star_expand.rs +1 -0
  122. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/tests.rs +31 -0
  123. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/catalog/alter.rs +26 -2
  124. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/catalog/columns.rs +21 -1
  125. sqlty-0.5.1/rust/crates/sqlty-sql/src/catalog/index.rs +531 -0
  126. sqlty-0.5.1/rust/crates/sqlty-sql/src/catalog/joins.rs +106 -0
  127. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/catalog/loader.rs +57 -3
  128. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/catalog/mod.rs +119 -6
  129. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/catalog/names.rs +8 -5
  130. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/catalog/read.rs +58 -5
  131. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/catalog/resolve.rs +50 -19
  132. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/ddl.rs +16 -1
  133. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/diagnostics.rs +36 -1
  134. sqlty-0.5.1/rust/crates/sqlty-sql/src/highlight.rs +370 -0
  135. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/lib.rs +3 -1
  136. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/placeholders.rs +48 -23
  137. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/tests/inference_compiler.rs +7 -3
  138. {sqlty-0.3.0 → sqlty-0.5.1}/skills/sqlty/SKILL.md +8 -8
  139. {sqlty-0.3.0 → sqlty-0.5.1}/skills/sqlty-adopt/SKILL.md +12 -7
  140. {sqlty-0.3.0 → sqlty-0.5.1}/skills/sqlty-breaking/SKILL.md +2 -2
  141. {sqlty-0.3.0 → sqlty-0.5.1}/skills/sqlty-check/SKILL.md +52 -9
  142. {sqlty-0.3.0 → sqlty-0.5.1}/skills/sqlty-ci/SKILL.md +7 -6
  143. {sqlty-0.3.0 → sqlty-0.5.1}/skills/sqlty-rewrite/SKILL.md +4 -4
  144. {sqlty-0.3.0 → sqlty-0.5.1}/skills/sqlty-server/SKILL.md +21 -7
  145. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_breaking.py +121 -33
  146. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_check.py +145 -26
  147. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_cli.py +389 -31
  148. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_config.py +187 -271
  149. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_core.pyi +87 -2
  150. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_decode.py +1 -1
  151. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_drivers.py +151 -43
  152. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_helpers.py +118 -45
  153. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_json_types.py +0 -10
  154. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_lint.py +45 -3
  155. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_lsp_breaking.py +2 -0
  156. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_lsp_bridge.py +39 -3
  157. sqlty-0.5.1/src/sqlty/_queries.py +125 -0
  158. sqlty-0.5.1/src/sqlty/_sarif.py +74 -0
  159. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_snapshot.py +24 -7
  160. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_source.py +25 -8
  161. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_type_extractor/extract.py +8 -1
  162. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_type_extractor/subtype.py +5 -0
  163. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_variants.py +20 -0
  164. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/core.py +283 -16
  165. sqlty-0.5.1/src/sqlty/lexer.py +74 -0
  166. sqlty-0.5.1/src/sqlty/rules/chasm-join.md +76 -0
  167. sqlty-0.5.1/src/sqlty/rules/entity-mismatch.md +66 -0
  168. sqlty-0.5.1/src/sqlty/rules/fanout-aggregate.md +101 -0
  169. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/param-count-mismatch.md +7 -4
  170. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/param-type-mismatch.md +9 -6
  171. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/select-star.md +2 -1
  172. sqlty-0.5.1/src/sqlty/rules/sqruff.md +56 -0
  173. sqlty-0.5.1/src/sqlty/rules/stale-rewrite.md +58 -0
  174. sqlty-0.5.1/src/sqlty/rules/unknown-database.md +30 -0
  175. sqlty-0.5.1/src/sqlty/rules/unproven-join.md +55 -0
  176. sqlty-0.3.0/rust/crates/sqlty-lsp/src/tests.rs +0 -436
  177. sqlty-0.3.0/rust/crates/sqlty-sql/rules/common/aggregates.inference.toml +0 -101
  178. sqlty-0.3.0/rust/crates/sqlty-sql/rules/common/math.inference.toml +0 -17
  179. sqlty-0.3.0/rust/crates/sqlty-sql/rules/common/strings.inference.toml +0 -33
  180. sqlty-0.3.0/src/sqlty/_param_types.py +0 -141
  181. sqlty-0.3.0/src/sqlty/rules/stale-rewrite.md +0 -33
  182. {sqlty-0.3.0 → sqlty-0.5.1}/LICENSE +0 -0
  183. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-ext/build.rs +0 -0
  184. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-lsp/src/text.rs +0 -0
  185. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-python/src/edit.rs +0 -0
  186. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-python/src/fixer.rs +0 -0
  187. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-python/src/template.rs +0 -0
  188. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/Cargo.toml +0 -0
  189. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/rules/dialects.toml +0 -0
  190. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/dml.rs +0 -0
  191. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/functions.rs +0 -0
  192. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/hashing.rs +0 -0
  193. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/json.rs +0 -0
  194. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/literals.rs +0 -0
  195. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/memo.rs +0 -0
  196. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/merged_star.rs +0 -0
  197. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/names.rs +0 -0
  198. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/operators.rs +0 -0
  199. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/pg_record_functions.rs +0 -0
  200. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/planner_hints.sql +0 -0
  201. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/references.rs +0 -0
  202. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/registry.rs +0 -0
  203. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__dml__tests__returning_columns_in_queries.snap +0 -0
  204. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__arrays_and_subscripts.snap +0 -0
  205. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__case_expressions.snap +0 -0
  206. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__casts.snap +0 -0
  207. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__casts_without_a_schema_do_not_complain.snap +0 -0
  208. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__composite_fields_and_json_access.snap +0 -0
  209. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__misc_expressions.snap +0 -0
  210. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__mysql_and_sqlite_expressions.snap +0 -0
  211. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__aggregates_in_postgres.snap +0 -0
  212. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__function_availability_differs_by_dialect.snap +0 -0
  213. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__return_types_follow_the_argument.snap +0 -0
  214. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__unknown_functions_are_untyped_and_explained.snap +0 -0
  215. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__literals__tests__value_sets_flow_through_expressions.snap +0 -0
  216. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__names__tests__column_names_follow_postgres_figure_colname.snap +0 -0
  217. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__arithmetic_promotes_numbers_and_types_date_math.snap +0 -0
  218. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__binary_operators_in_queries.snap +0 -0
  219. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__common_type_follows_postgres_union_rules.snap +0 -0
  220. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__division_differs_between_postgres_and_mysql.snap +0 -0
  221. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__column_names_come_from_the_first_branch.snap +0 -0
  222. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__ctes.snap +0 -0
  223. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__dialects_name_and_type_the_same_query_differently.snap +0 -0
  224. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__projection_forms.snap +0 -0
  225. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__recursive_ctes_settle_nullability.snap +0 -0
  226. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__set_operations_combine_nullability.snap +0 -0
  227. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__set_operations_unify_types.snap +0 -0
  228. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__statements_that_are_not_queries_have_no_columns.snap +0 -0
  229. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__unsupported_query_forms_are_explained.snap +0 -0
  230. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__values_lists.snap +0 -0
  231. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__ambiguous_names_are_reported_once_per_query.snap +0 -0
  232. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__cte_columns_are_resolved_like_tables.snap +0 -0
  233. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__names_are_not_judged_without_a_schema.snap +0 -0
  234. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__nullability_comes_from_the_declaration.snap +0 -0
  235. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__quoted_names_keep_their_case_in_postgres_only.snap +0 -0
  236. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__star_over_unreadable_sources_names_the_reason.snap +0 -0
  237. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__system_columns_exist_without_being_declared.snap +0 -0
  238. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__unknown_names_say_what_is_missing.snap +0 -0
  239. {sqlty-0.3.0 → sqlty-0.5.1}/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
  240. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__correlated_subqueries_see_the_outer_scope.snap +0 -0
  241. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__derived_tables_ctes_and_views.snap +0 -0
  242. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__nullability_follows_the_join_kind.snap +0 -0
  243. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__opaque_sources_explain_themselves.snap +0 -0
  244. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__star_expansion_over_joins.snap +0 -0
  245. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__table_names_fold_by_dialect.snap +0 -0
  246. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/suggest.rs +0 -0
  247. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/table_functions.rs +0 -0
  248. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/test_support.rs +0 -0
  249. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/text_names.rs +0 -0
  250. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/tokens.rs +0 -0
  251. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/analyzer/typed.rs +0 -0
  252. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/catalog/builtin_catalog.sql +0 -0
  253. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/catalog/pg_catalog_views.sql +0 -0
  254. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/json.rs +0 -0
  255. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/src/values.rs +0 -0
  256. {sqlty-0.3.0 → sqlty-0.5.1}/rust/crates/sqlty-sql/tests/timing.rs +0 -0
  257. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/__init__.py +0 -0
  258. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/__main__.py +0 -0
  259. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_gitignore.py +0 -0
  260. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_json_shape.py +0 -0
  261. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_params.py +0 -0
  262. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_psycopg.py +0 -0
  263. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_type_extractor/__init__.py +0 -0
  264. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_type_extractor/_stdlib.py +0 -0
  265. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_type_extractor/ast_fields.py +0 -0
  266. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_type_extractor/compat.py +0 -0
  267. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_type_extractor/generic.py +0 -0
  268. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_type_extractor/info.py +0 -0
  269. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_type_extractor/pydantic_types.py +0 -0
  270. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_type_extractor/stdlib.py +0 -0
  271. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/_type_extractor/symbols.py +0 -0
  272. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/drivers/psycopg.py +0 -0
  273. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/magic.py +0 -0
  274. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/py.typed +0 -0
  275. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/ambiguous-column.md +0 -0
  276. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/column-count-mismatch.md +0 -0
  277. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/column-name-mismatch.md +0 -0
  278. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/column-type-mismatch.md +0 -0
  279. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/dynamic-query.md +0 -0
  280. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/fstring-skipped.md +0 -0
  281. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/inline-sql-comment.md +0 -0
  282. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/insert-missing-column.md +0 -0
  283. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/insert-value-count.md +0 -0
  284. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/json-shape-mismatch.md +0 -0
  285. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/literal-mismatch.md +0 -0
  286. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/mysql-sql-marker.md +0 -0
  287. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/narrow-type.md +0 -0
  288. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/nullable-mismatch.md +0 -0
  289. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/params-type-mismatch.md +0 -0
  290. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/redundant-literal.md +0 -0
  291. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/redundant-optional.md +0 -0
  292. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/select-star-no-schema.md +0 -0
  293. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/stale-type.md +0 -0
  294. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/tstring-skipped.md +0 -0
  295. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/typeddict-inheritance.md +0 -0
  296. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/typeddict-key-mismatch.md +0 -0
  297. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/unchecked-query.md +0 -0
  298. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/ungrouped-column.md +0 -0
  299. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/unknown-column.md +0 -0
  300. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/unknown-function.md +0 -0
  301. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/unknown-table.md +0 -0
  302. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/unknown-type.md +0 -0
  303. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/unparsed-query.md +0 -0
  304. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/unsupported-syntax.md +0 -0
  305. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/untyped-query.md +0 -0
  306. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty/rules/unused-ignore.md +0 -0
  307. {sqlty-0.3.0 → sqlty-0.5.1}/src/sqlty_magic.pth +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlty
3
- Version: 0.3.0
3
+ Version: 0.5.1
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,19 +20,24 @@ 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 queries for Python
23
- Keywords: sql,type-hints,mypy,type-safety,static-analysis,code-generation
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://jirikuncar.github.io/sqlty/
30
- Project-URL: Homepage, https://github.com/jirikuncar/sqlty
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
 
34
- # SQLTy
35
+ <h1>
36
+ <picture>
37
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jirikuncar/sqlty/main/docs/assets/sqlty-wordmark-dark.svg">
38
+ <img src="https://raw.githubusercontent.com/jirikuncar/sqlty/main/docs/assets/sqlty-wordmark-light.svg" alt="SQLTy" width="300">
39
+ </picture>
40
+ </h1>
35
41
 
36
42
  [![PyPI](https://img.shields.io/pypi/v/sqlty.svg)](https://pypi.org/project/sqlty/)
37
43
  [![Python 3.14+](https://img.shields.io/badge/python-3.14+-blue.svg)](https://www.python.org/downloads/)
@@ -51,13 +57,13 @@ migration that changes a column is caught in review, not in production.
51
57
  (<a href="https://github.com/jirikuncar/sqlty/blob/main/docs/assets/demo.tape">view source</a>)
52
58
  </p>
53
59
 
54
- **Documentation: [jirikuncar.github.io/sqlty](https://jirikuncar.github.io/sqlty/)**
60
+ **Documentation: [sqlty.kuncar.dev](https://sqlty.kuncar.dev/)**
55
61
 
56
62
  **Fits if** you write SQL as string literals on Python 3.14+, against
57
63
  PostgreSQL, SQLite or MySQL, with a schema dump or SQL migrations in the
58
64
  repository. Rows are typed end to end with psycopg 3; with other drivers sqlty
59
65
  checks the query and its parameters, and you annotate what the cursor returns
60
- ([Drivers](https://jirikuncar.github.io/sqlty/guide/drivers-and-orms/)).
66
+ ([Drivers](https://sqlty.kuncar.dev/guide/drivers-and-orms/)).
61
67
 
62
68
  > **Beta.** APIs and configuration may change before 1.0. Feedback welcome in
63
69
  > [GitHub Issues](https://github.com/jirikuncar/sqlty/issues).
@@ -119,10 +125,10 @@ query = SQL[tuple[int, str]]("--sql\nSELECT id, email FROM users")
119
125
  caller that now needs a `None` check. `narrow-type` is an error, so CI fails on
120
126
  it; an annotation that is only wider than the rows, such as `str | None` for a
121
127
  column made `NOT NULL`, is a `stale-type` warning
122
- ([CI](https://jirikuncar.github.io/sqlty/recipes/ci/)). For rolling deploys,
128
+ ([CI](https://sqlty.kuncar.dev/recipes/ci/)). For rolling deploys,
123
129
  `sqlty breaking --against origin/main` exits 1 when old code breaks on the new
124
130
  schema or new code on the old one
125
- ([Breaking schema changes](https://jirikuncar.github.io/sqlty/guide/breaking-changes/)).
131
+ ([Breaking schema changes](https://sqlty.kuncar.dev/guide/breaking-changes/)).
126
132
 
127
133
  ### A row type that doesn't match its query
128
134
 
@@ -139,7 +145,7 @@ query = SQL[User]("--sql\nSELECT id::INTEGER, name::TEXT FROM users")
139
145
  ```
140
146
 
141
147
  `TypedDict`, `NamedTuple`, dataclasses and Pydantic models are all checked
142
- ([Row types](https://jirikuncar.github.io/sqlty/guide/row-types/)).
148
+ ([Row types](https://sqlty.kuncar.dev/guide/row-types/)).
143
149
 
144
150
  ### Wrong parameters, misspelled columns
145
151
 
@@ -171,11 +177,11 @@ conn.execute(SQL[tuple[str | None]]("--sql\nSELECT email FROM users WHERE id = ?
171
177
  conn.execute("--sql\nSELECT emial FROM users")
172
178
  ```
173
179
 
174
- `?`, `$1`, `%s` and `:name` placeholders are checked on sqlite3, psycopg and
175
- asyncpg calls ([Parameters](https://jirikuncar.github.io/sqlty/guide/parameters/)).
180
+ `?`, `$1`, `%s` and `:name` placeholders are checked on sqlite3, aiosqlite,
181
+ psycopg and asyncpg calls ([Parameters](https://sqlty.kuncar.dev/guide/parameters/)).
176
182
  These are the mistakes coding agents make: every problem is one
177
183
  `file:line: [rule] message` line and a non-zero exit code they can act on, and
178
- the [sqlty skills](https://jirikuncar.github.io/sqlty/recipes/agents/) teach
184
+ the [sqlty skills](https://sqlty.kuncar.dev/recipes/agents/) teach
179
185
  them the conventions. In Claude Code, `/plugin install sqlty --marketplace jirikuncar/sqlty`
180
186
  installs them.
181
187
 
@@ -191,13 +197,13 @@ sqlty strip . # undo: back to plain strings
191
197
 
192
198
  `rewrite` and `strip` only touch the wrapper, never the SQL, so you can adopt
193
199
  sqlty one module at a time and back out. New project:
194
- [Quickstart](https://jirikuncar.github.io/sqlty/quickstart/). Existing codebase:
195
- [Migration](https://jirikuncar.github.io/sqlty/recipes/migration/), starting
200
+ [Quickstart](https://sqlty.kuncar.dev/quickstart/). Existing codebase:
201
+ [Migration](https://sqlty.kuncar.dev/recipes/migration/), starting
196
202
  with `pg_dump --schema-only app > schema.sql`. In the editor:
197
- [VS Code](https://jirikuncar.github.io/sqlty/recipes/vscode/).
203
+ [VS Code](https://sqlty.kuncar.dev/recipes/vscode/).
198
204
 
199
205
  Not a fit for ORMs, SQL built at runtime, or runtime validation;
200
- [Why SQLTy?](https://jirikuncar.github.io/sqlty/motivation/) compares it with
206
+ [Why SQLTy?](https://sqlty.kuncar.dev/motivation/) compares it with
201
207
  sqlc, sqlx, PgTyped and others.
202
208
 
203
209
  ## About
@@ -208,6 +214,6 @@ developed with AI coding agents, mainly Claude Code; every change is reviewed by
208
214
  a maintainer (see the
209
215
  [AI-assisted contributions](https://github.com/jirikuncar/sqlty/blob/main/CONTRIBUTING.md#ai-assisted-contributions)
210
216
  policy). [Contributing](https://github.com/jirikuncar/sqlty/blob/main/CONTRIBUTING.md) ·
211
- [Credits](https://jirikuncar.github.io/sqlty/credits/) ·
217
+ [Credits](https://sqlty.kuncar.dev/credits/) ·
212
218
  MIT [License](https://github.com/jirikuncar/sqlty/blob/main/LICENSE).
213
219
 
@@ -1,4 +1,9 @@
1
- # SQLTy
1
+ <h1>
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jirikuncar/sqlty/main/docs/assets/sqlty-wordmark-dark.svg">
4
+ <img src="https://raw.githubusercontent.com/jirikuncar/sqlty/main/docs/assets/sqlty-wordmark-light.svg" alt="SQLTy" width="300">
5
+ </picture>
6
+ </h1>
2
7
 
3
8
  [![PyPI](https://img.shields.io/pypi/v/sqlty.svg)](https://pypi.org/project/sqlty/)
4
9
  [![Python 3.14+](https://img.shields.io/badge/python-3.14+-blue.svg)](https://www.python.org/downloads/)
@@ -18,13 +23,13 @@ migration that changes a column is caught in review, not in production.
18
23
  (<a href="https://github.com/jirikuncar/sqlty/blob/main/docs/assets/demo.tape">view source</a>)
19
24
  </p>
20
25
 
21
- **Documentation: [jirikuncar.github.io/sqlty](https://jirikuncar.github.io/sqlty/)**
26
+ **Documentation: [sqlty.kuncar.dev](https://sqlty.kuncar.dev/)**
22
27
 
23
28
  **Fits if** you write SQL as string literals on Python 3.14+, against
24
29
  PostgreSQL, SQLite or MySQL, with a schema dump or SQL migrations in the
25
30
  repository. Rows are typed end to end with psycopg 3; with other drivers sqlty
26
31
  checks the query and its parameters, and you annotate what the cursor returns
27
- ([Drivers](https://jirikuncar.github.io/sqlty/guide/drivers-and-orms/)).
32
+ ([Drivers](https://sqlty.kuncar.dev/guide/drivers-and-orms/)).
28
33
 
29
34
  > **Beta.** APIs and configuration may change before 1.0. Feedback welcome in
30
35
  > [GitHub Issues](https://github.com/jirikuncar/sqlty/issues).
@@ -86,10 +91,10 @@ query = SQL[tuple[int, str]]("--sql\nSELECT id, email FROM users")
86
91
  caller that now needs a `None` check. `narrow-type` is an error, so CI fails on
87
92
  it; an annotation that is only wider than the rows, such as `str | None` for a
88
93
  column made `NOT NULL`, is a `stale-type` warning
89
- ([CI](https://jirikuncar.github.io/sqlty/recipes/ci/)). For rolling deploys,
94
+ ([CI](https://sqlty.kuncar.dev/recipes/ci/)). For rolling deploys,
90
95
  `sqlty breaking --against origin/main` exits 1 when old code breaks on the new
91
96
  schema or new code on the old one
92
- ([Breaking schema changes](https://jirikuncar.github.io/sqlty/guide/breaking-changes/)).
97
+ ([Breaking schema changes](https://sqlty.kuncar.dev/guide/breaking-changes/)).
93
98
 
94
99
  ### A row type that doesn't match its query
95
100
 
@@ -106,7 +111,7 @@ query = SQL[User]("--sql\nSELECT id::INTEGER, name::TEXT FROM users")
106
111
  ```
107
112
 
108
113
  `TypedDict`, `NamedTuple`, dataclasses and Pydantic models are all checked
109
- ([Row types](https://jirikuncar.github.io/sqlty/guide/row-types/)).
114
+ ([Row types](https://sqlty.kuncar.dev/guide/row-types/)).
110
115
 
111
116
  ### Wrong parameters, misspelled columns
112
117
 
@@ -138,11 +143,11 @@ conn.execute(SQL[tuple[str | None]]("--sql\nSELECT email FROM users WHERE id = ?
138
143
  conn.execute("--sql\nSELECT emial FROM users")
139
144
  ```
140
145
 
141
- `?`, `$1`, `%s` and `:name` placeholders are checked on sqlite3, psycopg and
142
- asyncpg calls ([Parameters](https://jirikuncar.github.io/sqlty/guide/parameters/)).
146
+ `?`, `$1`, `%s` and `:name` placeholders are checked on sqlite3, aiosqlite,
147
+ psycopg and asyncpg calls ([Parameters](https://sqlty.kuncar.dev/guide/parameters/)).
143
148
  These are the mistakes coding agents make: every problem is one
144
149
  `file:line: [rule] message` line and a non-zero exit code they can act on, and
145
- the [sqlty skills](https://jirikuncar.github.io/sqlty/recipes/agents/) teach
150
+ the [sqlty skills](https://sqlty.kuncar.dev/recipes/agents/) teach
146
151
  them the conventions. In Claude Code, `/plugin install sqlty --marketplace jirikuncar/sqlty`
147
152
  installs them.
148
153
 
@@ -158,13 +163,13 @@ sqlty strip . # undo: back to plain strings
158
163
 
159
164
  `rewrite` and `strip` only touch the wrapper, never the SQL, so you can adopt
160
165
  sqlty one module at a time and back out. New project:
161
- [Quickstart](https://jirikuncar.github.io/sqlty/quickstart/). Existing codebase:
162
- [Migration](https://jirikuncar.github.io/sqlty/recipes/migration/), starting
166
+ [Quickstart](https://sqlty.kuncar.dev/quickstart/). Existing codebase:
167
+ [Migration](https://sqlty.kuncar.dev/recipes/migration/), starting
163
168
  with `pg_dump --schema-only app > schema.sql`. In the editor:
164
- [VS Code](https://jirikuncar.github.io/sqlty/recipes/vscode/).
169
+ [VS Code](https://sqlty.kuncar.dev/recipes/vscode/).
165
170
 
166
171
  Not a fit for ORMs, SQL built at runtime, or runtime validation;
167
- [Why SQLTy?](https://jirikuncar.github.io/sqlty/motivation/) compares it with
172
+ [Why SQLTy?](https://sqlty.kuncar.dev/motivation/) compares it with
168
173
  sqlc, sqlx, PgTyped and others.
169
174
 
170
175
  ## About
@@ -175,5 +180,5 @@ developed with AI coding agents, mainly Claude Code; every change is reviewed by
175
180
  a maintainer (see the
176
181
  [AI-assisted contributions](https://github.com/jirikuncar/sqlty/blob/main/CONTRIBUTING.md#ai-assisted-contributions)
177
182
  policy). [Contributing](https://github.com/jirikuncar/sqlty/blob/main/CONTRIBUTING.md) ·
178
- [Credits](https://jirikuncar.github.io/sqlty/credits/) ·
183
+ [Credits](https://sqlty.kuncar.dev/credits/) ·
179
184
  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 queries for Python"
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
- "type-hints",
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://github.com/jirikuncar/sqlty"
40
- Documentation = "https://jirikuncar.github.io/sqlty/"
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,6 +57,9 @@ 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
 
@@ -81,11 +96,16 @@ dev = [
81
96
  "vale>=3.22.0.0",
82
97
  "zizmor>=1.31.1",
83
98
  "pydantic[email]>=2.14.1",
99
+ "jsonschema>=4.26.0",
100
+ "pytest-xdist>=3.8.0",
101
+ "types-pygments>=2.19",
84
102
  ]
85
103
  cli = ["rich>=15.0.0"]
86
104
  # Only the DuckDB type tests need it, and it has no wheel for every Python.
87
105
  duckdb = ["duckdb>=1.4.0"]
88
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"]
89
109
  fuzz = [
90
110
  "hypothesis>=6.140",
91
111
  ]
@@ -94,7 +114,8 @@ bench = [
94
114
  ]
95
115
 
96
116
  [tool.pytest.ini_options]
97
- addopts = ["-p", "tests._mdtest.plugin", "-p", "tests._no_exec", "--cov-report=term-missing", "--cov-report=html", "-v"]
117
+ # In parallel and in random order; `make test-timing` runs the `timing` tests alone.
118
+ addopts = ["-p", "tests._mdtest.plugin", "-p", "tests._no_exec", "--cov-report=term-missing", "--cov-report=html", "-v", "-n", "auto", "-m", "not timing"]
98
119
  pythonpath = ["."]
99
120
  testpaths = ["tests", "docs", "src/sqlty/rules", "README.md"]
100
121
  mdtest_paths = ["tests/mdtest", "docs", "src/sqlty/rules", "README.md", "skills"]
@@ -102,6 +123,7 @@ markers = [
102
123
  "e2e: end-to-end tests (subprocess + inline-snapshot)",
103
124
  "slow: slow tests that can be skipped with -m 'not slow'",
104
125
  "pg: needs a PostgreSQL server (SQLTY_PG_DSN); skipped without it",
126
+ "timing: measures wall time, so runs alone: `make test-timing`",
105
127
  ]
106
128
 
107
129
  [tool.coverage.run]
@@ -172,5 +194,7 @@ disable = ["MD013", "MD038"]
172
194
  exclude = ["site", ".vale", ".github", "tests", "scripts/compat/reports", "plans/2026-02-13-future.md", "rust/target", "proofs/.lake"]
173
195
 
174
196
  [tool.rumdl.per-file-ignores]
175
- # The demo GIF needs HTML for its width and centering.
197
+ # The logo and demo GIF need HTML for light/dark variants, width and centering.
176
198
  "README.md" = ["MD033"]
199
+ # The editors and panels of the playground are HTML that its script fills in.
200
+ "docs/playground.md" = ["MD033"]