mycli 2.30.1__tar.gz → 2.30.3__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 (229) hide show
  1. {mycli-2.30.1 → mycli-2.30.3}/.github/workflows/ci.yml +12 -12
  2. {mycli-2.30.1 → mycli-2.30.3}/.github/workflows/publish.yml +14 -14
  3. {mycli-2.30.1/mycli.egg-info → mycli-2.30.3}/PKG-INFO +10 -10
  4. {mycli-2.30.1 → mycli-2.30.3}/changelog.md +29 -0
  5. {mycli-2.30.1 → mycli-2.30.3}/docker/resources/test_db-1.0.7.tar.gz +1 -1
  6. {mycli-2.30.1 → mycli-2.30.3}/mycli/AUTHORS.txt +2 -0
  7. {mycli-2.30.1 → mycli-2.30.3}/mycli/config.py +3 -3
  8. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/sql_utils.py +2 -3
  9. {mycli-2.30.1 → mycli-2.30.3/mycli.egg-info}/PKG-INFO +10 -10
  10. {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/requires.txt +9 -9
  11. mycli-2.30.3/mycli.egg-info/scm_version.json +8 -0
  12. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_config.py +29 -0
  13. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_sql_utils.py +10 -0
  14. {mycli-2.30.1 → mycli-2.30.3}/pyproject.toml +10 -11
  15. mycli-2.30.1/mycli.egg-info/scm_version.json +0 -8
  16. {mycli-2.30.1 → mycli-2.30.3}/.git-blame-ignore-revs +0 -0
  17. {mycli-2.30.1 → mycli-2.30.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  18. {mycli-2.30.1 → mycli-2.30.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  19. {mycli-2.30.1 → mycli-2.30.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  20. {mycli-2.30.1 → mycli-2.30.3}/.github/actions/lint/action.yml +0 -0
  21. {mycli-2.30.1 → mycli-2.30.3}/.github/actions/typecheck/action.yml +0 -0
  22. {mycli-2.30.1 → mycli-2.30.3}/.github/dependabot.yml +0 -0
  23. {mycli-2.30.1 → mycli-2.30.3}/.github/workflows/lint.yml +0 -0
  24. {mycli-2.30.1 → mycli-2.30.3}/.github/workflows/typecheck.yml +0 -0
  25. {mycli-2.30.1 → mycli-2.30.3}/.gitignore +0 -0
  26. {mycli-2.30.1 → mycli-2.30.3}/AGENTS.md +0 -0
  27. {mycli-2.30.1 → mycli-2.30.3}/AUTHORS.md +0 -0
  28. {mycli-2.30.1 → mycli-2.30.3}/CONTRIBUTING.md +0 -0
  29. {mycli-2.30.1 → mycli-2.30.3}/LICENSE.txt +0 -0
  30. {mycli-2.30.1 → mycli-2.30.3}/MANIFEST.in +0 -0
  31. {mycli-2.30.1 → mycli-2.30.3}/README.md +0 -0
  32. {mycli-2.30.1 → mycli-2.30.3}/SPONSORS.md +0 -0
  33. {mycli-2.30.1 → mycli-2.30.3}/doc/cookbook.md +0 -0
  34. {mycli-2.30.1 → mycli-2.30.3}/doc/key_bindings.md +0 -0
  35. {mycli-2.30.1 → mycli-2.30.3}/doc/known_bugs.md +0 -0
  36. {mycli-2.30.1 → mycli-2.30.3}/doc/llm.md +0 -0
  37. {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/main.gif +0 -0
  38. {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/polars_describe.png +0 -0
  39. {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/polars_group_by.png +0 -0
  40. {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/polars_histogram.png +0 -0
  41. {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/polars_pivot.png +0 -0
  42. {mycli-2.30.1 → mycli-2.30.3}/doc/screenshots/tables.png +0 -0
  43. {mycli-2.30.1 → mycli-2.30.3}/doc/transforms.md +0 -0
  44. {mycli-2.30.1 → mycli-2.30.3}/docker/Dockerfile +0 -0
  45. {mycli-2.30.1 → mycli-2.30.3}/docker/resources/dot_mycli_history.txt +0 -0
  46. {mycli-2.30.1 → mycli-2.30.3}/docker/resources/test_db_license.md +0 -0
  47. {mycli-2.30.1 → mycli-2.30.3}/mycli/SPONSORS.txt +0 -0
  48. {mycli-2.30.1 → mycli-2.30.3}/mycli/TIPS.txt +0 -0
  49. {mycli-2.30.1 → mycli-2.30.3}/mycli/__init__.py +0 -0
  50. {mycli-2.30.1 → mycli-2.30.3}/mycli/app_state.py +0 -0
  51. {mycli-2.30.1 → mycli-2.30.3}/mycli/cli_runner.py +0 -0
  52. {mycli-2.30.1 → mycli-2.30.3}/mycli/client.py +0 -0
  53. {mycli-2.30.1 → mycli-2.30.3}/mycli/client_commands.py +0 -0
  54. {mycli-2.30.1 → mycli-2.30.3}/mycli/client_connection.py +0 -0
  55. {mycli-2.30.1 → mycli-2.30.3}/mycli/client_query.py +0 -0
  56. {mycli-2.30.1 → mycli-2.30.3}/mycli/compat.py +0 -0
  57. {mycli-2.30.1 → mycli-2.30.3}/mycli/constants.py +0 -0
  58. {mycli-2.30.1 → mycli-2.30.3}/mycli/main.py +0 -0
  59. {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/batch.py +0 -0
  60. {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/checkup.py +0 -0
  61. {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/completions.py +0 -0
  62. {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/execute.py +0 -0
  63. {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/list_dsn.py +0 -0
  64. {mycli-2.30.1 → mycli-2.30.3}/mycli/main_modes/repl.py +0 -0
  65. {mycli-2.30.1 → mycli-2.30.3}/mycli/myclirc +0 -0
  66. {mycli-2.30.1 → mycli-2.30.3}/mycli/output.py +0 -0
  67. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/__init__.py +0 -0
  68. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/completion/__init__.py +0 -0
  69. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/completion/completion_engine.py +0 -0
  70. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/completion/completion_refresher.py +0 -0
  71. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/completion/schema_prefetcher.py +0 -0
  72. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/completion/sql_completer.py +0 -0
  73. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/credentials/__init__.py +0 -0
  74. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/credentials/password_sources.py +0 -0
  75. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/dataframes/__init__.py +0 -0
  76. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/dataframes/completion.py +0 -0
  77. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/dataframes/transform.py +0 -0
  78. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/execution/__init__.py +0 -0
  79. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/execution/background_runner.py +0 -0
  80. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/execution/sql_execute.py +0 -0
  81. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/__init__.py +0 -0
  82. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/boundary/__init__.py +0 -0
  83. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/boundary/boundary_tunnel.py +0 -0
  84. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/fzf/__init__.py +0 -0
  85. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/fzf/fzf.py +0 -0
  86. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/kubernetes/__init__.py +0 -0
  87. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/kubernetes/kubectl_tunnel.py +0 -0
  88. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/macos/__init__.py +0 -0
  89. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/macos/macos_keychain.py +0 -0
  90. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/openssh/__init__.py +0 -0
  91. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/openssh/ssh_tunnel.py +0 -0
  92. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/vault/__init__.py +0 -0
  93. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/integrations/vault/vault_credentials.py +0 -0
  94. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/__init__.py +0 -0
  95. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/fzf_history.py +0 -0
  96. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/history.py +0 -0
  97. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/key_bindings.py +0 -0
  98. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/multiline.py +0 -0
  99. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/style.py +0 -0
  100. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/toolbar.py +0 -0
  101. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/prompt_toolkit/utils.py +0 -0
  102. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/pygments/__init__.py +0 -0
  103. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/pygments/mycli_lexer.py +0 -0
  104. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/redirection/__init__.py +0 -0
  105. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/redirection/hybrid_redirection.py +0 -0
  106. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/__init__.py +0 -0
  107. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/db_commands.py +0 -0
  108. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/delimiter_command.py +0 -0
  109. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/dsn_aliases.py +0 -0
  110. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/favorite_queries.py +0 -0
  111. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/io_commands.py +0 -0
  112. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/llm.py +0 -0
  113. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/main.py +0 -0
  114. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/source.py +0 -0
  115. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/special_commands/special_command_utils.py +0 -0
  116. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/sql_result/__init__.py +0 -0
  117. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/sql_result/sql_result.py +0 -0
  118. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/tabular_output/__init__.py +0 -0
  119. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/tabular_output/sql_format.py +0 -0
  120. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/__init__.py +0 -0
  121. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/batch_utils.py +0 -0
  122. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/cli_utils.py +0 -0
  123. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/dsn_utils.py +0 -0
  124. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/interactive_utils.py +0 -0
  125. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/key_binding_utils.py +0 -0
  126. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/keyring_utils.py +0 -0
  127. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/path_utils.py +0 -0
  128. {mycli-2.30.1 → mycli-2.30.3}/mycli/packages/utils/string_utils.py +0 -0
  129. {mycli-2.30.1 → mycli-2.30.3}/mycli/resources/completions/bash/mycli +0 -0
  130. {mycli-2.30.1 → mycli-2.30.3}/mycli/resources/completions/fish/mycli.fish +0 -0
  131. {mycli-2.30.1 → mycli-2.30.3}/mycli/resources/completions/zsh/_mycli +0 -0
  132. {mycli-2.30.1 → mycli-2.30.3}/mycli/types.py +0 -0
  133. {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/SOURCES.txt +0 -0
  134. {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/dependency_links.txt +0 -0
  135. {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/entry_points.txt +0 -0
  136. {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/scm_file_list.json +0 -0
  137. {mycli-2.30.1 → mycli-2.30.3}/mycli.egg-info/top_level.txt +0 -0
  138. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/__init__.py +0 -0
  139. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/__init__.py +0 -0
  140. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/auto_vertical.feature +0 -0
  141. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/basic_commands.feature +0 -0
  142. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/connection.feature +0 -0
  143. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/crud_database.feature +0 -0
  144. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/crud_table.feature +0 -0
  145. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/db_utils.py +0 -0
  146. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/environment.py +0 -0
  147. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/fixture_data/help_commands.txt +0 -0
  148. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/fixture_utils.py +0 -0
  149. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/iocommands.feature +0 -0
  150. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/named_queries.feature +0 -0
  151. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/specials.feature +0 -0
  152. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/__init__.py +0 -0
  153. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/auto_vertical.py +0 -0
  154. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/basic_commands.py +0 -0
  155. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/connection.py +0 -0
  156. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/crud_database.py +0 -0
  157. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/crud_table.py +0 -0
  158. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/iocommands.py +0 -0
  159. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/named_queries.py +0 -0
  160. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/specials.py +0 -0
  161. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/utils.py +0 -0
  162. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/steps/wrappers.py +0 -0
  163. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/features/wrappager.py +0 -0
  164. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/myclirc +0 -0
  165. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/mylogin.cnf +0 -0
  166. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/conftest.py +0 -0
  167. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_app_state.py +0 -0
  168. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_background_runner.py +0 -0
  169. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_bash_completion.py +0 -0
  170. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_batch_utils.py +0 -0
  171. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_boundary_tunnel.py +0 -0
  172. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_checkup.py +0 -0
  173. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_cli_runner.py +0 -0
  174. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_cli_utils.py +0 -0
  175. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_clibuffer.py +0 -0
  176. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_client.py +0 -0
  177. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_client_commands.py +0 -0
  178. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_client_connection.py +0 -0
  179. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_client_query.py +0 -0
  180. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_completer_use_switch.py +0 -0
  181. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_completion_engine.py +0 -0
  182. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_completion_refresher.py +0 -0
  183. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_delimitercommand.py +0 -0
  184. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_dsn_aliases.py +0 -0
  185. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_favoritequeries.py +0 -0
  186. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_fish_completion.py +0 -0
  187. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_fzf.py +0 -0
  188. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_hybrid_redirection.py +0 -0
  189. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_interactive_utils.py +0 -0
  190. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_key_binding_utils.py +0 -0
  191. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_key_bindings.py +0 -0
  192. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_keyring_utils.py +0 -0
  193. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_kubectl_tunnel.py +0 -0
  194. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_macos_keychain.py +0 -0
  195. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_main.py +0 -0
  196. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_main_modes_batch.py +0 -0
  197. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_main_modes_execute.py +0 -0
  198. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_main_modes_list_dsn.py +0 -0
  199. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_main_modes_repl.py +0 -0
  200. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_naive_completion.py +0 -0
  201. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_output.py +0 -0
  202. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_password_sources.py +0 -0
  203. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_path_utils.py +0 -0
  204. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_polars_completion.py +0 -0
  205. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_polars_transform.py +0 -0
  206. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_prompt_toolkit_fzf_history.py +0 -0
  207. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_prompt_toolkit_history.py +0 -0
  208. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_prompt_toolkit_style.py +0 -0
  209. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_prompt_toolkit_toolbar.py +0 -0
  210. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_prompt_toolkit_utils.py +0 -0
  211. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_schema_prefetcher.py +0 -0
  212. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_smart_completion_public_schema_only.py +0 -0
  213. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_commands_init.py +0 -0
  214. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_db_commands.py +0 -0
  215. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_io_commands.py +0 -0
  216. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_llm.py +0 -0
  217. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_main.py +0 -0
  218. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_source.py +0 -0
  219. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_special_utils.py +0 -0
  220. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_sql_execute.py +0 -0
  221. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_sqlcompleter.py +0 -0
  222. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_sqlresult.py +0 -0
  223. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_ssh_tunnel.py +0 -0
  224. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_string_utils.py +0 -0
  225. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_tabular_output.py +0 -0
  226. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_vault.py +0 -0
  227. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/pytests/test_zsh_completion.py +0 -0
  228. {mycli-2.30.1 → mycli-2.30.3}/mycli_test/utils.py +0 -0
  229. {mycli-2.30.1 → mycli-2.30.3}/setup.cfg +0 -0
@@ -24,12 +24,12 @@ jobs:
24
24
  steps:
25
25
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
26
26
 
27
- - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
27
+ - uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
28
28
  with:
29
29
  version: "latest"
30
30
 
31
31
  - name: Set up Python ${{ matrix.python-version }}
32
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
32
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
33
33
  with:
34
34
  python-version: ${{ matrix.python-version }}
35
35
 
@@ -66,12 +66,12 @@ jobs:
66
66
  steps:
67
67
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
68
68
 
69
- - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
69
+ - uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
70
70
  with:
71
71
  version: "latest"
72
72
 
73
73
  - name: Set up Python ${{ matrix.python-version }}
74
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
74
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
75
75
  with:
76
76
  python-version: ${{ matrix.python-version }}
77
77
 
@@ -116,12 +116,12 @@ jobs:
116
116
  steps:
117
117
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
118
118
 
119
- - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
119
+ - uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
120
120
  with:
121
121
  version: 'latest'
122
122
 
123
123
  - name: Set up Python ${{ matrix.python-version }}
124
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
124
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
125
125
  with:
126
126
  python-version: ${{ matrix.python-version }}
127
127
 
@@ -130,7 +130,7 @@ jobs:
130
130
  run: uv sync --extra dev,llm,dataframe -p ${{ matrix.python-version }}
131
131
 
132
132
  - name: Set up MySQL
133
- uses: shogo82148/actions-setup-mysql@1d4ebc60ba1227dd13fc7e6ba845bd3997928d75 # v1.54.2
133
+ uses: shogo82148/actions-setup-mysql@fb8ae72ad9f2f8244e594d6d48a981e975aee78e # v1.56.1
134
134
  with:
135
135
  mysql-version: '9.7'
136
136
  root-password: root
@@ -150,7 +150,7 @@ jobs:
150
150
  steps:
151
151
  - uses: vampire/setup-wsl@4c48163d9f981914dd8caa0fc335fe19cca5bff4 # v7.2.0
152
152
  with:
153
- distribution: Ubuntu-24.04
153
+ distribution: Ubuntu-26.04
154
154
  use-cache: 'true'
155
155
  update: 'false'
156
156
  additional-packages: |
@@ -166,9 +166,9 @@ jobs:
166
166
  run: |
167
167
  mkdir -p /root/mycli
168
168
 
169
- - uses: ubuntu/wsl/.github/actions/wsl-checkout@3b7a6b2a43af18aa541eeee1669ac27656630097
169
+ - uses: ubuntu/wsl/.github/actions/wsl-checkout@e7fb23c6481945b25b974b6cf7a5c7f4550b6cf8
170
170
  with:
171
- distro: Ubuntu-24.04
171
+ distro: Ubuntu-26.04
172
172
  working-dir: /root/mycli
173
173
 
174
174
  - name: Install uv
@@ -220,12 +220,12 @@ jobs:
220
220
  steps:
221
221
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
222
222
 
223
- - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
223
+ - uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
224
224
  with:
225
225
  version: "latest"
226
226
 
227
227
  - name: Set up Python ${{ matrix.python-version }}
228
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
228
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
229
229
  with:
230
230
  python-version: '3.15'
231
231
 
@@ -51,12 +51,12 @@ jobs:
51
51
 
52
52
  steps:
53
53
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
54
- - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
54
+ - uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
55
55
  with:
56
56
  version: "latest"
57
57
 
58
58
  - name: Set up Python ${{ matrix.python-version }}
59
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
59
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
60
60
  with:
61
61
  python-version: ${{ matrix.python-version }}
62
62
 
@@ -93,12 +93,12 @@ jobs:
93
93
  steps:
94
94
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
95
95
 
96
- - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
96
+ - uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
97
97
  with:
98
98
  version: "latest"
99
99
 
100
100
  - name: Set up Python ${{ matrix.python-version }}
101
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
101
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
102
102
  with:
103
103
  python-version: ${{ matrix.python-version }}
104
104
 
@@ -144,12 +144,12 @@ jobs:
144
144
  steps:
145
145
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
146
146
 
147
- - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
147
+ - uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
148
148
  with:
149
149
  version: 'latest'
150
150
 
151
151
  - name: Set up Python ${{ matrix.python-version }}
152
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
152
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
153
153
  with:
154
154
  python-version: ${{ matrix.python-version }}
155
155
 
@@ -158,7 +158,7 @@ jobs:
158
158
  run: uv sync --extra dev,llm,dataframe --python ${{ matrix.python-version }}
159
159
 
160
160
  - name: Set up MySQL
161
- uses: shogo82148/actions-setup-mysql@1d4ebc60ba1227dd13fc7e6ba845bd3997928d75 # v1.54.2
161
+ uses: shogo82148/actions-setup-mysql@fb8ae72ad9f2f8244e594d6d48a981e975aee78e # v1.56.1
162
162
  with:
163
163
  mysql-version: '9.7'
164
164
  root-password: root
@@ -179,7 +179,7 @@ jobs:
179
179
  steps:
180
180
  - uses: vampire/setup-wsl@4c48163d9f981914dd8caa0fc335fe19cca5bff4 # v7.2.0
181
181
  with:
182
- distribution: Ubuntu-24.04
182
+ distribution: Ubuntu-26.04
183
183
  use-cache: 'true'
184
184
  update: 'false'
185
185
  additional-packages: |
@@ -195,9 +195,9 @@ jobs:
195
195
  run: |
196
196
  mkdir -p /root/mycli
197
197
 
198
- - uses: ubuntu/wsl/.github/actions/wsl-checkout@3b7a6b2a43af18aa541eeee1669ac27656630097
198
+ - uses: ubuntu/wsl/.github/actions/wsl-checkout@e7fb23c6481945b25b974b6cf7a5c7f4550b6cf8
199
199
  with:
200
- distro: Ubuntu-24.04
200
+ distro: Ubuntu-26.04
201
201
  working-dir: /root/mycli
202
202
 
203
203
  - name: Install uv
@@ -248,12 +248,12 @@ jobs:
248
248
 
249
249
  steps:
250
250
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
251
- - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
251
+ - uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
252
252
  with:
253
253
  version: "latest"
254
254
 
255
255
  - name: Set up Python
256
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
256
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
257
257
  with:
258
258
  python-version: '3.15'
259
259
 
@@ -284,7 +284,7 @@ jobs:
284
284
  name: python-packages
285
285
  path: dist/
286
286
  - name: Publish to PyPI
287
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
287
+ uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
288
288
 
289
289
  publish-image:
290
290
  name: Publish Image to ghcr.io
@@ -309,7 +309,7 @@ jobs:
309
309
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
310
310
 
311
311
  - name: Log in to the Container registry
312
- uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
312
+ uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0
313
313
  with:
314
314
  registry: ${{ env.REGISTRY }}
315
315
  username: ${{ github.actor }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mycli
3
- Version: 2.30.1
3
+ Version: 2.30.3
4
4
  Summary: Rich MySQL terminal client with autocompletion, syntax highlighting, and dataframes
5
5
  Author: Mycli Core Team
6
6
  License-Expression: BSD-3-Clause
@@ -35,11 +35,11 @@ Requires-Dist: Pygments~=2.21.0
35
35
  Requires-Dist: prompt_toolkit~=3.0.53
36
36
  Requires-Dist: PyMySQL~=1.2.3
37
37
  Requires-Dist: sqlparse~=0.6.0
38
- Requires-Dist: sqlglot~=30.23.0
39
- Requires-Dist: sqlglotc~=30.23.0
38
+ Requires-Dist: sqlglot~=30.25.0
39
+ Requires-Dist: sqlglotc~=30.25.0
40
40
  Requires-Dist: configobj~=5.0.9
41
- Requires-Dist: cli_helpers[styles]~=2.15.2
42
- Requires-Dist: wcwidth~=0.9.2
41
+ Requires-Dist: cli_helpers[styles]~=2.15.3
42
+ Requires-Dist: wcwidth~=0.9.4
43
43
  Requires-Dist: pyperclip~=1.11.0
44
44
  Requires-Dist: pycryptodomex~=3.24.1
45
45
  Requires-Dist: rapidfuzz~=3.14.6
@@ -52,22 +52,22 @@ Requires-Dist: llm~=0.36; extra == "llm"
52
52
  Requires-Dist: setuptools==84.*; extra == "llm"
53
53
  Requires-Dist: pip~=26.2.2; extra == "llm"
54
54
  Provides-Extra: dataframe
55
- Requires-Dist: polars~=2.0.0; extra == "dataframe"
55
+ Requires-Dist: polars~=2.1.0; extra == "dataframe"
56
56
  Requires-Dist: altair~=6.3.0; extra == "dataframe"
57
57
  Requires-Dist: vl-convert-python~=1.9.0; extra == "dataframe"
58
58
  Provides-Extra: all
59
59
  Requires-Dist: mycli[dataframe,llm]; extra == "all"
60
60
  Provides-Extra: dev
61
61
  Requires-Dist: behave~=1.3.3; extra == "dev"
62
- Requires-Dist: coverage~=7.16.2; extra == "dev"
62
+ Requires-Dist: coverage~=7.17.0; extra == "dev"
63
63
  Requires-Dist: mypy~=2.4.0; extra == "dev"
64
64
  Requires-Dist: pexpect~=4.9.0; extra == "dev"
65
- Requires-Dist: pytest~=9.1.1; extra == "dev"
65
+ Requires-Dist: pytest~=9.2.0; extra == "dev"
66
66
  Requires-Dist: pytest-cov~=7.1.0; extra == "dev"
67
67
  Requires-Dist: pytest-random-order~=1.2.0; extra == "dev"
68
- Requires-Dist: tox~=4.64.9; extra == "dev"
68
+ Requires-Dist: tox~=4.67.1; extra == "dev"
69
69
  Requires-Dist: pdbpp~=0.12.1; extra == "dev"
70
- Requires-Dist: ruff~=0.17.0; extra == "dev"
70
+ Requires-Dist: ruff~=0.17.3; extra == "dev"
71
71
  Dynamic: license-file
72
72
 
73
73
  # mycli
@@ -1,3 +1,32 @@
1
+ v2.30.3 (2026/11/05)
2
+ ==============
3
+
4
+ Internal
5
+ --------
6
+ * Update `wcwidth` dependency to v0.9.4.
7
+ * Update `sqlglot` dependency to v30.25.0.
8
+ * Update `coverage` dev dependency to v7.17.0.
9
+ * Update `tox` dev dependency to v4.67.1.
10
+ * Update `ruff` dev dependency to v0.17.3.
11
+ * Update WSL Linux in CI to Ubuntu 26.04.
12
+ * Update `polars` dependency to v2.1.0.
13
+ * Update `pytest` dev dependency to v9.2.0.
14
+
15
+
16
+ v2.30.2 (2026/10/28)
17
+ ==============
18
+
19
+ Bug Fixes
20
+ --------
21
+ * Read and write the package `myclirc` as UTF-8, fixing a startup crash on non-UTF-8 locales such as Japanese Windows.
22
+ * Keep checking later statements for the destructive warning after a single-table `UPDATE ... WHERE`.
23
+
24
+
25
+ Internal
26
+ --------
27
+ * Update `cli_helpers` to v2.15.3.
28
+
29
+
1
30
  v2.30.1 (2026/10/24)
2
31
  ==============
3
32
 
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
- name: mycli-2.30.1/docker/resources/test_db-1.0.7.tar.gz
2
+ name: mycli-2.30.3/docker/resources/test_db-1.0.7.tar.gz
3
3
  size: 35607473 bytes
4
4
  sha256: c44c140f352f35d47fdb65df60f52b779ef552822fad6c4efcfa7b134c3faf84
@@ -120,6 +120,8 @@ Contributors:
120
120
  * Puneet Dixit
121
121
  * Liu Zhenlong
122
122
  * Chris Burr
123
+ * Wei-Lun Li
124
+ * Shaurya Kesarwani
123
125
 
124
126
 
125
127
  Created by:
@@ -197,20 +197,20 @@ def read_config_files(
197
197
  def create_default_config(list_values: bool = True) -> ConfigObj:
198
198
  import mycli
199
199
 
200
- default_config_file = resources.files(mycli).joinpath("myclirc").open('r')
200
+ default_config_file = resources.files(mycli).joinpath("myclirc").open('r', encoding='utf8')
201
201
  return read_config_file(default_config_file, list_values=list_values)
202
202
 
203
203
 
204
204
  def write_default_config(destination: str, overwrite: bool = False) -> None:
205
205
  import mycli
206
206
 
207
- with resources.files(mycli).joinpath("myclirc").open('r') as f:
207
+ with resources.files(mycli).joinpath("myclirc").open('r', encoding='utf8') as f:
208
208
  default_config = f.read()
209
209
  destination = os.path.expanduser(destination)
210
210
  if not overwrite and exists(destination):
211
211
  return
212
212
 
213
- with open(destination, "w") as f:
213
+ with open(destination, "w", encoding='utf8') as f:
214
214
  f.write(default_config)
215
215
 
216
216
 
@@ -391,9 +391,8 @@ def is_destructive(keywords: list[str], queries: str) -> bool:
391
391
  # subtle: if "UPDATE" is one of our keywords AND "query" starts with "UPDATE"
392
392
  if query_starts_with(query, keywords) and query_starts_with(query, ["update"]):
393
393
  if query_has_where_clause(query) and query_is_single_table_update(query):
394
- return False
395
- else:
396
- return True
394
+ continue
395
+ return True
397
396
  if query_starts_with(query, keywords):
398
397
  return True
399
398
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mycli
3
- Version: 2.30.1
3
+ Version: 2.30.3
4
4
  Summary: Rich MySQL terminal client with autocompletion, syntax highlighting, and dataframes
5
5
  Author: Mycli Core Team
6
6
  License-Expression: BSD-3-Clause
@@ -35,11 +35,11 @@ Requires-Dist: Pygments~=2.21.0
35
35
  Requires-Dist: prompt_toolkit~=3.0.53
36
36
  Requires-Dist: PyMySQL~=1.2.3
37
37
  Requires-Dist: sqlparse~=0.6.0
38
- Requires-Dist: sqlglot~=30.23.0
39
- Requires-Dist: sqlglotc~=30.23.0
38
+ Requires-Dist: sqlglot~=30.25.0
39
+ Requires-Dist: sqlglotc~=30.25.0
40
40
  Requires-Dist: configobj~=5.0.9
41
- Requires-Dist: cli_helpers[styles]~=2.15.2
42
- Requires-Dist: wcwidth~=0.9.2
41
+ Requires-Dist: cli_helpers[styles]~=2.15.3
42
+ Requires-Dist: wcwidth~=0.9.4
43
43
  Requires-Dist: pyperclip~=1.11.0
44
44
  Requires-Dist: pycryptodomex~=3.24.1
45
45
  Requires-Dist: rapidfuzz~=3.14.6
@@ -52,22 +52,22 @@ Requires-Dist: llm~=0.36; extra == "llm"
52
52
  Requires-Dist: setuptools==84.*; extra == "llm"
53
53
  Requires-Dist: pip~=26.2.2; extra == "llm"
54
54
  Provides-Extra: dataframe
55
- Requires-Dist: polars~=2.0.0; extra == "dataframe"
55
+ Requires-Dist: polars~=2.1.0; extra == "dataframe"
56
56
  Requires-Dist: altair~=6.3.0; extra == "dataframe"
57
57
  Requires-Dist: vl-convert-python~=1.9.0; extra == "dataframe"
58
58
  Provides-Extra: all
59
59
  Requires-Dist: mycli[dataframe,llm]; extra == "all"
60
60
  Provides-Extra: dev
61
61
  Requires-Dist: behave~=1.3.3; extra == "dev"
62
- Requires-Dist: coverage~=7.16.2; extra == "dev"
62
+ Requires-Dist: coverage~=7.17.0; extra == "dev"
63
63
  Requires-Dist: mypy~=2.4.0; extra == "dev"
64
64
  Requires-Dist: pexpect~=4.9.0; extra == "dev"
65
- Requires-Dist: pytest~=9.1.1; extra == "dev"
65
+ Requires-Dist: pytest~=9.2.0; extra == "dev"
66
66
  Requires-Dist: pytest-cov~=7.1.0; extra == "dev"
67
67
  Requires-Dist: pytest-random-order~=1.2.0; extra == "dev"
68
- Requires-Dist: tox~=4.64.9; extra == "dev"
68
+ Requires-Dist: tox~=4.67.1; extra == "dev"
69
69
  Requires-Dist: pdbpp~=0.12.1; extra == "dev"
70
- Requires-Dist: ruff~=0.17.0; extra == "dev"
70
+ Requires-Dist: ruff~=0.17.3; extra == "dev"
71
71
  Dynamic: license-file
72
72
 
73
73
  # mycli
@@ -5,11 +5,11 @@ Pygments~=2.21.0
5
5
  prompt_toolkit~=3.0.53
6
6
  PyMySQL~=1.2.3
7
7
  sqlparse~=0.6.0
8
- sqlglot~=30.23.0
9
- sqlglotc~=30.23.0
8
+ sqlglot~=30.25.0
9
+ sqlglotc~=30.25.0
10
10
  configobj~=5.0.9
11
- cli_helpers[styles]~=2.15.2
12
- wcwidth~=0.9.2
11
+ cli_helpers[styles]~=2.15.3
12
+ wcwidth~=0.9.4
13
13
  pyperclip~=1.11.0
14
14
  pycryptodomex~=3.24.1
15
15
  rapidfuzz~=3.14.6
@@ -22,21 +22,21 @@ yaspin~=3.5.1
22
22
  mycli[dataframe,llm]
23
23
 
24
24
  [dataframe]
25
- polars~=2.0.0
25
+ polars~=2.1.0
26
26
  altair~=6.3.0
27
27
  vl-convert-python~=1.9.0
28
28
 
29
29
  [dev]
30
30
  behave~=1.3.3
31
- coverage~=7.16.2
31
+ coverage~=7.17.0
32
32
  mypy~=2.4.0
33
33
  pexpect~=4.9.0
34
- pytest~=9.1.1
34
+ pytest~=9.2.0
35
35
  pytest-cov~=7.1.0
36
36
  pytest-random-order~=1.2.0
37
- tox~=4.64.9
37
+ tox~=4.67.1
38
38
  pdbpp~=0.12.1
39
- ruff~=0.17.0
39
+ ruff~=0.17.3
40
40
 
41
41
  [llm]
42
42
  llm~=0.36
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "2.30.3",
3
+ "distance": 0,
4
+ "node": "g30cd5234a2b2afda1342fd80adc62f607ccb5adb",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-11-05"
8
+ }
@@ -6,6 +6,7 @@ from io import BytesIO, StringIO, TextIOWrapper
6
6
  import logging
7
7
  import os
8
8
  import struct
9
+ import subprocess
9
10
  import sys
10
11
  from tempfile import NamedTemporaryFile
11
12
  from types import SimpleNamespace
@@ -435,6 +436,34 @@ def test_create_and_write_default_config(tmp_path) -> None:
435
436
  assert '[main]' in destination.read_text(encoding='utf8')
436
437
 
437
438
 
439
+ def test_default_config_does_not_use_locale_encoding(tmp_path) -> None:
440
+ # The packaged myclirc is UTF-8 with non-ASCII text, so opening it with the
441
+ # locale encoding fails on non-UTF-8 locales such as cp932 (Japanese Windows).
442
+ script = '\n'.join((
443
+ 'import sys',
444
+ 'from mycli.config import create_default_config, write_default_config',
445
+ 'create_default_config()',
446
+ 'write_default_config(sys.argv[1])',
447
+ ))
448
+ result = subprocess.run(
449
+ [
450
+ sys.executable,
451
+ '-X',
452
+ 'warn_default_encoding',
453
+ '-W',
454
+ 'error::EncodingWarning:mycli.config',
455
+ '-c',
456
+ script,
457
+ str(tmp_path / 'myclirc'),
458
+ ],
459
+ capture_output=True,
460
+ encoding='utf8',
461
+ errors='replace',
462
+ )
463
+ assert result.returncode == 0, result.stderr
464
+ assert '[main]' in (tmp_path / 'myclirc').read_text(encoding='utf8')
465
+
466
+
438
467
  def test_get_mylogin_cnf_path_returns_none_for_missing_file(monkeypatch, tmp_path) -> None:
439
468
  monkeypatch.setenv('MYSQL_TEST_LOGIN_FILE', str(tmp_path / 'missing.mylogin.cnf'))
440
469
 
@@ -456,6 +456,16 @@ def test_is_destructive_update_with_where_clause_and_comment():
456
456
  assert is_destructive(["update"], sql) is False
457
457
 
458
458
 
459
+ def test_is_destructive_checks_queries_after_safe_update():
460
+ sql = "UPDATE test SET x = 1 WHERE id = 1;\ndrop database foo;"
461
+ assert is_destructive(["update", "drop"], sql) is True
462
+
463
+
464
+ def test_is_destructive_checks_updates_after_safe_update():
465
+ sql = "UPDATE test SET x = 1 WHERE id = 1;\nUPDATE test SET x = 2;"
466
+ assert is_destructive(["update"], sql) is True
467
+
468
+
459
469
  def test_is_destructive_update_multiple_tables_with_where_clause():
460
470
  sql = "use test;\nshow databases;\nUPDATE test, foo SET x = 1 WHERE id = 1;"
461
471
  assert is_destructive(["update"], sql) is True
@@ -32,11 +32,11 @@ dependencies = [
32
32
  "prompt_toolkit ~= 3.0.53",
33
33
  "PyMySQL ~= 1.2.3",
34
34
  "sqlparse ~= 0.6.0",
35
- "sqlglot ~= 30.23.0",
36
- "sqlglotc ~= 30.23.0",
35
+ "sqlglot ~= 30.25.0",
36
+ "sqlglotc ~= 30.25.0",
37
37
  "configobj ~= 5.0.9",
38
- "cli_helpers[styles] ~= 2.15.2",
39
- "wcwidth ~= 0.9.2",
38
+ "cli_helpers[styles] ~= 2.15.3",
39
+ "wcwidth ~= 0.9.4",
40
40
  "pyperclip ~= 1.11.0",
41
41
  "pycryptodomex ~= 3.24.1",
42
42
  "rapidfuzz ~= 3.14.6",
@@ -67,7 +67,7 @@ llm = [
67
67
  "pip ~= 26.2.2",
68
68
  ]
69
69
  dataframe = [
70
- "polars ~= 2.0.0",
70
+ "polars ~= 2.1.0",
71
71
  "altair ~= 6.3.0",
72
72
  "vl-convert-python ~= 1.9.0",
73
73
  ]
@@ -76,15 +76,15 @@ all = [
76
76
  ]
77
77
  dev = [
78
78
  "behave ~= 1.3.3",
79
- "coverage ~= 7.16.2",
79
+ "coverage ~= 7.17.0",
80
80
  "mypy ~= 2.4.0",
81
81
  "pexpect ~= 4.9.0",
82
- "pytest ~= 9.1.1",
82
+ "pytest ~= 9.2.0",
83
83
  "pytest-cov ~= 7.1.0",
84
84
  "pytest-random-order ~= 1.2.0",
85
- "tox ~= 4.64.9",
85
+ "tox ~= 4.67.1",
86
86
  "pdbpp ~= 0.12.1",
87
- "ruff ~= 0.17.0", # keep in sync with the tool.tox.env.style stanza below
87
+ "ruff ~= 0.17.3", # keep in sync with the tool.tox.env.style stanza below
88
88
  ]
89
89
 
90
90
  [project.scripts]
@@ -101,7 +101,6 @@ exclude-newer = '1 week'
101
101
 
102
102
  [tool.uv.exclude-newer-package]
103
103
  cli_helpers = false
104
- pip = false # removeme after 2026-10-27
105
104
 
106
105
  [tool.ruff]
107
106
  target-version = 'py311'
@@ -165,7 +164,7 @@ allowlist_externals = ['rm', 'uv']
165
164
 
166
165
  [tool.tox.env.style]
167
166
  skip_install = true
168
- deps = ['ruff~=0.17.0'] # keep in sync with dev dependency group above
167
+ deps = ['ruff~=0.17.3'] # keep in sync with dev dependency group above
169
168
  commands = [['ruff', 'check'],
170
169
  ['ruff', 'format', '--diff']]
171
170
 
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "2.30.1",
3
- "distance": 0,
4
- "node": "g8145990aebf8446de7f4c2eaa78a1fdcfc5604ef",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-10-24"
8
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes