mycli 2.18.4__tar.gz → 2.19.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. {mycli-2.18.4 → mycli-2.19.0}/.github/workflows/ci.yml +3 -2
  2. {mycli-2.18.4 → mycli-2.19.0}/.github/workflows/publish.yml +3 -2
  3. {mycli-2.18.4/mycli.egg-info → mycli-2.19.0}/PKG-INFO +25 -36
  4. {mycli-2.18.4 → mycli-2.19.0}/README.md +18 -29
  5. {mycli-2.18.4 → mycli-2.19.0}/changelog.md +39 -0
  6. {mycli-2.18.4 → mycli-2.19.0}/mycli/TIPS +6 -0
  7. {mycli-2.18.4 → mycli-2.19.0}/mycli/client_commands.py +1 -0
  8. {mycli-2.18.4 → mycli-2.19.0}/mycli/client_connection.py +6 -6
  9. {mycli-2.18.4 → mycli-2.19.0}/mycli/main_modes/batch.py +1 -2
  10. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/special/__init__.py +2 -0
  11. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/special/dbcommands.py +19 -1
  12. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/special/iocommands.py +3 -2
  13. {mycli-2.18.4 → mycli-2.19.0/mycli.egg-info}/PKG-INFO +25 -36
  14. {mycli-2.18.4 → mycli-2.19.0}/mycli.egg-info/requires.txt +6 -6
  15. mycli-2.19.0/mycli.egg-info/scm_version.json +8 -0
  16. {mycli-2.18.4 → mycli-2.19.0}/pyproject.toml +8 -13
  17. {mycli-2.18.4 → mycli-2.19.0}/test/features/fixture_data/help_commands.txt +1 -0
  18. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_client_commands.py +1 -0
  19. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_client_connection.py +1 -1
  20. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_main_modes_batch.py +0 -3
  21. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_special_dbcommands.py +55 -2
  22. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_special_init.py +1 -0
  23. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_special_iocommands.py +15 -0
  24. mycli-2.18.4/mycli.egg-info/scm_version.json +0 -8
  25. {mycli-2.18.4 → mycli-2.19.0}/.git-blame-ignore-revs +0 -0
  26. {mycli-2.18.4 → mycli-2.19.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  27. {mycli-2.18.4 → mycli-2.19.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  28. {mycli-2.18.4 → mycli-2.19.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  29. {mycli-2.18.4 → mycli-2.19.0}/.github/dependabot.yml +0 -0
  30. {mycli-2.18.4 → mycli-2.19.0}/.github/workflows/lint.yml +0 -0
  31. {mycli-2.18.4 → mycli-2.19.0}/.github/workflows/typecheck.yml +0 -0
  32. {mycli-2.18.4 → mycli-2.19.0}/.gitignore +0 -0
  33. {mycli-2.18.4 → mycli-2.19.0}/AGENTS.md +0 -0
  34. {mycli-2.18.4 → mycli-2.19.0}/AUTHORS.rst +0 -0
  35. {mycli-2.18.4 → mycli-2.19.0}/CONTRIBUTING.md +0 -0
  36. {mycli-2.18.4 → mycli-2.19.0}/LICENSE.txt +0 -0
  37. {mycli-2.18.4 → mycli-2.19.0}/MANIFEST.in +0 -0
  38. {mycli-2.18.4 → mycli-2.19.0}/SPONSORS.rst +0 -0
  39. {mycli-2.18.4 → mycli-2.19.0}/doc/key_bindings.rst +0 -0
  40. {mycli-2.18.4 → mycli-2.19.0}/doc/llm.md +0 -0
  41. {mycli-2.18.4 → mycli-2.19.0}/doc/screenshots/main.gif +0 -0
  42. {mycli-2.18.4 → mycli-2.19.0}/doc/screenshots/tables.png +0 -0
  43. {mycli-2.18.4 → mycli-2.19.0}/doc/screenshots/total_histogram.png +0 -0
  44. {mycli-2.18.4 → mycli-2.19.0}/doc/transforms.md +0 -0
  45. {mycli-2.18.4 → mycli-2.19.0}/mycli/AUTHORS +0 -0
  46. {mycli-2.18.4 → mycli-2.19.0}/mycli/SPONSORS +0 -0
  47. {mycli-2.18.4 → mycli-2.19.0}/mycli/__init__.py +0 -0
  48. {mycli-2.18.4 → mycli-2.19.0}/mycli/app_state.py +0 -0
  49. {mycli-2.18.4 → mycli-2.19.0}/mycli/boundary_tunnel.py +0 -0
  50. {mycli-2.18.4 → mycli-2.19.0}/mycli/cli_runner.py +0 -0
  51. {mycli-2.18.4 → mycli-2.19.0}/mycli/clibuffer.py +0 -0
  52. {mycli-2.18.4 → mycli-2.19.0}/mycli/client.py +0 -0
  53. {mycli-2.18.4 → mycli-2.19.0}/mycli/client_query.py +0 -0
  54. {mycli-2.18.4 → mycli-2.19.0}/mycli/clistyle.py +0 -0
  55. {mycli-2.18.4 → mycli-2.19.0}/mycli/clitoolbar.py +0 -0
  56. {mycli-2.18.4 → mycli-2.19.0}/mycli/compat.py +0 -0
  57. {mycli-2.18.4 → mycli-2.19.0}/mycli/completion_refresher.py +0 -0
  58. {mycli-2.18.4 → mycli-2.19.0}/mycli/config.py +0 -0
  59. {mycli-2.18.4 → mycli-2.19.0}/mycli/constants.py +0 -0
  60. {mycli-2.18.4 → mycli-2.19.0}/mycli/key_bindings.py +0 -0
  61. {mycli-2.18.4 → mycli-2.19.0}/mycli/lexer.py +0 -0
  62. {mycli-2.18.4 → mycli-2.19.0}/mycli/main.py +0 -0
  63. {mycli-2.18.4 → mycli-2.19.0}/mycli/main_modes/checkup.py +0 -0
  64. {mycli-2.18.4 → mycli-2.19.0}/mycli/main_modes/completions.py +0 -0
  65. {mycli-2.18.4 → mycli-2.19.0}/mycli/main_modes/execute.py +0 -0
  66. {mycli-2.18.4 → mycli-2.19.0}/mycli/main_modes/list_dsn.py +0 -0
  67. {mycli-2.18.4 → mycli-2.19.0}/mycli/main_modes/repl.py +0 -0
  68. {mycli-2.18.4 → mycli-2.19.0}/mycli/myclirc +0 -0
  69. {mycli-2.18.4 → mycli-2.19.0}/mycli/output.py +0 -0
  70. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/__init__.py +0 -0
  71. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/batch_utils.py +0 -0
  72. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/cli_utils.py +0 -0
  73. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/completion_engine.py +0 -0
  74. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/filepaths.py +0 -0
  75. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/hybrid_redirection.py +0 -0
  76. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/interactive_utils.py +0 -0
  77. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/key_binding_utils.py +0 -0
  78. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/polars_completion.py +0 -0
  79. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/polars_transform.py +0 -0
  80. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/ptoolkit/__init__.py +0 -0
  81. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/ptoolkit/fzf.py +0 -0
  82. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/ptoolkit/history.py +0 -0
  83. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/ptoolkit/utils.py +0 -0
  84. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/special/delimitercommand.py +0 -0
  85. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/special/dsn_aliases.py +0 -0
  86. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/special/favoritequeries.py +0 -0
  87. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/special/llm.py +0 -0
  88. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/special/main.py +0 -0
  89. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/special/utils.py +0 -0
  90. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/sql_utils.py +0 -0
  91. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/sqlresult.py +0 -0
  92. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/string_utils.py +0 -0
  93. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/tabular_output/__init__.py +0 -0
  94. {mycli-2.18.4 → mycli-2.19.0}/mycli/packages/tabular_output/sql_format.py +0 -0
  95. {mycli-2.18.4 → mycli-2.19.0}/mycli/password_sources.py +0 -0
  96. {mycli-2.18.4 → mycli-2.19.0}/mycli/resources/completions/bash/mycli +0 -0
  97. {mycli-2.18.4 → mycli-2.19.0}/mycli/resources/completions/fish/mycli.fish +0 -0
  98. {mycli-2.18.4 → mycli-2.19.0}/mycli/resources/completions/zsh/_mycli +0 -0
  99. {mycli-2.18.4 → mycli-2.19.0}/mycli/schema_prefetcher.py +0 -0
  100. {mycli-2.18.4 → mycli-2.19.0}/mycli/sqlcompleter.py +0 -0
  101. {mycli-2.18.4 → mycli-2.19.0}/mycli/sqlexecute.py +0 -0
  102. {mycli-2.18.4 → mycli-2.19.0}/mycli/ssh_tunnel.py +0 -0
  103. {mycli-2.18.4 → mycli-2.19.0}/mycli/types.py +0 -0
  104. {mycli-2.18.4 → mycli-2.19.0}/mycli/vault.py +0 -0
  105. {mycli-2.18.4 → mycli-2.19.0}/mycli.egg-info/SOURCES.txt +0 -0
  106. {mycli-2.18.4 → mycli-2.19.0}/mycli.egg-info/dependency_links.txt +0 -0
  107. {mycli-2.18.4 → mycli-2.19.0}/mycli.egg-info/entry_points.txt +0 -0
  108. {mycli-2.18.4 → mycli-2.19.0}/mycli.egg-info/scm_file_list.json +0 -0
  109. {mycli-2.18.4 → mycli-2.19.0}/mycli.egg-info/top_level.txt +0 -0
  110. {mycli-2.18.4 → mycli-2.19.0}/setup.cfg +0 -0
  111. {mycli-2.18.4 → mycli-2.19.0}/test/__init__.py +0 -0
  112. {mycli-2.18.4 → mycli-2.19.0}/test/features/__init__.py +0 -0
  113. {mycli-2.18.4 → mycli-2.19.0}/test/features/auto_vertical.feature +0 -0
  114. {mycli-2.18.4 → mycli-2.19.0}/test/features/basic_commands.feature +0 -0
  115. {mycli-2.18.4 → mycli-2.19.0}/test/features/connection.feature +0 -0
  116. {mycli-2.18.4 → mycli-2.19.0}/test/features/crud_database.feature +0 -0
  117. {mycli-2.18.4 → mycli-2.19.0}/test/features/crud_table.feature +0 -0
  118. {mycli-2.18.4 → mycli-2.19.0}/test/features/db_utils.py +0 -0
  119. {mycli-2.18.4 → mycli-2.19.0}/test/features/environment.py +0 -0
  120. {mycli-2.18.4 → mycli-2.19.0}/test/features/fixture_utils.py +0 -0
  121. {mycli-2.18.4 → mycli-2.19.0}/test/features/iocommands.feature +0 -0
  122. {mycli-2.18.4 → mycli-2.19.0}/test/features/named_queries.feature +0 -0
  123. {mycli-2.18.4 → mycli-2.19.0}/test/features/specials.feature +0 -0
  124. {mycli-2.18.4 → mycli-2.19.0}/test/features/steps/__init__.py +0 -0
  125. {mycli-2.18.4 → mycli-2.19.0}/test/features/steps/auto_vertical.py +0 -0
  126. {mycli-2.18.4 → mycli-2.19.0}/test/features/steps/basic_commands.py +0 -0
  127. {mycli-2.18.4 → mycli-2.19.0}/test/features/steps/connection.py +0 -0
  128. {mycli-2.18.4 → mycli-2.19.0}/test/features/steps/crud_database.py +0 -0
  129. {mycli-2.18.4 → mycli-2.19.0}/test/features/steps/crud_table.py +0 -0
  130. {mycli-2.18.4 → mycli-2.19.0}/test/features/steps/iocommands.py +0 -0
  131. {mycli-2.18.4 → mycli-2.19.0}/test/features/steps/named_queries.py +0 -0
  132. {mycli-2.18.4 → mycli-2.19.0}/test/features/steps/specials.py +0 -0
  133. {mycli-2.18.4 → mycli-2.19.0}/test/features/steps/utils.py +0 -0
  134. {mycli-2.18.4 → mycli-2.19.0}/test/features/steps/wrappers.py +0 -0
  135. {mycli-2.18.4 → mycli-2.19.0}/test/features/wrappager.py +0 -0
  136. {mycli-2.18.4 → mycli-2.19.0}/test/myclirc +0 -0
  137. {mycli-2.18.4 → mycli-2.19.0}/test/mylogin.cnf +0 -0
  138. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/conftest.py +0 -0
  139. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_app_state.py +0 -0
  140. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_bash_completion.py +0 -0
  141. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_batch_utils.py +0 -0
  142. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_boundary_tunnel.py +0 -0
  143. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_checkup.py +0 -0
  144. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_cli_runner.py +0 -0
  145. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_cli_utils.py +0 -0
  146. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_clibuffer.py +0 -0
  147. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_client.py +0 -0
  148. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_client_query.py +0 -0
  149. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_clistyle.py +0 -0
  150. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_clitoolbar.py +0 -0
  151. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_completer_use_switch.py +0 -0
  152. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_completion_engine.py +0 -0
  153. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_completion_refresher.py +0 -0
  154. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_config.py +0 -0
  155. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_delimitercommand.py +0 -0
  156. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_dsn_aliases.py +0 -0
  157. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_favoritequeries.py +0 -0
  158. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_filepaths.py +0 -0
  159. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_fish_completion.py +0 -0
  160. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_hybrid_redirection.py +0 -0
  161. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_interactive_utils.py +0 -0
  162. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_key_binding_utils.py +0 -0
  163. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_key_bindings.py +0 -0
  164. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_main.py +0 -0
  165. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_main_modes_execute.py +0 -0
  166. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_main_modes_list_dsn.py +0 -0
  167. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_main_modes_repl.py +0 -0
  168. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_naive_completion.py +0 -0
  169. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_output.py +0 -0
  170. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_password_sources.py +0 -0
  171. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_polars_completion.py +0 -0
  172. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_polars_transform.py +0 -0
  173. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_ptoolkit_fzf.py +0 -0
  174. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_ptoolkit_history.py +0 -0
  175. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_ptoolkit_utils.py +0 -0
  176. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_schema_prefetcher.py +0 -0
  177. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_smart_completion_public_schema_only.py +0 -0
  178. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_special_llm.py +0 -0
  179. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_special_main.py +0 -0
  180. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_special_utils.py +0 -0
  181. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_sql_utils.py +0 -0
  182. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_sqlcompleter.py +0 -0
  183. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_sqlexecute.py +0 -0
  184. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_sqlresult.py +0 -0
  185. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_ssh_tunnel.py +0 -0
  186. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_string_utils.py +0 -0
  187. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_tabular_output.py +0 -0
  188. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_vault.py +0 -0
  189. {mycli-2.18.4 → mycli-2.19.0}/test/pytests/test_zsh_completion.py +0 -0
  190. {mycli-2.18.4 → mycli-2.19.0}/test/utils.py +0 -0
@@ -151,7 +151,8 @@ jobs:
151
151
  - uses: vampire/setup-wsl@d1da7f2c0322a5ee4f24975344f67fc0f5baf364 # v7.0.0
152
152
  with:
153
153
  distribution: Ubuntu-24.04
154
- update: 'true'
154
+ use-cache: 'true'
155
+ update: 'false'
155
156
  additional-packages: |
156
157
  curl
157
158
  git
@@ -165,7 +166,7 @@ jobs:
165
166
  run: |
166
167
  mkdir -p /root/mycli
167
168
 
168
- - uses: ubuntu/wsl/.github/actions/wsl-checkout@e2114d0a5ebea62e6b2e1565f175871ed7558d20
169
+ - uses: ubuntu/wsl/.github/actions/wsl-checkout@3b7a6b2a43af18aa541eeee1669ac27656630097
169
170
  with:
170
171
  distro: Ubuntu-24.04
171
172
  working-dir: /root/mycli
@@ -159,7 +159,8 @@ jobs:
159
159
  - uses: vampire/setup-wsl@d1da7f2c0322a5ee4f24975344f67fc0f5baf364 # v7.0.0
160
160
  with:
161
161
  distribution: Ubuntu-24.04
162
- update: 'true'
162
+ use-cache: 'true'
163
+ update: 'false'
163
164
  additional-packages: |
164
165
  curl
165
166
  git
@@ -173,7 +174,7 @@ jobs:
173
174
  run: |
174
175
  mkdir -p /root/mycli
175
176
 
176
- - uses: ubuntu/wsl/.github/actions/wsl-checkout@e2114d0a5ebea62e6b2e1565f175871ed7558d20
177
+ - uses: ubuntu/wsl/.github/actions/wsl-checkout@3b7a6b2a43af18aa541eeee1669ac27656630097
177
178
  with:
178
179
  distro: Ubuntu-24.04
179
180
  working-dir: /root/mycli
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mycli
3
- Version: 2.18.4
3
+ Version: 2.19.0
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
@@ -28,15 +28,15 @@ Requires-Python: >=3.10
28
28
  Description-Content-Type: text/markdown
29
29
  License-File: LICENSE.txt
30
30
  License-File: AUTHORS.rst
31
- Requires-Dist: click~=8.3.3
31
+ Requires-Dist: click~=8.5.0
32
32
  Requires-Dist: clickdc~=0.1.1
33
33
  Requires-Dist: cryptography~=50.0.0
34
34
  Requires-Dist: Pygments~=2.21.0
35
35
  Requires-Dist: prompt_toolkit<4.0.0,>=3.0.41
36
36
  Requires-Dist: PyMySQL~=1.1.2
37
- Requires-Dist: sqlparse<0.6.0,>=0.3.0
38
- Requires-Dist: sqlglot~=30.12.0
39
- Requires-Dist: sqlglotc~=30.12.0
37
+ Requires-Dist: sqlparse~=0.6.0
38
+ Requires-Dist: sqlglot~=30.17.0
39
+ Requires-Dist: sqlglotc~=30.17.0
40
40
  Requires-Dist: configobj~=5.0.9
41
41
  Requires-Dist: cli_helpers[styles]~=2.15.1
42
42
  Requires-Dist: wcwidth~=0.8.2
@@ -50,9 +50,9 @@ Requires-Dist: yaspin~=3.4.0
50
50
  Provides-Extra: llm
51
51
  Requires-Dist: llm~=0.33; extra == "llm"
52
52
  Requires-Dist: setuptools==83.*; extra == "llm"
53
- Requires-Dist: pip~=26.1.2; extra == "llm"
53
+ Requires-Dist: pip~=26.2.1; extra == "llm"
54
54
  Provides-Extra: dataframe
55
- Requires-Dist: polars~=1.42.1; extra == "dataframe"
55
+ Requires-Dist: polars~=1.44.1; extra == "dataframe"
56
56
  Requires-Dist: altair~=6.2.2; extra == "dataframe"
57
57
  Requires-Dist: vl-convert-python~=1.9.0; extra == "dataframe"
58
58
  Provides-Extra: all
@@ -75,7 +75,7 @@ Dynamic: license-file
75
75
  [![Build Status](https://github.com/dbcli/mycli/workflows/mycli/badge.svg)](https://github.com/dbcli/mycli/actions?query=workflow%3Amycli)
76
76
  [![License](https://img.shields.io/github/license/dbcli/mycli.svg)](https://github.com/dbcli/mycli/blob/main/LICENSE.txt)
77
77
 
78
- A command line client for MySQL with auto-completion and syntax highlighting.
78
+ Rich MySQL terminal client with auto-completion, syntax highlighting, and dataframes.
79
79
 
80
80
  Homepage: [https://mycli.net](https://mycli.net)
81
81
 
@@ -93,14 +93,12 @@ Mycli is compatible with MySQL, MariaDB, Percona, TiDB, and Apache Doris.
93
93
 
94
94
  Postgres Equivalent: [https://pgcli.com](https://pgcli.com)
95
95
 
96
- Release 2.x
97
- -----------
96
+ # Release 2.x
98
97
 
99
98
  Release 2.0.0 has [breaking changes](https://github.com/dbcli/mycli/blob/v2.0.0/changelog.md#breaking-changes)!
100
99
 
101
100
 
102
- Quick Start
103
- -----------
101
+ # Quick Start
104
102
 
105
103
  If you already know how to install Python packages, then you can install mycli
106
104
  via `pip`. This package is always up to date.
@@ -111,19 +109,19 @@ You might need `sudo` on Linux.
111
109
  pip install --upgrade 'mycli[all]'
112
110
  ```
113
111
 
114
- or, only on macOS (`pygments` is optional but recommended):
112
+ or, on macOS (`pygments` is optional but recommended):
115
113
 
116
114
  ```bash
117
115
  brew update && brew install mycli pygments
118
116
  ```
119
117
 
120
- or, only on Debian or Ubuntu (`fzf` and `pygments` are optional but recommended):
118
+ or, on Debian or Ubuntu (`fzf` and `pygments` are optional but recommended):
121
119
 
122
120
  ```bash
123
121
  sudo apt-get install mycli fzf python3-pygments
124
122
  ```
125
123
 
126
- ### Usage
124
+ # Usage
127
125
 
128
126
  See
129
127
 
@@ -131,11 +129,9 @@ See
131
129
  mycli --help
132
130
  ```
133
131
 
134
- Features
135
- --------
132
+ # Features
136
133
 
137
- * Auto-completion as you type for SQL keywords as well as tables, views,
138
- columns, enums, and more!
134
+ * Auto-completion as you type for SQL keywords as well as tables, views, columns, enums, and more!
139
135
  * Fuzzy history search using [fzf](https://github.com/junegunn/fzf).
140
136
  * Output explorer using [fzf](https://github.com/junegunn/fzf) or other tools.
141
137
  * Syntax highlighting using [Pygments](https://pygments.org/).
@@ -147,8 +143,8 @@ Features
147
143
  `/fs <alias> <query>` and execute it with `/f <alias>` or `/f <alias> --key=value`.
148
144
  * Timing of sql statements and table rendering.
149
145
  * Log every query and its results to a file (disabled by default).
150
- * Pretty print tabular data (with colors!).
151
- * Support for SSL connections
146
+ * Pretty print tabular data with colors.
147
+ * Support for SSL connections.
152
148
  * Shell-style trailing redirects with `$>`, `$>>` and `$|` operators.
153
149
  * [Polars](https://pola.rs) dataframe [transforms and plots](https://github.com/dbcli/mycli/blob/main/doc/transforms.md) with `.|`, and Parquet saves with `.>`.
154
150
  * Support for [querying LLMs](https://www.mycli.net/llm) with context derived from your schema using `/llm`.
@@ -160,14 +156,7 @@ options in that file to configure the above features, and more.
160
156
  Some features are only exposed as [key bindings](https://github.com/dbcli/mycli/blob/main/doc/key_bindings.rst).
161
157
 
162
158
 
163
- Implementation
164
- --------------
165
-
166
- `mycli` is written using [prompt_toolkit](https://github.com/jonathanslenders/python-prompt-toolkit/) and other Python libraries.
167
-
168
-
169
- Contributions
170
- -------------
159
+ # Contributions
171
160
 
172
161
  If you're interested in contributing to this project, first of all we would like
173
162
  to extend our heartfelt gratitude. We've written a small doc to describe how to
@@ -175,9 +164,9 @@ get mycli running in a development setup.
175
164
 
176
165
  https://github.com/dbcli/mycli/blob/main/CONTRIBUTING.md
177
166
 
178
- ## Additional Install Instructions
167
+ # Additional Install Instructions
179
168
 
180
- ### Shell Completions
169
+ ## Shell Completions
181
170
 
182
171
  If installed via Homebrew, shell completions [may already be configured](https://docs.brew.sh/Shell-Completion).
183
172
 
@@ -203,7 +192,7 @@ team but provided by OS package maintainers. OS packages could be considerably
203
192
  out of date.
204
193
 
205
194
  If present, the `fzf` package can be used for fuzzy history search, and as an
206
- output "explorer" with the `\x` special command. `pygemtize` can be used for
195
+ output "explorer" with the `\x` special command. `pygmentize` can be used for
207
196
  syntax highlighting within the fuzzy history search. The `less` package is
208
197
  also expected, but almost always already installed.
209
198
 
@@ -271,7 +260,7 @@ pip install --upgrade 'mycli[all]'
271
260
 
272
261
  PRs to complete WSL support would be welcome!
273
262
 
274
- ### Thanks
263
+ # Thanks
275
264
 
276
265
  This project was funded through Kickstarter. Our thanks to the [backers](https://mycli.net/sponsors) who supported the project.
277
266
 
@@ -287,7 +276,7 @@ and printing error messages.
287
276
  Thanks to [PyMysql](https://github.com/PyMySQL/PyMySQL) for a pure Python adapter to MySQL databases.
288
277
 
289
278
 
290
- ### Compatibility
279
+ # Compatibility
291
280
 
292
281
  Mycli is tested on macOS (full), Linux (full), Windows (partial), and WSL
293
282
  (partial), and requires Python 3.10 or better.
@@ -301,9 +290,9 @@ following in `~/.myclirc`:
301
290
  default_character_set = utf8
302
291
  ```
303
292
 
304
- or set `--charset=utf8` when invoking mycli
293
+ or use `--charset=utf8` when invoking mycli.
305
294
 
306
- ### Configuration and Usage
295
+ # Configuration and Usage
307
296
 
308
297
  For more information on using and configuring mycli, [check out our documentation](https://mycli.net/docs).
309
298
 
@@ -3,7 +3,7 @@
3
3
  [![Build Status](https://github.com/dbcli/mycli/workflows/mycli/badge.svg)](https://github.com/dbcli/mycli/actions?query=workflow%3Amycli)
4
4
  [![License](https://img.shields.io/github/license/dbcli/mycli.svg)](https://github.com/dbcli/mycli/blob/main/LICENSE.txt)
5
5
 
6
- A command line client for MySQL with auto-completion and syntax highlighting.
6
+ Rich MySQL terminal client with auto-completion, syntax highlighting, and dataframes.
7
7
 
8
8
  Homepage: [https://mycli.net](https://mycli.net)
9
9
 
@@ -21,14 +21,12 @@ Mycli is compatible with MySQL, MariaDB, Percona, TiDB, and Apache Doris.
21
21
 
22
22
  Postgres Equivalent: [https://pgcli.com](https://pgcli.com)
23
23
 
24
- Release 2.x
25
- -----------
24
+ # Release 2.x
26
25
 
27
26
  Release 2.0.0 has [breaking changes](https://github.com/dbcli/mycli/blob/v2.0.0/changelog.md#breaking-changes)!
28
27
 
29
28
 
30
- Quick Start
31
- -----------
29
+ # Quick Start
32
30
 
33
31
  If you already know how to install Python packages, then you can install mycli
34
32
  via `pip`. This package is always up to date.
@@ -39,19 +37,19 @@ You might need `sudo` on Linux.
39
37
  pip install --upgrade 'mycli[all]'
40
38
  ```
41
39
 
42
- or, only on macOS (`pygments` is optional but recommended):
40
+ or, on macOS (`pygments` is optional but recommended):
43
41
 
44
42
  ```bash
45
43
  brew update && brew install mycli pygments
46
44
  ```
47
45
 
48
- or, only on Debian or Ubuntu (`fzf` and `pygments` are optional but recommended):
46
+ or, on Debian or Ubuntu (`fzf` and `pygments` are optional but recommended):
49
47
 
50
48
  ```bash
51
49
  sudo apt-get install mycli fzf python3-pygments
52
50
  ```
53
51
 
54
- ### Usage
52
+ # Usage
55
53
 
56
54
  See
57
55
 
@@ -59,11 +57,9 @@ See
59
57
  mycli --help
60
58
  ```
61
59
 
62
- Features
63
- --------
60
+ # Features
64
61
 
65
- * Auto-completion as you type for SQL keywords as well as tables, views,
66
- columns, enums, and more!
62
+ * Auto-completion as you type for SQL keywords as well as tables, views, columns, enums, and more!
67
63
  * Fuzzy history search using [fzf](https://github.com/junegunn/fzf).
68
64
  * Output explorer using [fzf](https://github.com/junegunn/fzf) or other tools.
69
65
  * Syntax highlighting using [Pygments](https://pygments.org/).
@@ -75,8 +71,8 @@ Features
75
71
  `/fs <alias> <query>` and execute it with `/f <alias>` or `/f <alias> --key=value`.
76
72
  * Timing of sql statements and table rendering.
77
73
  * Log every query and its results to a file (disabled by default).
78
- * Pretty print tabular data (with colors!).
79
- * Support for SSL connections
74
+ * Pretty print tabular data with colors.
75
+ * Support for SSL connections.
80
76
  * Shell-style trailing redirects with `$>`, `$>>` and `$|` operators.
81
77
  * [Polars](https://pola.rs) dataframe [transforms and plots](https://github.com/dbcli/mycli/blob/main/doc/transforms.md) with `.|`, and Parquet saves with `.>`.
82
78
  * Support for [querying LLMs](https://www.mycli.net/llm) with context derived from your schema using `/llm`.
@@ -88,14 +84,7 @@ options in that file to configure the above features, and more.
88
84
  Some features are only exposed as [key bindings](https://github.com/dbcli/mycli/blob/main/doc/key_bindings.rst).
89
85
 
90
86
 
91
- Implementation
92
- --------------
93
-
94
- `mycli` is written using [prompt_toolkit](https://github.com/jonathanslenders/python-prompt-toolkit/) and other Python libraries.
95
-
96
-
97
- Contributions
98
- -------------
87
+ # Contributions
99
88
 
100
89
  If you're interested in contributing to this project, first of all we would like
101
90
  to extend our heartfelt gratitude. We've written a small doc to describe how to
@@ -103,9 +92,9 @@ get mycli running in a development setup.
103
92
 
104
93
  https://github.com/dbcli/mycli/blob/main/CONTRIBUTING.md
105
94
 
106
- ## Additional Install Instructions
95
+ # Additional Install Instructions
107
96
 
108
- ### Shell Completions
97
+ ## Shell Completions
109
98
 
110
99
  If installed via Homebrew, shell completions [may already be configured](https://docs.brew.sh/Shell-Completion).
111
100
 
@@ -131,7 +120,7 @@ team but provided by OS package maintainers. OS packages could be considerably
131
120
  out of date.
132
121
 
133
122
  If present, the `fzf` package can be used for fuzzy history search, and as an
134
- output "explorer" with the `\x` special command. `pygemtize` can be used for
123
+ output "explorer" with the `\x` special command. `pygmentize` can be used for
135
124
  syntax highlighting within the fuzzy history search. The `less` package is
136
125
  also expected, but almost always already installed.
137
126
 
@@ -199,7 +188,7 @@ pip install --upgrade 'mycli[all]'
199
188
 
200
189
  PRs to complete WSL support would be welcome!
201
190
 
202
- ### Thanks
191
+ # Thanks
203
192
 
204
193
  This project was funded through Kickstarter. Our thanks to the [backers](https://mycli.net/sponsors) who supported the project.
205
194
 
@@ -215,7 +204,7 @@ and printing error messages.
215
204
  Thanks to [PyMysql](https://github.com/PyMySQL/PyMySQL) for a pure Python adapter to MySQL databases.
216
205
 
217
206
 
218
- ### Compatibility
207
+ # Compatibility
219
208
 
220
209
  Mycli is tested on macOS (full), Linux (full), Windows (partial), and WSL
221
210
  (partial), and requires Python 3.10 or better.
@@ -229,9 +218,9 @@ following in `~/.myclirc`:
229
218
  default_character_set = utf8
230
219
  ```
231
220
 
232
- or set `--charset=utf8` when invoking mycli
221
+ or use `--charset=utf8` when invoking mycli.
233
222
 
234
- ### Configuration and Usage
223
+ # Configuration and Usage
235
224
 
236
225
  For more information on using and configuring mycli, [check out our documentation](https://mycli.net/docs).
237
226
 
@@ -1,3 +1,42 @@
1
+ 2.19.0 (2026/09/02)
2
+ ==============
3
+
4
+ Features
5
+ --------
6
+ * Add `/ping` special command.
7
+ * Hide timings after `/system clear`.
8
+
9
+
10
+ Documentation
11
+ --------
12
+ * Minor edits to `README.md`.
13
+ * Add `/system` special cases to TIPS.
14
+
15
+
16
+ Internal
17
+ ---------
18
+ * Upgrade `polars` dependency to v1.44.1.
19
+ * Upgrade `sqlparse` dependency to v0.6.0.
20
+ * Upgrade optional `pip` dependency to v26.2.1.
21
+ * Use cache and turn off distro update for WSL tests in CI.
22
+ * Upgrade `click` dependency to v8.5.0.
23
+
24
+
25
+ 2.18.5 (2026/08/31)
26
+ ==============
27
+
28
+ Bug Fixes
29
+ --------
30
+ * Fix incomplete release of Boundary tunnels from beta.
31
+
32
+
33
+ Internal
34
+ ---------
35
+ * Upgrade `sqlglot` to v30.17.0.
36
+ * Remove `pyproject.toml` llm library cooldown policy exceptions.
37
+ * Upgrade `polars` to v1.43.2.
38
+
39
+
1
40
  2.18.4 (2026/08/29)
2
41
  ==============
3
42
 
@@ -106,6 +106,10 @@ use /tee or /notee to write/stop-writing results to a output file!
106
106
 
107
107
  use "/system <command>" to execute a shell command!
108
108
 
109
+ use "/system cd" to change the working directory!
110
+
111
+ use "/system clear" to clear the screen!
112
+
109
113
  /T or /tableformat changes the interactive table format!
110
114
 
111
115
  /u or /use changes to a new database!
@@ -118,6 +122,8 @@ use /dsn to manage saved DSNs!
118
122
 
119
123
  use /config to inspect persistent configuration from the REPL!
120
124
 
125
+ /ping checks the health of the connection!
126
+
121
127
  ###
122
128
  ### environment variables
123
129
  ###
@@ -44,6 +44,7 @@ SOURCE_SAFE_SPECIAL_COMMANDS = frozenset({
44
44
  'help',
45
45
  'l',
46
46
  'nowarnings',
47
+ 'ping',
47
48
  'prompt',
48
49
  'redirectformat',
49
50
  'rehash',
@@ -132,12 +132,12 @@ class ClientConnectionMixin:
132
132
  sys.exit(1)
133
133
  elif boundary_target_id:
134
134
  use_keyring = False
135
- boundary_executable = self.config.get('boundary_beta', {}).get('boundary_executable', 'boundary') or 'boundary'
136
- boundary_address = self.config.get('boundary_beta', {}).get('address') or None
137
- boundary_auth_method_id = self.config.get('boundary_beta', {}).get('auth_method_id') or None
138
- boundary_options = self.config.get('boundary_beta', {}).get('boundary_options') or None
139
- boundary_test_command = self.config.get('boundary_beta', {}).get('boundary_test_command') or None
140
- boundary_auth_command = self.config.get('boundary_beta', {}).get('boundary_auth_command') or None
135
+ boundary_executable = self.config.get('boundary', {}).get('boundary_executable', 'boundary') or 'boundary'
136
+ boundary_address = self.config.get('boundary', {}).get('address') or None
137
+ boundary_auth_method_id = self.config.get('boundary', {}).get('auth_method_id') or None
138
+ boundary_options = self.config.get('boundary', {}).get('boundary_options') or None
139
+ boundary_test_command = self.config.get('boundary', {}).get('boundary_test_command') or None
140
+ boundary_auth_command = self.config.get('boundary', {}).get('boundary_auth_command') or None
141
141
  try:
142
142
  self.boundary_tunnel = BoundaryTunnel(
143
143
  target_id=boundary_target_id,
@@ -214,9 +214,8 @@ def main_batch_without_progress_bar(mycli: 'MyCli', cli_args: 'CliArgs') -> int:
214
214
 
215
215
 
216
216
  def main_batch_from_stdin(mycli: 'MyCli', cli_args: 'CliArgs') -> int:
217
- batch_h = click.get_text_stream('stdin')
218
217
  try:
219
- for statement, counter in statements_from_filehandle(batch_h):
218
+ for statement, counter in statements_from_filehandle(sys.stdin):
220
219
  dispatch_batch_statements(mycli, cli_args, statement, counter)
221
220
  except (ValueError, StopIteration, IOError, OSError, pymysql.err.Error) as e:
222
221
  click.secho(str(e), err=True, fg='red')
@@ -10,6 +10,7 @@ import os
10
10
  from mycli.packages.special.dbcommands import (
11
11
  list_databases,
12
12
  list_tables,
13
+ ping,
13
14
  status,
14
15
  )
15
16
  from mycli.packages.special.iocommands import (
@@ -118,6 +119,7 @@ __all__: list[str] = [
118
119
  'list_tables',
119
120
  'open_external_editor',
120
121
  'parse_special_command',
122
+ 'ping',
121
123
  'register_special_command',
122
124
  'run_post_redirect_hook',
123
125
  'set_delimiter',
@@ -2,7 +2,7 @@ import logging
2
2
  import os
3
3
  import platform
4
4
 
5
- from pymysql import ProgrammingError
5
+ from pymysql import Error, ProgrammingError
6
6
  from pymysql.cursors import Cursor
7
7
 
8
8
  from mycli import __version__
@@ -80,6 +80,24 @@ def list_databases(cur: Cursor, **_) -> list[SQLResult]:
80
80
  return [SQLResult()]
81
81
 
82
82
 
83
+ @special_command(
84
+ r'\ping',
85
+ '/ping',
86
+ 'Check the connection.',
87
+ arg_type=ArgType.PARSED_QUERY,
88
+ completion_snippet='check connection',
89
+ )
90
+ def ping(cur: Cursor, arg: str | None = None, **_) -> list[SQLResult]:
91
+ if arg:
92
+ return [SQLResult(status='Syntax: /ping.')]
93
+
94
+ try:
95
+ cur.connection.ping(reconnect=False)
96
+ except Error:
97
+ return [SQLResult(status='Not connected')]
98
+ return [SQLResult(status='Connected')]
99
+
100
+
83
101
  @special_command(
84
102
  "status",
85
103
  "/status",
@@ -787,8 +787,9 @@ def execute_system_command(arg: str, **_) -> list[SQLResult]:
787
787
  completed_process = subprocess.run(command, check=False)
788
788
  if completed_process.returncode:
789
789
  return [SQLResult(status=f'Command exited with return code {completed_process.returncode}')]
790
- else:
791
- return [SQLResult()]
790
+ if command[0].lower() == 'clear':
791
+ return []
792
+ return [SQLResult()]
792
793
  else:
793
794
  process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
794
795
  try: