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