execsql2 2.29.0__tar.gz → 2.31.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 (520) hide show
  1. execsql2-2.31.1/.github/ISSUE_TEMPLATE/bug_report.yml +57 -0
  2. execsql2-2.31.1/.github/ISSUE_TEMPLATE/feature_request.yml +28 -0
  3. {execsql2-2.29.0 → execsql2-2.31.1}/.github/workflows/ci-cd.yml +48 -40
  4. {execsql2-2.29.0 → execsql2-2.31.1}/.gitignore +1 -0
  5. {execsql2-2.29.0 → execsql2-2.31.1}/.pre-commit-config.yaml +3 -3
  6. {execsql2-2.29.0 → execsql2-2.31.1}/.readthedocs.yaml +3 -2
  7. execsql2-2.31.1/CHANGELOG.md +2988 -0
  8. execsql2-2.31.1/CONTRIBUTING.md +88 -0
  9. {execsql2-2.29.0 → execsql2-2.31.1}/PKG-INFO +17 -43
  10. {execsql2-2.29.0 → execsql2-2.31.1}/README.md +13 -14
  11. {execsql2-2.29.0 → execsql2-2.31.1}/SECURITY.md +2 -2
  12. {execsql2-2.29.0 → execsql2-2.31.1}/docs/about/divergence.md +43 -33
  13. {execsql2-2.29.0 → execsql2-2.31.1}/docs/api/index.md +1 -1
  14. {execsql2-2.29.0 → execsql2-2.31.1}/docs/dev/architecture.md +73 -36
  15. {execsql2-2.29.0 → execsql2-2.31.1}/docs/dev/releasing.md +64 -28
  16. {execsql2-2.29.0 → execsql2-2.31.1}/docs/getting-started/syntax.md +7 -3
  17. {execsql2-2.29.0 → execsql2-2.31.1}/docs/guides/editors.md +63 -9
  18. {execsql2-2.29.0 → execsql2-2.31.1}/docs/guides/examples.md +20 -10
  19. {execsql2-2.29.0 → execsql2-2.31.1}/docs/guides/formatter.md +4 -2
  20. {execsql2-2.29.0 → execsql2-2.31.1}/docs/guides/sql_syntax.md +4 -0
  21. {execsql2-2.29.0 → execsql2-2.31.1}/docs/guides/usage.md +2 -0
  22. {execsql2-2.29.0 → execsql2-2.31.1}/docs/reference/configuration.md +9 -2
  23. {execsql2-2.29.0 → execsql2-2.31.1}/docs/reference/lint.md +3 -1
  24. {execsql2-2.29.0 → execsql2-2.31.1}/docs/reference/metacommands.md +47 -16
  25. {execsql2-2.29.0 → execsql2-2.31.1}/docs/reference/security.md +20 -3
  26. {execsql2-2.29.0 → execsql2-2.31.1}/docs/reference/substitution_vars.md +4 -1
  27. execsql2-2.31.1/docs/templates/compare.md +148 -0
  28. execsql2-2.31.1/docs/templates/glossary.md +162 -0
  29. execsql2-2.31.1/docs/templates/index.md +62 -0
  30. execsql2-2.31.1/docs/templates/upsert.md +386 -0
  31. {execsql2-2.29.0 → execsql2-2.31.1}/extras/vscode-execsql/README.md +17 -13
  32. {execsql2-2.29.0 → execsql2-2.31.1}/extras/vscode-execsql/extension.js +72 -26
  33. {execsql2-2.29.0 → execsql2-2.31.1}/extras/vscode-execsql/package-lock.json +2 -2
  34. {execsql2-2.29.0 → execsql2-2.31.1}/extras/vscode-execsql/package.json +23 -1
  35. {execsql2-2.29.0 → execsql2-2.31.1}/extras/vscode-execsql/syntaxes/execsql.tmLanguage.json +1 -1
  36. {execsql2-2.29.0 → execsql2-2.31.1}/justfile +61 -2
  37. {execsql2-2.29.0 → execsql2-2.31.1}/pyproject.toml +39 -15
  38. {execsql2-2.29.0 → execsql2-2.31.1}/scripts/generate_vscode_grammar.py +1 -26
  39. execsql2-2.31.1/scripts/release_notes.py +51 -0
  40. execsql2-2.31.1/src/execsql/__main__.py +12 -0
  41. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/api.py +6 -0
  42. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/__init__.py +3 -14
  43. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/application.py +6 -4
  44. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/commands/lint.py +5 -2
  45. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/commands/lsp.py +42 -0
  46. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/dsn.py +38 -2
  47. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/lint.py +24 -7
  48. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/run.py +22 -9
  49. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/config.py +58 -10
  50. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/data/execsql.conf.template +8 -2
  51. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/access.py +7 -5
  52. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/base.py +18 -0
  53. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/duckdb.py +96 -14
  54. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/factory.py +11 -1
  55. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/mysql.py +56 -3
  56. execsql2-2.31.1/src/execsql/db/odbc.py +45 -0
  57. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/postgres.py +1 -1
  58. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/sqlserver.py +37 -21
  59. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/ods.py +146 -41
  60. execsql2-2.31.1/src/execsql/exporters/values.py +261 -0
  61. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/gui/__init__.py +3 -31
  62. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/importers/base.py +1 -1
  63. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/importers/csv.py +1 -1
  64. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/importers/ods.py +2 -0
  65. execsql2-2.31.1/src/execsql/lsp/_util.py +21 -0
  66. execsql2-2.31.1/src/execsql/lsp/cache.py +73 -0
  67. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/lsp/code_actions.py +10 -14
  68. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/lsp/completion.py +8 -15
  69. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/lsp/diagnostics.py +15 -3
  70. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/lsp/document.py +142 -41
  71. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/lsp/hover.py +5 -13
  72. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/lsp/navigation.py +7 -10
  73. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/lsp/server.py +111 -29
  74. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/manifest.py +29 -9
  75. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/__init__.py +0 -2
  76. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/io_fileops.py +16 -5
  77. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/reference.py +1 -1
  78. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/upsert.py +10 -1
  79. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/script/executor.py +2 -21
  80. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/state.py +6 -3
  81. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/state.pyi +2 -0
  82. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/auth.py +21 -14
  83. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/errors.py +20 -37
  84. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/fileio.py +44 -48
  85. execsql2-2.31.1/src/execsql/utils/paths.py +31 -0
  86. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/regex.py +0 -5
  87. {execsql2-2.29.0 → execsql2-2.31.1}/templates/README.md +9 -8
  88. {execsql2-2.29.0 → execsql2-2.31.1}/templates/md_compare.sql +53 -29
  89. {execsql2-2.29.0 → execsql2-2.31.1}/templates/md_glossary.sql +20 -20
  90. {execsql2-2.29.0 → execsql2-2.31.1}/templates/md_upsert.sql +59 -66
  91. {execsql2-2.29.0 → execsql2-2.31.1}/templates/pg_compare.sql +19 -22
  92. {execsql2-2.29.0 → execsql2-2.31.1}/templates/pg_glossary.sql +13 -17
  93. {execsql2-2.29.0 → execsql2-2.31.1}/templates/script_template.sql +302 -299
  94. {execsql2-2.29.0 → execsql2-2.31.1}/templates/ss_compare.sql +39 -29
  95. {execsql2-2.29.0 → execsql2-2.31.1}/templates/ss_glossary.sql +13 -17
  96. {execsql2-2.29.0 → execsql2-2.31.1}/templates/ss_upsert.sql +56 -66
  97. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_cli.py +13 -18
  98. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_cli_e2e.py +0 -33
  99. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_cli_run.py +0 -27
  100. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_cli_surface.py +1 -1
  101. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_commands.py +3 -1
  102. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_dispatch.py +21 -3
  103. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_lint.py +20 -0
  104. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_manifest.py +23 -0
  105. execsql2-2.31.1/tests/data/ods/libreoffice.fods +67 -0
  106. execsql2-2.31.1/tests/data/ods/libreoffice.ods +0 -0
  107. execsql2-2.31.1/tests/db/conftest.py +42 -0
  108. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_db_adapters_mocked.py +11 -71
  109. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_db_adapters_mocked_extra.py +9 -54
  110. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_dsn.py +4 -20
  111. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_duckdb.py +65 -0
  112. execsql2-2.31.1/tests/db/test_mysql_trailing_blank_lines.py +46 -0
  113. execsql2-2.31.1/tests/db/test_replacement_missing_table.py +63 -0
  114. execsql2-2.31.1/tests/db/test_sqlserver_driver18.py +101 -0
  115. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_sqlserver_inprocess.py +63 -33
  116. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_transactions.py +0 -1
  117. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/conftest.py +0 -9
  118. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_exporters.py +4 -4
  119. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_ods_export.py +1 -1
  120. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_roundtrip_values.py +1 -6
  121. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_values_extended.py +3 -2
  122. execsql2-2.31.1/tests/exporters/test_values_roundtrip.py +115 -0
  123. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_xlsx.py +1 -1
  124. {execsql2-2.29.0 → execsql2-2.31.1}/tests/gui/test_backends.py +0 -64
  125. {execsql2-2.29.0 → execsql2-2.31.1}/tests/importers/test_base_extended.py +1 -1
  126. {execsql2-2.29.0 → execsql2-2.31.1}/tests/importers/test_csv_importer.py +3 -3
  127. execsql2-2.31.1/tests/importers/test_ods_values.py +210 -0
  128. {execsql2-2.29.0 → execsql2-2.31.1}/tests/integration/test_mysql.py +43 -0
  129. {execsql2-2.29.0 → execsql2-2.31.1}/tests/integration/test_postgres.py +61 -0
  130. execsql2-2.31.1/tests/lsp/test_cache.py +130 -0
  131. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/test_document.py +7 -0
  132. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/test_server.py +264 -15
  133. execsql2-2.31.1/tests/metacommands/conftest.py +22 -0
  134. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_metacommands.py +6 -46
  135. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_metacommands_extended.py +0 -7
  136. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_metacommands_fileops_extra.py +7 -3
  137. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_metacommands_script_ext.py +0 -4
  138. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_pg_upsert.py +41 -13
  139. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_row_count.py +3 -31
  140. execsql2-2.31.1/tests/metacommands/test_serve_output.py +24 -0
  141. {execsql2-2.29.0 → execsql2-2.31.1}/tests/security/test_env_detection.py +41 -2
  142. {execsql2-2.29.0 → execsql2-2.31.1}/tests/security/test_log_redaction.py +1 -1
  143. {execsql2-2.29.0 → execsql2-2.31.1}/tests/security/test_log_secrets.py +48 -0
  144. execsql2-2.31.1/tests/security/test_network_paths.py +146 -0
  145. execsql2-2.31.1/tests/security/test_odbc_connection_strings.py +139 -0
  146. execsql2-2.31.1/tests/templates/conftest.py +284 -0
  147. execsql2-2.31.1/tests/templates/test_compare.py +115 -0
  148. execsql2-2.31.1/tests/templates/test_glossary.py +106 -0
  149. execsql2-2.31.1/tests/templates/test_static.py +118 -0
  150. execsql2-2.31.1/tests/templates/test_upsert.py +217 -0
  151. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_api_isolation.py +28 -0
  152. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_config_data.py +50 -0
  153. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_executor_inprocess.py +0 -8
  154. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_reference.py +1 -1
  155. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_registry.py +5 -5
  156. execsql2-2.31.1/tests/test_release_notes.py +73 -0
  157. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_state.py +1 -1
  158. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_tooling_versions.py +10 -9
  159. execsql2-2.31.1/tests/utils/__init__.py +0 -0
  160. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_errors.py +21 -36
  161. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_errors_extra.py +17 -15
  162. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_fileio.py +0 -20
  163. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_fileio_extra.py +1 -9
  164. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_keyring_rules.py +2 -1
  165. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_regex.py +0 -25
  166. {execsql2-2.29.0 → execsql2-2.31.1}/uv.lock +107 -247
  167. {execsql2-2.29.0 → execsql2-2.31.1}/zensical.toml +6 -0
  168. execsql2-2.29.0/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
  169. execsql2-2.29.0/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  170. execsql2-2.29.0/CHANGELOG.md +0 -2982
  171. execsql2-2.29.0/CONTRIBUTING.md +0 -131
  172. execsql2-2.29.0/docs/images/connect.b64 +0 -1
  173. execsql2-2.29.0/docs/images/create_conf.png +0 -0
  174. execsql2-2.29.0/docs/images/entry_form.png +0 -0
  175. execsql2-2.29.0/docs/images/execsql_console.png +0 -0
  176. execsql2-2.29.0/docs/images/logo_small.png +0 -0
  177. execsql2-2.29.0/docs/images/pause_terminal.png +0 -0
  178. execsql2-2.29.0/docs/images/pause_terminal_sm.b64 +0 -1
  179. execsql2-2.29.0/docs/images/prompt_compare.png +0 -0
  180. execsql2-2.29.0/docs/images/unit_conversions.b64 +0 -1
  181. execsql2-2.29.0/src/execsql/__main__.py +0 -13
  182. execsql2-2.29.0/src/execsql/exporters/values.py +0 -104
  183. execsql2-2.29.0/templates/pg_upsert.sql +0 -2791
  184. {execsql2-2.29.0 → execsql2-2.31.1}/.github/dependabot.yml +0 -0
  185. {execsql2-2.29.0 → execsql2-2.31.1}/.pre-commit-hooks.yaml +0 -0
  186. {execsql2-2.29.0 → execsql2-2.31.1}/.python-version +0 -0
  187. {execsql2-2.29.0 → execsql2-2.31.1}/LICENSE.txt +0 -0
  188. {execsql2-2.29.0 → execsql2-2.31.1}/NOTICE +0 -0
  189. {execsql2-2.29.0 → execsql2-2.31.1}/docs/about/contributors.md +0 -0
  190. {execsql2-2.29.0 → execsql2-2.31.1}/docs/about/copyright.md +0 -0
  191. {execsql2-2.29.0 → execsql2-2.31.1}/docs/api/cli.md +0 -0
  192. {execsql2-2.29.0 → execsql2-2.31.1}/docs/api/db.md +0 -0
  193. {execsql2-2.29.0 → execsql2-2.31.1}/docs/api/exporters.md +0 -0
  194. {execsql2-2.29.0 → execsql2-2.31.1}/docs/api/importers.md +0 -0
  195. {execsql2-2.29.0 → execsql2-2.31.1}/docs/api/metacommands.md +0 -0
  196. {execsql2-2.29.0 → execsql2-2.31.1}/docs/dev/adding_db_adapters.md +0 -0
  197. {execsql2-2.29.0 → execsql2-2.31.1}/docs/dev/adding_exporters.md +0 -0
  198. {execsql2-2.29.0 → execsql2-2.31.1}/docs/dev/adding_importers.md +0 -0
  199. {execsql2-2.29.0 → execsql2-2.31.1}/docs/dev/adding_metacommands.md +0 -0
  200. {execsql2-2.29.0 → execsql2-2.31.1}/docs/getting-started/installation.md +0 -0
  201. {execsql2-2.29.0 → execsql2-2.31.1}/docs/getting-started/requirements.md +0 -0
  202. {execsql2-2.29.0 → execsql2-2.31.1}/docs/guides/debugging.md +0 -0
  203. {execsql2-2.29.0 → execsql2-2.31.1}/docs/guides/documentation.md +0 -0
  204. {execsql2-2.29.0 → execsql2-2.31.1}/docs/guides/encoding.md +0 -0
  205. {execsql2-2.29.0 → execsql2-2.31.1}/docs/guides/logging.md +0 -0
  206. {execsql2-2.29.0 → execsql2-2.31.1}/docs/guides/using_scripts.md +0 -0
  207. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/Compare_planets.png +0 -0
  208. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/actions.png +0 -0
  209. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/actions2.png +0 -0
  210. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/checkboxes.png +0 -0
  211. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/connect.png +0 -0
  212. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/data_error1_screenshot.jpg +0 -0
  213. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/execsql_logo_01.png +0 -0
  214. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/fatals.png +0 -0
  215. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/pause_terminal_sm.png +0 -0
  216. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/set_build_commands.jpg +0 -0
  217. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/unit_conversions_029.png +0 -0
  218. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/unmatched.png +0 -0
  219. {execsql2-2.29.0 → execsql2-2.31.1}/docs/images/vim_execsql_highlight.png +0 -0
  220. {execsql2-2.29.0 → execsql2-2.31.1}/docs/index.md +0 -0
  221. {execsql2-2.29.0 → execsql2-2.31.1}/extras/plugin-template/README.md +0 -0
  222. {execsql2-2.29.0 → execsql2-2.31.1}/extras/plugin-template/pyproject.toml +0 -0
  223. {execsql2-2.29.0 → execsql2-2.31.1}/extras/plugin-template/src/execsql_plugin_YOURNAME/__init__.py +0 -0
  224. {execsql2-2.29.0 → execsql2-2.31.1}/extras/plugin-template/tests/test_plugin.py.example +0 -0
  225. {execsql2-2.29.0 → execsql2-2.31.1}/extras/vscode-execsql/.vscodeignore +0 -0
  226. {execsql2-2.29.0 → execsql2-2.31.1}/extras/vscode-execsql/LICENSE.txt +0 -0
  227. {execsql2-2.29.0 → execsql2-2.31.1}/extras/vscode-execsql/icon.png +0 -0
  228. {execsql2-2.29.0 → execsql2-2.31.1}/scripts/benchmarks/README.md +0 -0
  229. {execsql2-2.29.0 → execsql2-2.31.1}/scripts/benchmarks/results/.gitignore +0 -0
  230. {execsql2-2.29.0 → execsql2-2.31.1}/scripts/benchmarks/run_benchmarks.py +0 -0
  231. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/__init__.py +0 -0
  232. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/commands/__init__.py +0 -0
  233. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/commands/config.py +0 -0
  234. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/commands/format.py +0 -0
  235. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/commands/init.py +0 -0
  236. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/commands/listing.py +0 -0
  237. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/commands/run.py +0 -0
  238. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/dispatch.py +0 -0
  239. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/help.py +0 -0
  240. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/cli/options.py +0 -0
  241. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/config_validation.py +0 -0
  242. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/data/__init__.py +0 -0
  243. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/data/script_header.sql +0 -0
  244. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/__init__.py +0 -0
  245. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/dsn.py +0 -0
  246. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/firebird.py +0 -0
  247. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/oracle.py +0 -0
  248. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/sqlite.py +0 -0
  249. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/db/tiers.py +0 -0
  250. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/debug/__init__.py +0 -0
  251. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/debug/repl.py +0 -0
  252. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exceptions.py +0 -0
  253. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/__init__.py +0 -0
  254. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/base.py +0 -0
  255. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/delimited.py +0 -0
  256. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/duckdb.py +0 -0
  257. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/feather.py +0 -0
  258. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/html.py +0 -0
  259. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/json.py +0 -0
  260. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/latex.py +0 -0
  261. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/markdown.py +0 -0
  262. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/parquet.py +0 -0
  263. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/pretty.py +0 -0
  264. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/protocol.py +0 -0
  265. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/raw.py +0 -0
  266. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/sqlite.py +0 -0
  267. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/templates.py +0 -0
  268. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/xls.py +0 -0
  269. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/xlsx.py +0 -0
  270. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/xml.py +0 -0
  271. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/yaml.py +0 -0
  272. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/exporters/zip.py +0 -0
  273. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/format.py +0 -0
  274. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/gui/base.py +0 -0
  275. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/gui/console.py +0 -0
  276. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/gui/desktop.py +0 -0
  277. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/gui/tui.py +0 -0
  278. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/importers/__init__.py +0 -0
  279. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/importers/feather.py +0 -0
  280. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/importers/json.py +0 -0
  281. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/importers/xls.py +0 -0
  282. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/interactive.py +0 -0
  283. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/lsp/__init__.py +0 -0
  284. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/lsp/folding.py +0 -0
  285. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/lsp/formatting.py +0 -0
  286. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/lsp/rename.py +0 -0
  287. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/conditions.py +0 -0
  288. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/connect.py +0 -0
  289. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/control.py +0 -0
  290. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/data.py +0 -0
  291. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/debug.py +0 -0
  292. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/dispatch.py +0 -0
  293. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/effects.py +0 -0
  294. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/io.py +0 -0
  295. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/io_export.py +0 -0
  296. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/io_import.py +0 -0
  297. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/io_write.py +0 -0
  298. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/prompt.py +0 -0
  299. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/script_ext.py +0 -0
  300. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/metacommands/system.py +0 -0
  301. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/models.py +0 -0
  302. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/parser.py +0 -0
  303. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/plugins.py +0 -0
  304. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/py.typed +0 -0
  305. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/script/__init__.py +0 -0
  306. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/script/ast.py +0 -0
  307. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/script/control.py +0 -0
  308. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/script/engine.py +0 -0
  309. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/script/parser.py +0 -0
  310. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/script/variables.py +0 -0
  311. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/types.py +0 -0
  312. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/__init__.py +0 -0
  313. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/color.py +0 -0
  314. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/crypto.py +0 -0
  315. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/datetime.py +0 -0
  316. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/gui.py +0 -0
  317. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/mail.py +0 -0
  318. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/numeric.py +0 -0
  319. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/strings.py +0 -0
  320. {execsql2-2.29.0 → execsql2-2.31.1}/src/execsql/utils/timer.py +0 -0
  321. {execsql2-2.29.0 → execsql2-2.31.1}/templates/config_settings.sqlite +0 -0
  322. {execsql2-2.29.0 → execsql2-2.31.1}/templates/example_config_prompt.sql +0 -0
  323. {execsql2-2.29.0 → execsql2-2.31.1}/templates/make_config_db.sql +0 -0
  324. {execsql2-2.29.0 → execsql2-2.31.1}/tests/__init__.py +0 -0
  325. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/__init__.py +0 -0
  326. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_config_validate.py +0 -0
  327. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_error_location.py +0 -0
  328. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_init.py +0 -0
  329. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_lint_fixtures.py +0 -0
  330. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_log_exit_record.py +0 -0
  331. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_ping.py +0 -0
  332. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_profile.py +0 -0
  333. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_sigterm.py +0 -0
  334. {execsql2-2.29.0 → execsql2-2.31.1}/tests/cli/test_undeclared_imports.py +0 -0
  335. {execsql2-2.29.0 → execsql2-2.31.1}/tests/conftest.py +0 -0
  336. {execsql2-2.29.0 → execsql2-2.31.1}/tests/data/formatter_shapes/comment_anchoring.sql +0 -0
  337. {execsql2-2.29.0 → execsql2-2.31.1}/tests/data/formatter_shapes/escapes_and_literals.sql +0 -0
  338. {execsql2-2.29.0 → execsql2-2.31.1}/tests/data/formatter_shapes/substitution_and_metacommands.sql +0 -0
  339. {execsql2-2.29.0 → execsql2-2.31.1}/tests/data/formatter_shapes/unparsable_sql.sql +0 -0
  340. {execsql2-2.29.0 → execsql2-2.31.1}/tests/data/lint/conditions_and_blocks.sql +0 -0
  341. {execsql2-2.29.0 → execsql2-2.31.1}/tests/data/lint/does_not_parse.sql +0 -0
  342. {execsql2-2.29.0 → execsql2-2.31.1}/tests/data/lint/every_metacommand.sql +0 -0
  343. {execsql2-2.29.0 → execsql2-2.31.1}/tests/data/lint/invalid.sql +0 -0
  344. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/__init__.py +0 -0
  345. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_access_windows.py +0 -0
  346. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_base.py +0 -0
  347. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_copy_new.py +0 -0
  348. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_factory.py +0 -0
  349. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_factory_postgres_encoding.py +0 -0
  350. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_import_atomic.py +0 -0
  351. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_import_replacement_quoted.py +0 -0
  352. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_import_short_rows.py +0 -0
  353. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_import_timezones.py +0 -0
  354. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_mysql_case_folding.py +0 -0
  355. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_mysql_inprocess.py +0 -0
  356. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_new_table_checks.py +0 -0
  357. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_oracle_driver.py +0 -0
  358. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_postgres.py +0 -0
  359. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_postgres_inprocess.py +0 -0
  360. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_quoted_substitution_roundtrip.py +0 -0
  361. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_roundtrip_adapters.py +0 -0
  362. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_sqlite.py +0 -0
  363. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_sqlite_extra.py +0 -0
  364. {execsql2-2.29.0 → execsql2-2.31.1}/tests/db/test_tiers.py +0 -0
  365. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/__init__.py +0 -0
  366. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_base.py +0 -0
  367. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_db.py +0 -0
  368. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_delimited.py +0 -0
  369. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_duckdb_exporter.py +0 -0
  370. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_feather.py +0 -0
  371. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_html_extended.py +0 -0
  372. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_html_latex.py +0 -0
  373. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_json.py +0 -0
  374. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_json_extended.py +0 -0
  375. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_latex_extended.py +0 -0
  376. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_markdown.py +0 -0
  377. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_ods.py +0 -0
  378. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_parquet.py +0 -0
  379. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_pretty_extended.py +0 -0
  380. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_raw_extended.py +0 -0
  381. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_roundtrip_columnar.py +0 -0
  382. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_roundtrip_dbfile.py +0 -0
  383. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_roundtrip_delimited.py +0 -0
  384. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_roundtrip_json.py +0 -0
  385. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_roundtrip_latex_xml.py +0 -0
  386. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_roundtrip_markup.py +0 -0
  387. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_roundtrip_ods.py +0 -0
  388. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_roundtrip_pretty_raw.py +0 -0
  389. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_roundtrip_template.py +0 -0
  390. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_roundtrip_xlsx.py +0 -0
  391. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_sqlite_exporter.py +0 -0
  392. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_templates.py +0 -0
  393. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_templates_extended.py +0 -0
  394. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_xls_xlsx.py +0 -0
  395. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_xml.py +0 -0
  396. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_yaml.py +0 -0
  397. {execsql2-2.29.0 → execsql2-2.31.1}/tests/exporters/test_zip.py +0 -0
  398. {execsql2-2.29.0 → execsql2-2.31.1}/tests/gui/__init__.py +0 -0
  399. {execsql2-2.29.0 → execsql2-2.31.1}/tests/gui/test_backends_extended.py +0 -0
  400. {execsql2-2.29.0 → execsql2-2.31.1}/tests/gui/test_compare_stats.py +0 -0
  401. {execsql2-2.29.0 → execsql2-2.31.1}/tests/gui/test_compute_row_diffs.py +0 -0
  402. {execsql2-2.29.0 → execsql2-2.31.1}/tests/gui/test_desktop_dialogs.py +0 -0
  403. {execsql2-2.29.0 → execsql2-2.31.1}/tests/gui/test_format_table.py +0 -0
  404. {execsql2-2.29.0 → execsql2-2.31.1}/tests/gui/test_tui_pilot.py +0 -0
  405. {execsql2-2.29.0 → execsql2-2.31.1}/tests/gui/test_tui_pilot_complex.py +0 -0
  406. {execsql2-2.29.0 → execsql2-2.31.1}/tests/gui/test_utils_gui_extended.py +0 -0
  407. {execsql2-2.29.0 → execsql2-2.31.1}/tests/importers/__init__.py +0 -0
  408. {execsql2-2.29.0 → execsql2-2.31.1}/tests/importers/conftest.py +0 -0
  409. {execsql2-2.29.0 → execsql2-2.31.1}/tests/importers/test_csv_blank_lines.py +0 -0
  410. {execsql2-2.29.0 → execsql2-2.31.1}/tests/importers/test_csv_edge_cases.py +0 -0
  411. {execsql2-2.29.0 → execsql2-2.31.1}/tests/importers/test_feather_importer.py +0 -0
  412. {execsql2-2.29.0 → execsql2-2.31.1}/tests/importers/test_json_importer.py +0 -0
  413. {execsql2-2.29.0 → execsql2-2.31.1}/tests/importers/test_ods_importer.py +0 -0
  414. {execsql2-2.29.0 → execsql2-2.31.1}/tests/importers/test_roundtrip_csv.py +0 -0
  415. {execsql2-2.29.0 → execsql2-2.31.1}/tests/importers/test_xls_importer.py +0 -0
  416. {execsql2-2.29.0 → execsql2-2.31.1}/tests/integration/__init__.py +0 -0
  417. {execsql2-2.29.0 → execsql2-2.31.1}/tests/integration/conftest.py +0 -0
  418. {execsql2-2.29.0 → execsql2-2.31.1}/tests/integration/test_dsn.py +0 -0
  419. {execsql2-2.29.0 → execsql2-2.31.1}/tests/integration/test_duckdb.py +0 -0
  420. {execsql2-2.29.0 → execsql2-2.31.1}/tests/integration/test_sqlite.py +0 -0
  421. {execsql2-2.29.0 → execsql2-2.31.1}/tests/live_db.py +0 -0
  422. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/__init__.py +0 -0
  423. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/test_code_actions.py +0 -0
  424. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/test_completion.py +0 -0
  425. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/test_diagnostics.py +0 -0
  426. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/test_folding.py +0 -0
  427. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/test_formatting.py +0 -0
  428. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/test_hover.py +0 -0
  429. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/test_lsp_command.py +0 -0
  430. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/test_navigation.py +0 -0
  431. {execsql2-2.29.0 → execsql2-2.31.1}/tests/lsp/test_rename.py +0 -0
  432. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/__init__.py +0 -0
  433. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_assert.py +0 -0
  434. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_breakpoint.py +0 -0
  435. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_conditions_extra.py +0 -0
  436. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_connect.py +0 -0
  437. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_io_export.py +0 -0
  438. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_io_import.py +0 -0
  439. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_metacommands_connect.py +0 -0
  440. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_metacommands_data.py +0 -0
  441. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_metacommands_io.py +0 -0
  442. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_metacommands_io_write_extra.py +0 -0
  443. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_metacommands_system.py +0 -0
  444. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_metacommands_system_extra.py +0 -0
  445. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_prompt.py +0 -0
  446. {execsql2-2.29.0 → execsql2-2.31.1}/tests/metacommands/test_show_scripts.py +0 -0
  447. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/__init__.py +0 -0
  448. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/audit_lint_bad.sql +0 -0
  449. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/audit_smoke/sample.json +0 -0
  450. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/audit_smoke/sample.jsonl +0 -0
  451. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/audit_smoke.sql +0 -0
  452. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/config_runtime.sql +0 -0
  453. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/control_flow.sql +0 -0
  454. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/counters_and_locals.sql +0 -0
  455. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/error_handling.sql +0 -0
  456. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/import_options/has_comments.csv +0 -0
  457. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/import_options.sql +0 -0
  458. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/includes/helper.sql +0 -0
  459. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/includes.sql +0 -0
  460. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/io_formats.sql +0 -0
  461. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/io_roundtrip.sql +0 -0
  462. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/multi_db.sql +0 -0
  463. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/parquet_feather_roundtrip.sql +0 -0
  464. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/parse_only/parse_tree.sql +0 -0
  465. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/predicates.sql +0 -0
  466. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/scripts.sql +0 -0
  467. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/smoke.sql +0 -0
  468. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/subroutine_loops.sql +0 -0
  469. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/subvars_advanced.sql +0 -0
  470. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/template_export/greeting.tmpl +0 -0
  471. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/template_export.sql +0 -0
  472. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/timer.sql +0 -0
  473. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/transactions.sql +0 -0
  474. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/write_create_table.sql +0 -0
  475. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/fixtures/xlsx_ods_roundtrip.sql +0 -0
  476. {execsql2-2.29.0 → execsql2-2.31.1}/tests/scripts/test_sql_scripts.py +0 -0
  477. {execsql2-2.29.0 → execsql2-2.31.1}/tests/security/__init__.py +0 -0
  478. {execsql2-2.29.0 → execsql2-2.31.1}/tests/security/test_expansion_bomb.py +0 -0
  479. {execsql2-2.29.0 → execsql2-2.31.1}/tests/security/test_import_regex_hardening.py +0 -0
  480. {execsql2-2.29.0 → execsql2-2.31.1}/tests/security/test_odbc_injection.py +0 -0
  481. {execsql2-2.29.0 → execsql2-2.31.1}/tests/security/test_path_containment.py +0 -0
  482. {execsql2-2.29.0 → execsql2-2.31.1}/tests/security/test_substitution_injection.py +0 -0
  483. {execsql2-2.29.0 → execsql2-2.31.1}/tests/security/test_zip_bomb.py +0 -0
  484. {execsql2-2.29.0/tests/utils → execsql2-2.31.1/tests/templates}/__init__.py +0 -0
  485. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_api.py +0 -0
  486. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_api_errors.py +0 -0
  487. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_api_extended.py +0 -0
  488. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_api_filewriter.py +0 -0
  489. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_api_subprocess.py +0 -0
  490. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_ast.py +0 -0
  491. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_ast_parser.py +0 -0
  492. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_bundled_templates.py +0 -0
  493. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_config.py +0 -0
  494. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_config_extended.py +0 -0
  495. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_date_inference.py +0 -0
  496. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_debug_repl.py +0 -0
  497. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_engine.py +0 -0
  498. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_error_messages.py +0 -0
  499. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_exceptions.py +0 -0
  500. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_executor.py +0 -0
  501. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_format.py +0 -0
  502. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_interactive.py +0 -0
  503. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_mail.py +0 -0
  504. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_models.py +0 -0
  505. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_package.py +0 -0
  506. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_parser.py +0 -0
  507. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_parser_params.py +0 -0
  508. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_plugins.py +0 -0
  509. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_script.py +0 -0
  510. {execsql2-2.29.0 → execsql2-2.31.1}/tests/test_types.py +0 -0
  511. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_auth.py +0 -0
  512. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_auth_extra.py +0 -0
  513. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_crypto.py +0 -0
  514. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_datetime.py +0 -0
  515. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_encodedfile_context.py +0 -0
  516. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_mail_tls.py +0 -0
  517. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_numeric.py +0 -0
  518. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_strings.py +0 -0
  519. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_timer.py +0 -0
  520. {execsql2-2.29.0 → execsql2-2.31.1}/tests/utils/test_timer_extra.py +0 -0
@@ -0,0 +1,57 @@
1
+ name: Bug report
2
+ description: Something execsql does wrong, from the command line, the library, or an editor.
3
+ labels: [bug]
4
+ body:
5
+ - type: textarea
6
+ id: what
7
+ attributes:
8
+ label: What happened
9
+ description: What you ran, what you expected, and what happened instead.
10
+ placeholder: |
11
+ `execsql run load.sql prod.db -t l` stopped at line 12 with ...
12
+ I expected ...
13
+ validations:
14
+ required: true
15
+ - type: textarea
16
+ id: script
17
+ attributes:
18
+ label: A script that shows it
19
+ description: The smallest script that reproduces the problem, if you can share one. Leave out data and credentials.
20
+ render: sql
21
+ - type: textarea
22
+ id: output
23
+ attributes:
24
+ label: Error output
25
+ description: The full message or traceback, and the end of `execsql.log` if the run wrote one.
26
+ render: text
27
+ - type: input
28
+ id: version
29
+ attributes:
30
+ label: execsql version
31
+ description: The output of `execsql --version`.
32
+ placeholder: execsql 2.30.0
33
+ validations:
34
+ required: true
35
+ - type: input
36
+ id: install
37
+ attributes:
38
+ label: How execsql is installed
39
+ description: The command, with its extras.
40
+ placeholder: uv tool install "execsql2[postgres,lsp]"
41
+ validations:
42
+ required: true
43
+ - type: input
44
+ id: environment
45
+ attributes:
46
+ label: Operating system, Python and database
47
+ placeholder: macOS 15, Python 3.12, PostgreSQL 16
48
+ validations:
49
+ required: true
50
+ - type: textarea
51
+ id: editor
52
+ attributes:
53
+ label: Editor and language server (only for a problem in an editor)
54
+ description: |
55
+ The editor and the execsql extension's version, the output of `execsql lsp --check`, and the server's log
56
+ at `info` (VS Code: View → Output → execsql). See https://execsql2.readthedocs.io/en/stable/guides/editors/#troubleshooting
57
+ render: text
@@ -0,0 +1,28 @@
1
+ name: Feature request
2
+ description: A new feature, metacommand or option, or a change to how something works.
3
+ labels: [enhancement]
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: The problem
9
+ description: What you are trying to do, and what gets in the way today.
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: proposal
14
+ attributes:
15
+ label: What you would like
16
+ description: For a new metacommand or CLI option, the syntax you would expect.
17
+ placeholder: "-- !x! NEW_METACOMMAND ..."
18
+ validations:
19
+ required: true
20
+ - type: textarea
21
+ id: alternatives
22
+ attributes:
23
+ label: Alternatives and workarounds
24
+ description: What you tried instead, if anything.
25
+ - type: textarea
26
+ id: context
27
+ attributes:
28
+ label: Anything else
@@ -44,32 +44,13 @@ jobs:
44
44
  - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
45
45
  with:
46
46
  python-version: "3.13"
47
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
47
+ - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
48
48
  # The environment `just setup` builds: mypy and the packages it
49
49
  # type-checks against come from uv.lock, so CI and local runs agree.
50
50
  # --locked also fails the job when uv.lock is out of date.
51
51
  - run: uv sync --locked --all-extras
52
52
  - run: uv run --no-sync mypy src/execsql/
53
53
 
54
- formatter-corpus:
55
- name: formatter-corpus
56
- runs-on: ubuntu-latest
57
- permissions:
58
- contents: read
59
- steps:
60
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
61
- - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
62
- with:
63
- python-version: "3.13"
64
- cache: "pip"
65
- - run: python -m pip install --upgrade pip
66
- - run: python -m pip install ".[dev]"
67
- # Every formatter bug to date came from real SQL containing a
68
- # construct the project's own scripts lack. This gate runs those
69
- # checks under their own name so a corpus failure is legible
70
- # without reading a 6,000-test log.
71
- - run: pytest tests/test_format.py -k corpus --no-cov -q
72
-
73
54
  typer-floor:
74
55
  name: typer-floor
75
56
  runs-on: ubuntu-latest
@@ -89,7 +70,7 @@ jobs:
89
70
  - run: |
90
71
  floor=$(grep -oP '"typer>=\K[0-9.]+' pyproject.toml)
91
72
  echo "Typer floor: $floor"
92
- python -m pip install ".[dev]" "typer==$floor"
73
+ python -m pip install ".[formats,formatter,lsp]" --group dev "typer==$floor"
93
74
  - run: pytest tests/cli --no-cov -q
94
75
 
95
76
  pre-commit:
@@ -104,7 +85,7 @@ jobs:
104
85
  python-version: "3.13"
105
86
  cache: "pip"
106
87
  - run: python -m pip install --upgrade pip
107
- - run: python -m pip install ".[dev]"
88
+ - run: python -m pip install ".[formats,formatter,lsp]" --group dev
108
89
  # mypy runs in the dedicated typecheck job; the local hook needs uv
109
90
  - run: pre-commit run --all-files
110
91
  env:
@@ -117,7 +98,7 @@ jobs:
117
98
  contents: read
118
99
  steps:
119
100
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
120
- - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
101
+ - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
121
102
  with:
122
103
  node-version: "22"
123
104
  # Dependencies come from the committed package-lock.json, and no
@@ -125,18 +106,23 @@ jobs:
125
106
  - name: Install dependencies
126
107
  working-directory: extras/vscode-execsql
127
108
  run: npm ci --ignore-scripts --no-audit --no-fund
128
- # A release's extension carries the release's version (VS Code
129
- # versions are X.Y.Z, so a pre-release suffix is dropped).
130
- - name: Set the extension version from the tag
109
+ # bump-my-version writes the release's version into package.json
110
+ # (2.31.0rc1 as 2.31.0-rc.1); a tag on a commit where it differs
111
+ # would attach an extension with another version.
112
+ - name: Check the extension version matches the tag
131
113
  if: startsWith(github.ref, 'refs/tags/v')
132
114
  working-directory: extras/vscode-execsql
133
115
  run: |
134
- version="$(echo "${GITHUB_REF_NAME#v}" | grep -oE '^[0-9]+\.[0-9]+\.[0-9]+')"
135
- npm pkg set version="$version"
116
+ expected="$(echo "${GITHUB_REF_NAME#v}" | sed -E 's/^([0-9]+\.[0-9]+\.[0-9]+)(a|b|rc)([0-9]+)$/\1-\2.\3/')"
117
+ actual="$(node -p "require('./package.json').version")"
118
+ if [ "$expected" != "$actual" ]; then
119
+ echo "::error::extras/vscode-execsql/package.json has version $actual; the tag $GITHUB_REF_NAME needs $expected"
120
+ exit 1
121
+ fi
136
122
  - name: Package the .vsix
137
123
  working-directory: extras/vscode-execsql
138
124
  run: ./node_modules/.bin/vsce package --out "../../execsql-syntax.vsix"
139
- - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
125
+ - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
140
126
  with:
141
127
  name: vscode-extension
142
128
  path: execsql-syntax.vsix
@@ -153,9 +139,10 @@ jobs:
153
139
  python-version: "3.13"
154
140
  cache: "pip"
155
141
  - run: python -m pip install --upgrade pip
156
- - run: python -m pip install ".[dev]"
142
+ - run: python -m pip install ".[formats,formatter,lsp]" --group dev
157
143
  - run: cp CHANGELOG.md docs/about/change_log.md
158
- - run: zensical build
144
+ # --strict: a warning, such as a link to an #anchor that does not exist, fails the job.
145
+ - run: zensical build --strict
159
146
 
160
147
  tests:
161
148
  strategy:
@@ -194,7 +181,7 @@ jobs:
194
181
  run: |
195
182
  python -m pip install --upgrade pip
196
183
  python -m pip install tox
197
- python -m pip install ".[dev]"
184
+ python -m pip install ".[formats,formatter,lsp]" --group dev
198
185
  - name: Install tkinter (Ubuntu)
199
186
  if: runner.os == 'Linux'
200
187
  run: sudo apt-get install -y python3-tk
@@ -254,6 +241,17 @@ jobs:
254
241
  options: >-
255
242
  --health-cmd "mysqladmin ping" --health-interval 10s
256
243
  --health-timeout 5s --health-retries 5
244
+ mariadb:
245
+ # The md_ templates were written for MariaDB and differ from
246
+ # MySQL 8 in what SQL they accept; tests/templates runs on both.
247
+ image: mariadb:11
248
+ env:
249
+ MARIADB_ROOT_PASSWORD: root
250
+ ports:
251
+ - 3307:3306
252
+ options: >-
253
+ --health-cmd "healthcheck.sh --connect --innodb_initialized"
254
+ --health-interval 10s --health-timeout 5s --health-retries 5
257
255
  sqlserver:
258
256
  image: mcr.microsoft.com/mssql/server:2022-latest
259
257
  env:
@@ -293,13 +291,16 @@ jobs:
293
291
  - name: Install dependencies
294
292
  run: |
295
293
  python -m pip install --upgrade pip
296
- python -m pip install ".[dev,postgres,mysql,mssql,upsert]"
294
+ python -m pip install ".[formats,formatter,lsp,postgres,mysql,mssql,upsert]" --group dev
297
295
  - name: Run subprocess integration tests
298
296
  run: |
299
297
  python -m pytest tests/integration/test_postgres.py tests/integration/test_mysql.py -v --override-ini="addopts="
300
298
  - name: Run in-process DB adapter tests with 86% coverage floor
301
299
  env:
302
300
  DISPLAY: ""
301
+ # The SQL Server tests fail here instead of skipping when the
302
+ # adapter cannot connect.
303
+ EXECSQL_MSSQL_REQUIRED: "1"
303
304
  run: |
304
305
  python -m pytest --cov=execsql --cov-branch --cov-report=xml --cov-fail-under=86
305
306
  - name: Upload coverage to Codecov
@@ -354,7 +355,7 @@ jobs:
354
355
  if: steps.install_access.outcome == 'success'
355
356
  run: |
356
357
  python -m pip install --upgrade pip
357
- python -m pip install ".[dev,odbc]" pywin32
358
+ python -m pip install ".[formats,formatter,lsp,odbc]" --group dev pywin32
358
359
  shell: pwsh
359
360
  - name: Run Access real-driver tests
360
361
  # Gating: a real regression in src/execsql/db/access.py blocks
@@ -369,7 +370,7 @@ jobs:
369
370
  build:
370
371
  name: Build distribution 📦
371
372
  runs-on: ubuntu-latest
372
- needs: [ lint, typecheck, pre-commit, formatter-corpus, typer-floor, docs, tests, integration-tests, vscode-extension ]
373
+ needs: [ lint, typecheck, pre-commit, typer-floor, docs, tests, integration-tests, vscode-extension ]
373
374
  # Deliberately NOT gated on tags: packaging breaks must surface on a PR,
374
375
  # not at release time. Only publish/generate-release below are tag-gated.
375
376
  permissions:
@@ -391,6 +392,11 @@ jobs:
391
392
  echo "::error::Tag $GITHUB_REF_NAME does not match project.version $version in pyproject.toml"
392
393
  exit 1
393
394
  fi
395
+ - name: Check CHANGELOG.md has the release notes
396
+ # The GitHub Release body is this section; a missing one would
397
+ # only surface after the PyPI upload.
398
+ if: startsWith(github.ref, 'refs/tags/v')
399
+ run: python scripts/release_notes.py "$GITHUB_REF_NAME" > /dev/null
394
400
  - name: Build sdist + wheel
395
401
  run: |
396
402
  python -m pip install --upgrade pip
@@ -403,7 +409,7 @@ jobs:
403
409
  python -m build --sdist --wheel --outdir dist/
404
410
  python -m twine check dist/*
405
411
  - name: Upload dist artifact
406
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
412
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
407
413
  with:
408
414
  name: ${{ github.event.repository.name }}
409
415
  path: dist/
@@ -421,7 +427,7 @@ jobs:
421
427
  contents: read
422
428
  steps:
423
429
  - name: Download dist
424
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
430
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
425
431
  with:
426
432
  name: ${{ github.event.repository.name }}
427
433
  path: dist/
@@ -443,12 +449,12 @@ jobs:
443
449
  - name: Checkout
444
450
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
445
451
  - name: Download dist
446
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
452
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
447
453
  with:
448
454
  name: ${{ github.event.repository.name }}
449
455
  path: dist/
450
456
  - name: Download the VS Code extension
451
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
457
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
452
458
  with:
453
459
  name: vscode-extension
454
460
  path: dist/
@@ -462,11 +468,13 @@ jobs:
462
468
  else
463
469
  echo "prerelease=false" >> "$GITHUB_OUTPUT"
464
470
  fi
471
+ - name: Release notes from CHANGELOG.md
472
+ run: python3 scripts/release_notes.py "$GITHUB_REF_NAME" > release-notes.md
465
473
  - name: Create release
466
474
  uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3
467
475
  with:
468
476
  draft: false
469
477
  prerelease: ${{ steps.tag.outputs.prerelease }}
470
- generate_release_notes: true
478
+ body_path: release-notes.md
471
479
  files: |
472
480
  dist/*
@@ -36,6 +36,7 @@ htmlcov/
36
36
  execsql.log
37
37
  scripts/*
38
38
  !scripts/generate_vscode_grammar.py
39
+ !scripts/release_notes.py
39
40
  !scripts/benchmarks/
40
41
  !tests/scripts
41
42
 
@@ -18,7 +18,7 @@ repos:
18
18
  - id: gitleaks
19
19
  # uv lockfile management
20
20
  - repo: https://github.com/astral-sh/uv-pre-commit
21
- rev: 0.12.23
21
+ rev: 0.13.0
22
22
  hooks:
23
23
  - id: uv-lock
24
24
  # Base hooks
@@ -64,13 +64,13 @@ repos:
64
64
  args: [--disable, MD013]
65
65
  # Spell check
66
66
  - repo: https://github.com/crate-ci/typos
67
- rev: v1.51.0
67
+ rev: v1.51.1
68
68
  hooks:
69
69
  - id: typos
70
70
  args: [--force-exclude]
71
71
  # Lint & format with ruff
72
72
  - repo: https://github.com/astral-sh/ruff-pre-commit
73
- rev: v0.16.10
73
+ rev: v0.17.0
74
74
  hooks:
75
75
  - id: ruff-check
76
76
  args: [--config=pyproject.toml, --exit-non-zero-on-fix]
@@ -9,8 +9,9 @@ build:
9
9
  python: "3.13"
10
10
  jobs:
11
11
  install:
12
- - pip install "zensical==0.0.67" mkdocstrings-python
13
- - pip install -e .
12
+ # The `docs` dependency group in pyproject.toml, the same pins CI builds with.
13
+ - pip install --upgrade pip
14
+ - pip install -e . --group docs
14
15
  pre_build:
15
16
  - cp CHANGELOG.md docs/about/change_log.md
16
17
  build: