sqlit-tui 1.5.0__tar.gz → 1.5.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 (780) hide show
  1. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/PKG-INFO +1 -3
  2. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/README.md +0 -2
  3. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/pyproject.toml +1 -0
  4. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/_version.py +2 -2
  5. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/cli.py +43 -1
  6. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/adapters/base.py +15 -4
  7. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/postgresql/base.py +9 -0
  8. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/process_worker/app/process_worker.py +41 -1
  9. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/process_worker/app/process_worker_client.py +8 -0
  10. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/app/multi_statement.py +29 -1
  11. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/completion.py +8 -2
  12. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/core.py +78 -0
  13. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/autocomplete_schema.py +10 -10
  14. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/autocomplete_suggestions.py +50 -4
  15. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/ui/mixins/results.py +19 -8
  16. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/main.py +7 -0
  17. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/cli/test_cli_main.py +26 -1
  18. sqlit_tui-1.5.2/tests/integration/test_autocomplete_postgresql_schema.py +308 -0
  19. sqlit_tui-1.5.2/tests/integration/test_results_qualified_mutation.py +222 -0
  20. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_autocomplete_multidb.py +68 -4
  21. sqlit_tui-1.5.2/tests/unit/test_cli_prewarm.py +64 -0
  22. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_multi_statement.py +49 -0
  23. sqlit_tui-1.5.2/tests/unit/test_process_worker_fallback.py +68 -0
  24. sqlit_tui-1.5.2/tests/unit/test_process_worker_statement_validation.py +68 -0
  25. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_results_copy_markup.py +49 -0
  26. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/.github/workflows/ci.yml +0 -0
  27. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/.github/workflows/release.yml +0 -0
  28. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/.gitignore +0 -0
  29. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/.pre-commit-config.yaml +0 -0
  30. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/CONTRIBUTING.md +0 -0
  31. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/LICENSE +0 -0
  32. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/assets/favorites/logo.png +0 -0
  33. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/assets/favorites/logo_sqlit.png +0 -0
  34. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/aur/.SRCINFO +0 -0
  35. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/aur/PKGBUILD +0 -0
  36. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/config/keymap.template.json +0 -0
  37. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/config/mock-ssh-missing.json +0 -0
  38. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/config/settings.template.json +0 -0
  39. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/config/sqlit-config/settings.json +0 -0
  40. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/autocomplete-01-basics.gif +0 -0
  41. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/autocomplete-02-select-from.gif +0 -0
  42. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/autocomplete-03-joins.gif +0 -0
  43. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/autocomplete-04-clauses.gif +0 -0
  44. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/d1-demo.json +0 -0
  45. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/demo-connect.gif +0 -0
  46. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/demo-d1.gif +0 -0
  47. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/demo-docker-picker.gif +0 -0
  48. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/demo-filter/demo-filter.gif +0 -0
  49. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/demo-history.gif +0 -0
  50. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/demo-providers.gif +0 -0
  51. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/demo-query.gif +0 -0
  52. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/demo-sqlite.gif +0 -0
  53. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/demos/demo-supabase-mock.gif +0 -0
  54. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/catppuccin-latte.png +0 -0
  55. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/catppuccin-mocha.png +0 -0
  56. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/dracula.png +0 -0
  57. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/everforest.png +0 -0
  58. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/flexoki.png +0 -0
  59. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/gruvbox.png +0 -0
  60. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/hackerman.png +0 -0
  61. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/kanagawa.png +0 -0
  62. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/matte-black.png +0 -0
  63. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/monokai.png +0 -0
  64. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/nord.png +0 -0
  65. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/osaka-jade.png +0 -0
  66. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/ristretto.png +0 -0
  67. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/rose-pine-dawn.png +0 -0
  68. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/rose-pine-moon.png +0 -0
  69. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/rose-pine.png +0 -0
  70. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/solarized-dark.png +0 -0
  71. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/solarized-light.png +0 -0
  72. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/sqlit-light.png +0 -0
  73. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/sqlit.png +0 -0
  74. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/textual-ansi.png +0 -0
  75. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/textual-dark.png +0 -0
  76. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/textual-light.png +0 -0
  77. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/docs/screenshots/all/tokyo-night.png +0 -0
  78. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/flake.lock +0 -0
  79. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/flake.nix +0 -0
  80. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/infra/docker/docker-compose.test.yml +0 -0
  81. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/infra/docker/impala_quickstart_conf/hive-site.xml +0 -0
  82. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/pyrightconfig.json +0 -0
  83. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/__init__.py +0 -0
  84. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/core/__init__.py +0 -0
  85. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/core/action_validation.py +0 -0
  86. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/core/binding_contexts.py +0 -0
  87. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/core/connection_manager.py +0 -0
  88. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/core/input_context.py +0 -0
  89. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/core/key_router.py +0 -0
  90. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/core/keymap.py +0 -0
  91. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/core/leader_commands.py +0 -0
  92. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/core/state_base.py +0 -0
  93. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/core/vim.py +0 -0
  94. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/__init__.py +0 -0
  95. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/__init__.py +0 -0
  96. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/__init__.py +0 -0
  97. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/cloud_actions.py +0 -0
  98. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/connection_flow.py +0 -0
  99. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/credentials.py +0 -0
  100. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/executor.py +0 -0
  101. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/install_strategy.py +0 -0
  102. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/installer.py +0 -0
  103. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/mock_adapter_core.py +0 -0
  104. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/mock_data.py +0 -0
  105. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/mock_default_adapters.py +0 -0
  106. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/mock_profiles.py +0 -0
  107. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/mock_provider.py +0 -0
  108. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/mock_settings.py +0 -0
  109. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/mocks.py +0 -0
  110. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/persist_utils.py +0 -0
  111. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/save_connection.py +0 -0
  112. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/session.py +0 -0
  113. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/tunnel.py +0 -0
  114. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/app/url_parser.py +0 -0
  115. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/cli/__init__.py +0 -0
  116. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/cli/commands.py +0 -0
  117. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/cli/helpers.py +0 -0
  118. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/cli/prompts.py +0 -0
  119. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/__init__.py +0 -0
  120. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/__init__.py +0 -0
  121. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/aws/__init__.py +0 -0
  122. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/aws/cache.py +0 -0
  123. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/aws/provider.py +0 -0
  124. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/azure/__init__.py +0 -0
  125. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/azure/cache.py +0 -0
  126. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/azure/cli.py +0 -0
  127. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/azure/discovery.py +0 -0
  128. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/azure/firewall.py +0 -0
  129. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/azure/models.py +0 -0
  130. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/azure/provider.py +0 -0
  131. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/base.py +0 -0
  132. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/gcp/__init__.py +0 -0
  133. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/gcp/cache.py +0 -0
  134. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/gcp/provider.py +0 -0
  135. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/mock.py +0 -0
  136. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/cloud/registry.py +0 -0
  137. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/discovery/docker_detector.py +0 -0
  138. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/domain/__init__.py +0 -0
  139. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/domain/config.py +0 -0
  140. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/domain/password_command.py +0 -0
  141. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/domain/passwords.py +0 -0
  142. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/domain/stdin_secret.py +0 -0
  143. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/__init__.py +0 -0
  144. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/adapter_provider.py +0 -0
  145. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/adapters/__init__.py +0 -0
  146. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/athena/__init__.py +0 -0
  147. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/athena/adapter.py +0 -0
  148. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/athena/provider.py +0 -0
  149. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/athena/schema.py +0 -0
  150. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/bigquery/__init__.py +0 -0
  151. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/bigquery/adapter.py +0 -0
  152. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/bigquery/provider.py +0 -0
  153. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/bigquery/schema.py +0 -0
  154. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/catalog.py +0 -0
  155. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/clickhouse/__init__.py +0 -0
  156. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/clickhouse/adapter.py +0 -0
  157. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/clickhouse/provider.py +0 -0
  158. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/clickhouse/schema.py +0 -0
  159. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/cockroachdb/__init__.py +0 -0
  160. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/cockroachdb/adapter.py +0 -0
  161. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/cockroachdb/provider.py +0 -0
  162. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/cockroachdb/schema.py +0 -0
  163. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/config_service.py +0 -0
  164. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/d1/__init__.py +0 -0
  165. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/d1/adapter.py +0 -0
  166. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/d1/provider.py +0 -0
  167. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/d1/schema.py +0 -0
  168. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/db2/__init__.py +0 -0
  169. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/db2/adapter.py +0 -0
  170. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/db2/provider.py +0 -0
  171. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/db2/schema.py +0 -0
  172. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/docker.py +0 -0
  173. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/driver.py +0 -0
  174. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/duckdb/__init__.py +0 -0
  175. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/duckdb/adapter.py +0 -0
  176. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/duckdb/data_files.py +0 -0
  177. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/duckdb/provider.py +0 -0
  178. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/duckdb/schema.py +0 -0
  179. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/exceptions.py +0 -0
  180. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/explorer_nodes.py +0 -0
  181. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/firebird/__init__.py +0 -0
  182. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/firebird/adapter.py +0 -0
  183. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/firebird/provider.py +0 -0
  184. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/firebird/schema.py +0 -0
  185. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/flight/__init__.py +0 -0
  186. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/flight/adapter.py +0 -0
  187. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/flight/provider.py +0 -0
  188. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/flight/schema.py +0 -0
  189. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/hana/__init__.py +0 -0
  190. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/hana/adapter.py +0 -0
  191. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/hana/provider.py +0 -0
  192. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/hana/schema.py +0 -0
  193. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/impala/__init__.py +0 -0
  194. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/impala/adapter.py +0 -0
  195. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/impala/provider.py +0 -0
  196. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/impala/schema.py +0 -0
  197. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mariadb/__init__.py +0 -0
  198. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mariadb/adapter.py +0 -0
  199. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mariadb/provider.py +0 -0
  200. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mariadb/schema.py +0 -0
  201. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/metadata.py +0 -0
  202. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/model.py +0 -0
  203. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/motherduck/__init__.py +0 -0
  204. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/motherduck/adapter.py +0 -0
  205. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/motherduck/provider.py +0 -0
  206. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/motherduck/schema.py +0 -0
  207. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mssql/__init__.py +0 -0
  208. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mssql/adapter.py +0 -0
  209. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mssql/provider.py +0 -0
  210. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mssql/schema.py +0 -0
  211. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mssql/token_cache.py +0 -0
  212. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mysql/__init__.py +0 -0
  213. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mysql/adapter.py +0 -0
  214. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mysql/base.py +0 -0
  215. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mysql/provider.py +0 -0
  216. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/mysql/schema.py +0 -0
  217. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/oracle/__init__.py +0 -0
  218. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/oracle/adapter.py +0 -0
  219. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/oracle/provider.py +0 -0
  220. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/oracle/schema.py +0 -0
  221. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/oracle_legacy/__init__.py +0 -0
  222. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/oracle_legacy/adapter.py +0 -0
  223. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/oracle_legacy/provider.py +0 -0
  224. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/oracle_legacy/schema.py +0 -0
  225. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/osquery/__init__.py +0 -0
  226. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/osquery/adapter.py +0 -0
  227. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/osquery/provider.py +0 -0
  228. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/osquery/schema.py +0 -0
  229. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/postgresql/__init__.py +0 -0
  230. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/postgresql/adapter.py +0 -0
  231. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/postgresql/provider.py +0 -0
  232. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/postgresql/schema.py +0 -0
  233. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/presto/__init__.py +0 -0
  234. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/presto/adapter.py +0 -0
  235. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/presto/provider.py +0 -0
  236. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/presto/schema.py +0 -0
  237. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/redshift/__init__.py +0 -0
  238. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/redshift/adapter.py +0 -0
  239. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/redshift/provider.py +0 -0
  240. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/redshift/schema.py +0 -0
  241. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/registry.py +0 -0
  242. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/schema_catalog.py +0 -0
  243. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/schema_helpers.py +0 -0
  244. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/snowflake/__init__.py +0 -0
  245. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/snowflake/adapter.py +0 -0
  246. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/snowflake/provider.py +0 -0
  247. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/snowflake/schema.py +0 -0
  248. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/spanner/__init__.py +0 -0
  249. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/spanner/adapter.py +0 -0
  250. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/spanner/provider.py +0 -0
  251. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/spanner/schema.py +0 -0
  252. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/sqlite/__init__.py +0 -0
  253. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/sqlite/adapter.py +0 -0
  254. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/sqlite/provider.py +0 -0
  255. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/sqlite/schema.py +0 -0
  256. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/supabase/__init__.py +0 -0
  257. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/supabase/adapter.py +0 -0
  258. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/supabase/provider.py +0 -0
  259. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/supabase/schema.py +0 -0
  260. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/surrealdb/__init__.py +0 -0
  261. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/surrealdb/adapter.py +0 -0
  262. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/surrealdb/provider.py +0 -0
  263. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/surrealdb/schema.py +0 -0
  264. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/teradata/__init__.py +0 -0
  265. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/teradata/adapter.py +0 -0
  266. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/teradata/provider.py +0 -0
  267. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/teradata/schema.py +0 -0
  268. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/tls.py +0 -0
  269. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/trino/__init__.py +0 -0
  270. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/trino/adapter.py +0 -0
  271. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/trino/provider.py +0 -0
  272. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/trino/schema.py +0 -0
  273. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/turso/__init__.py +0 -0
  274. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/turso/adapter.py +0 -0
  275. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/turso/provider.py +0 -0
  276. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/turso/schema.py +0 -0
  277. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/providers/validation.py +0 -0
  278. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/store/__init__.py +0 -0
  279. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/store/connections.py +0 -0
  280. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/store/memory.py +0 -0
  281. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/__init__.py +0 -0
  282. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/connection_error_handlers.py +0 -0
  283. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/connection_focus.py +0 -0
  284. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/connection_form.py +0 -0
  285. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/connection_test_controller.py +0 -0
  286. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/driver_status.py +0 -0
  287. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/driver_status_controller.py +0 -0
  288. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/field_widgets.py +0 -0
  289. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/fields.py +0 -0
  290. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/mixins/__init__.py +0 -0
  291. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/mixins/connection.py +0 -0
  292. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/restart_cache.py +0 -0
  293. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/__init__.py +0 -0
  294. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/azure_firewall.py +0 -0
  295. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection.py +0 -0
  296. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/__init__.py +0 -0
  297. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/cloud_nodes.py +0 -0
  298. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/cloud_providers/__init__.py +0 -0
  299. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/cloud_providers/aws.py +0 -0
  300. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/cloud_providers/azure.py +0 -0
  301. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/cloud_providers/base.py +0 -0
  302. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/cloud_providers/gcp.py +0 -0
  303. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/cloud_providers/utils.py +0 -0
  304. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/constants.py +0 -0
  305. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/controllers/__init__.py +0 -0
  306. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/controllers/cloud.py +0 -0
  307. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/controllers/docker.py +0 -0
  308. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/screen.py +0 -0
  309. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/shortcuts.py +0 -0
  310. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/state.py +0 -0
  311. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/tabs/__init__.py +0 -0
  312. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/tabs/cloud.py +0 -0
  313. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/tabs/connections.py +0 -0
  314. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/tabs/docker.py +0 -0
  315. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_picker/view.py +0 -0
  316. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/connection_styles.py +0 -0
  317. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/folder_input.py +0 -0
  318. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/install_progress.py +0 -0
  319. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/package_setup.py +0 -0
  320. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/screens/password_input.py +0 -0
  321. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/validation.py +0 -0
  322. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/connections/ui/validation_ui_binder.py +0 -0
  323. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/__init__.py +0 -0
  324. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/app/schema_service.py +0 -0
  325. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/domain/__init__.py +0 -0
  326. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/domain/tree_nodes.py +0 -0
  327. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/state/__init__.py +0 -0
  328. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/state/tree_filter_active.py +0 -0
  329. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/state/tree_focused.py +0 -0
  330. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/state/tree_multi_select.py +0 -0
  331. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/state/tree_on_connection.py +0 -0
  332. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/state/tree_on_database.py +0 -0
  333. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/state/tree_on_folder.py +0 -0
  334. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/state/tree_on_object.py +0 -0
  335. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/state/tree_on_table.py +0 -0
  336. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/state/tree_visual_mode.py +0 -0
  337. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/__init__.py +0 -0
  338. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/mixins/__init__.py +0 -0
  339. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/mixins/tree.py +0 -0
  340. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/mixins/tree_filter.py +0 -0
  341. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/mixins/tree_labels.py +0 -0
  342. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/mixins/tree_schema.py +0 -0
  343. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/tree/__init__.py +0 -0
  344. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/tree/builder.py +0 -0
  345. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/tree/db_switching.py +0 -0
  346. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/tree/expansion_state.py +0 -0
  347. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/tree/loaders.py +0 -0
  348. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/tree/object_info.py +0 -0
  349. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/explorer/ui/tree/schema_render.py +0 -0
  350. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/process_worker/__init__.py +0 -0
  351. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/process_worker/app/__init__.py +0 -0
  352. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/process_worker/app/support.py +0 -0
  353. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/process_worker/ui/__init__.py +0 -0
  354. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/process_worker/ui/mixins/__init__.py +0 -0
  355. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/process_worker/ui/mixins/process_worker_lifecycle.py +0 -0
  356. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/__init__.py +0 -0
  357. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/app/__init__.py +0 -0
  358. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/app/alerts.py +0 -0
  359. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/app/cancellable.py +0 -0
  360. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/app/editor.py +0 -0
  361. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/app/query_runner.py +0 -0
  362. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/app/query_service.py +0 -0
  363. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/app/transaction.py +0 -0
  364. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/cli/__init__.py +0 -0
  365. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/cli/alerts_commands.py +0 -0
  366. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/cli/commands.py +0 -0
  367. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/__init__.py +0 -0
  368. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/alter_table.py +0 -0
  369. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/create_index.py +0 -0
  370. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/create_table.py +0 -0
  371. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/create_view.py +0 -0
  372. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/delete.py +0 -0
  373. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/drop.py +0 -0
  374. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/insert.py +0 -0
  375. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/keywords.py +0 -0
  376. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/truncate.py +0 -0
  377. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/completion/update.py +0 -0
  378. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/__init__.py +0 -0
  379. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/clipboard.py +0 -0
  380. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/comments.py +0 -0
  381. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/deletion.py +0 -0
  382. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/motions/__init__.py +0 -0
  383. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/motions/basic.py +0 -0
  384. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/motions/brackets.py +0 -0
  385. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/motions/common.py +0 -0
  386. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/motions/lines.py +0 -0
  387. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/motions/registry.py +0 -0
  388. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/motions/search.py +0 -0
  389. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/motions/words.py +0 -0
  390. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/operators.py +0 -0
  391. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/text_objects.py +0 -0
  392. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/types.py +0 -0
  393. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/editing/undo_history.py +0 -0
  394. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/state/__init__.py +0 -0
  395. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/state/autocomplete_active.py +0 -0
  396. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/state/query_focused.py +0 -0
  397. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/state/query_insert.py +0 -0
  398. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/state/query_normal.py +0 -0
  399. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/state/query_visual.py +0 -0
  400. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/state/query_visual_line.py +0 -0
  401. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/store/__init__.py +0 -0
  402. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/store/history.py +0 -0
  403. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/store/memory.py +0 -0
  404. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/store/starred.py +0 -0
  405. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/__init__.py +0 -0
  406. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/__init__.py +0 -0
  407. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/autocomplete.py +0 -0
  408. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query.py +0 -0
  409. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_constants.py +0 -0
  410. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_editing_clipboard.py +0 -0
  411. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_editing_comments.py +0 -0
  412. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_editing_common.py +0 -0
  413. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_editing_cursor.py +0 -0
  414. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_editing_operators.py +0 -0
  415. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_editing_selection.py +0 -0
  416. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_editing_undo.py +0 -0
  417. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_editing_visual.py +0 -0
  418. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_editing_visual_line.py +0 -0
  419. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_execution.py +0 -0
  420. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/mixins/query_results.py +0 -0
  421. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/screens/__init__.py +0 -0
  422. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/screens/char_pending_menu.py +0 -0
  423. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/screens/editor_picker.py +0 -0
  424. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/screens/query_history.py +0 -0
  425. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/query/ui/screens/text_object_menu.py +0 -0
  426. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/__init__.py +0 -0
  427. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/formatters.py +0 -0
  428. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/state/__init__.py +0 -0
  429. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/state/results_filter_active.py +0 -0
  430. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/state/results_focused.py +0 -0
  431. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/state/value_view_active.py +0 -0
  432. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/ui/__init__.py +0 -0
  433. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/ui/mixins/__init__.py +0 -0
  434. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/ui/mixins/results_filter.py +0 -0
  435. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/ui/screens/__init__.py +0 -0
  436. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/ui/screens/column_picker.py +0 -0
  437. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/ui/screens/save_file.py +0 -0
  438. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/results/ui/screens/value_view.py +0 -0
  439. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/__init__.py +0 -0
  440. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/__init__.py +0 -0
  441. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/commands/__init__.py +0 -0
  442. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/commands/alert.py +0 -0
  443. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/commands/credentials.py +0 -0
  444. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/commands/debug.py +0 -0
  445. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/commands/router.py +0 -0
  446. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/commands/watchdog.py +0 -0
  447. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/commands/worker.py +0 -0
  448. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/idle_scheduler.py +0 -0
  449. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/keymap_manager.py +0 -0
  450. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/main.css +0 -0
  451. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/omarchy.py +0 -0
  452. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/startup_flow.py +0 -0
  453. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/theme_manager.py +0 -0
  454. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/app/themes.py +0 -0
  455. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/state/__init__.py +0 -0
  456. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/state/help_doc.py +0 -0
  457. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/state/leader_pending.py +0 -0
  458. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/state/machine.py +0 -0
  459. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/state/main_screen.py +0 -0
  460. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/state/modal_active.py +0 -0
  461. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/state/query_executing.py +0 -0
  462. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/state/root.py +0 -0
  463. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/store/__init__.py +0 -0
  464. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/store/settings.py +0 -0
  465. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/ui/__init__.py +0 -0
  466. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/ui/mixins/__init__.py +0 -0
  467. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/ui/mixins/ui_leader.py +0 -0
  468. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/ui/mixins/ui_navigation.py +0 -0
  469. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/ui/mixins/ui_status.py +0 -0
  470. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/ui/screens/__init__.py +0 -0
  471. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/ui/screens/help.py +0 -0
  472. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/ui/screens/key_capture.py +0 -0
  473. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/ui/screens/keybinding_editor.py +0 -0
  474. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/ui/screens/leader_menu.py +0 -0
  475. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/domains/shell/ui/screens/theme.py +0 -0
  476. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/mock_settings.py +0 -0
  477. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/__init__.py +0 -0
  478. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/app/__init__.py +0 -0
  479. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/app/runtime.py +0 -0
  480. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/app/services.py +0 -0
  481. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/app/startup_profiler.py +0 -0
  482. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/core/__init__.py +0 -0
  483. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/core/debug_events.py +0 -0
  484. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/core/processes.py +0 -0
  485. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/core/protocols.py +0 -0
  486. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/core/store.py +0 -0
  487. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/core/system_probe.py +0 -0
  488. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/core/system_probe_fake.py +0 -0
  489. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/core/terminal.py +0 -0
  490. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/core/utils.py +0 -0
  491. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/__init__.py +0 -0
  492. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/clipboard.py +0 -0
  493. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/lifecycle.py +0 -0
  494. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/__init__.py +0 -0
  495. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/autocomplete.py +0 -0
  496. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/connections.py +0 -0
  497. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/core.py +0 -0
  498. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/explorer.py +0 -0
  499. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/lifecycle.py +0 -0
  500. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/metadata.py +0 -0
  501. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/mixins.py +0 -0
  502. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/query.py +0 -0
  503. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/results.py +0 -0
  504. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/screens.py +0 -0
  505. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/startup.py +0 -0
  506. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/ui_navigation.py +0 -0
  507. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/vim.py +0 -0
  508. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/protocols/widgets.py +0 -0
  509. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/screens/__init__.py +0 -0
  510. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/screens/column_picker.py +0 -0
  511. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/screens/confirm.py +0 -0
  512. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/screens/error.py +0 -0
  513. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/screens/file_picker.py +0 -0
  514. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/screens/loading.py +0 -0
  515. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/screens/message.py +0 -0
  516. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/spinner.py +0 -0
  517. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/widgets.py +0 -0
  518. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/widgets_autocomplete.py +0 -0
  519. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/widgets_dialogs.py +0 -0
  520. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/widgets_filter.py +0 -0
  521. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/widgets_flash.py +0 -0
  522. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/widgets_footer.py +0 -0
  523. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/widgets_json_tree.py +0 -0
  524. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/widgets_stacked_results.py +0 -0
  525. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/widgets_tables.py +0 -0
  526. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/widgets_text_area.py +0 -0
  527. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/sqlit/shared/ui/widgets_value_view.py +0 -0
  528. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/.env.example +0 -0
  529. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/__init__.py +0 -0
  530. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/athena/__init__.py +0 -0
  531. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/athena/fixtures.py +0 -0
  532. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/athena/infra/.gitignore +0 -0
  533. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/athena/infra/create_view.py +0 -0
  534. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/athena/infra/main.tf +0 -0
  535. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/athena/infra/outputs.tf +0 -0
  536. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/athena/infra/variables.tf +0 -0
  537. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/athena/run_tests.sh +0 -0
  538. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/athena/test_athena.py +0 -0
  539. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/conftest.py +0 -0
  540. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/connections/providers/__init__.py +0 -0
  541. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/connections/providers/hana/__init__.py +0 -0
  542. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/connections/providers/hana/test_get_columns.py +0 -0
  543. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/connections/providers/oracle/__init__.py +0 -0
  544. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/connections/providers/oracle/test_cursor_cleanup.py +0 -0
  545. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/99-fix-sshd-config.sh +0 -0
  546. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/__init__.py +0 -0
  547. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/bigquery.py +0 -0
  548. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/cli.py +0 -0
  549. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/clickhouse.py +0 -0
  550. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/cockroachdb.py +0 -0
  551. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/d1/Dockerfile +0 -0
  552. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/d1/index.js +0 -0
  553. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/d1/wrangler.toml +0 -0
  554. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/d1.py +0 -0
  555. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/data.duckdb +0 -0
  556. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/db2.py +0 -0
  557. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/duckdb.py +0 -0
  558. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/firebird.py +0 -0
  559. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/flight.py +0 -0
  560. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/impala.py +0 -0
  561. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/mariadb.py +0 -0
  562. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/mariadb_charset.py +0 -0
  563. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/mssql.py +0 -0
  564. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/mysql.py +0 -0
  565. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/mysql_charset.py +0 -0
  566. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/oracle.py +0 -0
  567. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/oracle_legacy.py +0 -0
  568. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/postgres.py +0 -0
  569. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/presto/catalog/memory.properties +0 -0
  570. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/presto.py +0 -0
  571. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/spanner.py +0 -0
  572. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/sqlite.py +0 -0
  573. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/ssh.py +0 -0
  574. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/sshd_config +0 -0
  575. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/surrealdb.py +0 -0
  576. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/trino/catalog/memory.properties +0 -0
  577. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/trino.py +0 -0
  578. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/turso.py +0 -0
  579. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/fixtures/utils.py +0 -0
  580. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/helpers.py +0 -0
  581. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/__init__.py +0 -0
  582. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/browsing_base.py +0 -0
  583. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/docker_detect/__init__.py +0 -0
  584. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/docker_detect/conftest.py +0 -0
  585. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/docker_detect/database_configs.py +0 -0
  586. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/docker_detect/test_all_databases.py +0 -0
  587. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/docker_detect/test_docker_detection.py +0 -0
  588. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/python_packages/README.md +0 -0
  589. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/python_packages/docker-compose.yml +0 -0
  590. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/python_packages/dockerfiles/debian.Dockerfile +0 -0
  591. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/python_packages/run_tests.sh +0 -0
  592. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/python_packages/test_package_install_flow.py +0 -0
  593. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/test_autocomplete_mysql_columns.py +0 -0
  594. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/test_database_browsing_flow.py +0 -0
  595. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/test_explorer_refresh_cursor.py +0 -0
  596. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/test_mssql_datetimeoffset.py +0 -0
  597. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/test_multi_statement_limits.py +0 -0
  598. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/test_snowflake_fakesnow.py +0 -0
  599. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/test_stale_connection_reconnect.py +0 -0
  600. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/test_telescope_watchdog.py +0 -0
  601. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/test_tls_cli_config.py +0 -0
  602. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/integration/test_transactions.py +0 -0
  603. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/performance/__init__.py +0 -0
  604. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/performance/test_large_dataset_rendering.py +0 -0
  605. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_adapter_system_databases.py +0 -0
  606. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_apply_database_override.py +0 -0
  607. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_autocomplete_database_modes.py +0 -0
  608. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_bigquery.py +0 -0
  609. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_charset_support.py +0 -0
  610. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_clickhouse.py +0 -0
  611. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_cloud_discovery.py +0 -0
  612. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_cockroachdb.py +0 -0
  613. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_commands.py +0 -0
  614. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_credentials_connection_store.py +0 -0
  615. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_credentials_global.py +0 -0
  616. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_credentials_keyring.py +0 -0
  617. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_credentials_plaintext.py +0 -0
  618. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_cross_database_queries.py +0 -0
  619. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_d1.py +0 -0
  620. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_database_base.py +0 -0
  621. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_database_docker.py +0 -0
  622. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_db2.py +0 -0
  623. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_docker_detector.py +0 -0
  624. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_driver_resolver.py +0 -0
  625. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_duckdb.py +0 -0
  626. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_firebird.py +0 -0
  627. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_flight.py +0 -0
  628. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_impala.py +0 -0
  629. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_install_strategy.py +0 -0
  630. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_installer_cancel.py +0 -0
  631. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_mariadb.py +0 -0
  632. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_mocks.py +0 -0
  633. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_mssql.py +0 -0
  634. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_mysql.py +0 -0
  635. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_oracle.py +0 -0
  636. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_oracle_legacy.py +0 -0
  637. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_password_prompts.py +0 -0
  638. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_postgresql.py +0 -0
  639. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_presto.py +0 -0
  640. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_result_formatters.py +0 -0
  641. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_schema_capabilities.py +0 -0
  642. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_spanner.py +0 -0
  643. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_sqlite.py +0 -0
  644. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_ssh.py +0 -0
  645. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_surrealdb.py +0 -0
  646. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_trino.py +0 -0
  647. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_turso.py +0 -0
  648. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/test_validation.py +0 -0
  649. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/__init__.py +0 -0
  650. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/conftest.py +0 -0
  651. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/explorer/__init__.py +0 -0
  652. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/explorer/test_cross_database_query.py +0 -0
  653. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/explorer/test_filter_accept_cursor_pilot.py +0 -0
  654. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/explorer/test_markup_escaping.py +0 -0
  655. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/explorer/test_multidb_refresh.py +0 -0
  656. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/explorer/test_refresh_cursor_restore.py +0 -0
  657. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/explorer/test_refresh_expanded_loads.py +0 -0
  658. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/explorer/test_refresh_tree.py +0 -0
  659. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/explorer/test_tree_expansion.py +0 -0
  660. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/explorer/test_tree_filter_search.py +0 -0
  661. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/__init__.py +0 -0
  662. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/conftest.py +0 -0
  663. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/test_contextual.py +0 -0
  664. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/test_dialogs.py +0 -0
  665. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/test_insert_mode.py +0 -0
  666. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/test_keymap_manager.py +0 -0
  667. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/test_keymap_provider.py +0 -0
  668. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/test_leader.py +0 -0
  669. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/test_results_vim_motions.py +0 -0
  670. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/test_state_machine.py +0 -0
  671. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/test_vim_motions.py +0 -0
  672. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/keybindings/test_visual_mode.py +0 -0
  673. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/mocks.py +0 -0
  674. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/01_default_sqlite_screen.svg +0 -0
  675. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/02_edit_mode_postgresql.svg +0 -0
  676. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/03_before_cancel.svg +0 -0
  677. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/04_empty_name_after_save_attempt.svg +0 -0
  678. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/04_empty_name_before_save.svg +0 -0
  679. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/05_after_switch_to_postgresql.svg +0 -0
  680. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/05_before_switch_to_postgresql.svg +0 -0
  681. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/06_sqlite_file_path_field.svg +0 -0
  682. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/07_sqlite_filled_form.svg +0 -0
  683. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/08_postgresql_after_switch.svg +0 -0
  684. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/08_postgresql_filled_form.svg +0 -0
  685. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/09_duplicate_name_validation.svg +0 -0
  686. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/10_after_test_connection.svg +0 -0
  687. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/10_before_test_connection.svg +0 -0
  688. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/11_navigation_after_tab.svg +0 -0
  689. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/11_navigation_initial_focus.svg +0 -0
  690. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/12_navigation_after_shift_tab.svg +0 -0
  691. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/12_navigation_after_two_tabs.svg +0 -0
  692. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/snapshots/13_ssh_fields_hidden.svg +0 -0
  693. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_autocomplete_dropdown.py +0 -0
  694. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_blob_markup.py +0 -0
  695. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_command_version.py +0 -0
  696. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_connect_action.py +0 -0
  697. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_connection_screen.py +0 -0
  698. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_edit_query_in_editor.py +0 -0
  699. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_explorer_toggle.py +0 -0
  700. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_filter_input_widget.py +0 -0
  701. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_json_tree.py +0 -0
  702. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_multi_select_actions.py +0 -0
  703. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_password_input.py +0 -0
  704. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_query_history.py +0 -0
  705. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_results_incremental_rendering.py +0 -0
  706. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_telescope_fresh_start.py +0 -0
  707. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/ui/test_tree_schema_grouping.py +0 -0
  708. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/__init__.py +0 -0
  709. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/providers/__init__.py +0 -0
  710. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/providers/test_osquery_adapter.py +0 -0
  711. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/__init__.py +0 -0
  712. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_alter_table.py +0 -0
  713. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_core.py +0 -0
  714. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_create_index.py +0 -0
  715. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_create_table.py +0 -0
  716. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_create_view.py +0 -0
  717. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_delete.py +0 -0
  718. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_drop.py +0 -0
  719. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_edge_cases_cross_returning.py +0 -0
  720. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_edge_cases_misc.py +0 -0
  721. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_edge_cases_select_window.py +0 -0
  722. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_edge_cases_union_cast.py +0 -0
  723. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_insert.py +0 -0
  724. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_select.py +0 -0
  725. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_truncate.py +0 -0
  726. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/sql_completion/test_update.py +0 -0
  727. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_alert_command_handler.py +0 -0
  728. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_auto_reconnect_after_driver_install.py +0 -0
  729. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_autocomplete_alias_multi_db.py +0 -0
  730. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_clipboard.py +0 -0
  731. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_comments.py +0 -0
  732. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_config_dir_resolution.py +0 -0
  733. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_connection_config_from_dict.py +0 -0
  734. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_connection_flow.py +0 -0
  735. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_connection_mixin_edit.py +0 -0
  736. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_connection_picker_refresh.py +0 -0
  737. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_docker_credential_parsing.py +0 -0
  738. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_docker_tab_filtering.py +0 -0
  739. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_duckdb_data_files.py +0 -0
  740. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_editor_detection.py +0 -0
  741. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_executor_reset_on_connection_switch.py +0 -0
  742. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_extra_options_passthrough.py +0 -0
  743. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_flight_adapter.py +0 -0
  744. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_history_store_file_backed.py +0 -0
  745. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_incremental_rendering_numeric_range.py +0 -0
  746. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_install_strategy_uv.py +0 -0
  747. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_motherduck_adapter.py +0 -0
  748. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_mssql_adapter.py +0 -0
  749. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_mssql_autocommit.py +0 -0
  750. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_open_line.py +0 -0
  751. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_oracle_adapter.py +0 -0
  752. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_password_command.py +0 -0
  753. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_postgresql_adapter.py +0 -0
  754. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_probe_port.py +0 -0
  755. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_process_worker_pickle_safety.py +0 -0
  756. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_project_dir_routing.py +0 -0
  757. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_query_alerts.py +0 -0
  758. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_query_alerts_hierarchy.py +0 -0
  759. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_query_confirm_integration.py +0 -0
  760. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_query_deletion.py +0 -0
  761. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_sanitize_row.py +0 -0
  762. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_schema_config_validator.py +0 -0
  763. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_select_all.py +0 -0
  764. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_single_statement_execution.py +0 -0
  765. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_snowflake_adapter.py +0 -0
  766. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_sqlite_returning.py +0 -0
  767. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_starred.py +0 -0
  768. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_stdin_secret.py +0 -0
  769. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_text_object_menu.py +0 -0
  770. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_tls_adapters.py +0 -0
  771. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_transaction_executor.py +0 -0
  772. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_transaction_state.py +0 -0
  773. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_tunnel_paramiko_version.py +0 -0
  774. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_undo_history.py +0 -0
  775. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_url_parser.py +0 -0
  776. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_vim_motions.py +0 -0
  777. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_vim_operators.py +0 -0
  778. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_vim_text_objects.py +0 -0
  779. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/tests/unit/test_vim_visual_mode.py +0 -0
  780. {sqlit_tui-1.5.0 → sqlit_tui-1.5.2}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlit-tui
3
- Version: 1.5.0
3
+ Version: 1.5.2
4
4
  Summary: A terminal UI for SQL Server, PostgreSQL, MySQL, SQLite, Oracle, and more
5
5
  Project-URL: Homepage, https://github.com/Maxteabag/sqlit
6
6
  Project-URL: Repository, https://github.com/Maxteabag/sqlit
@@ -349,8 +349,6 @@ Autocomplete triggers automatically in INSERT mode. Use `Tab` to accept.
349
349
 
350
350
  Connections and settings are stored in `$XDG_CONFIG_HOME/sqlit/` (default: `~/.config/sqlit/`). Override the location by setting `SQLIT_CONFIG_DIR`.
351
351
 
352
- If an older install left files in `~/.sqlit/`, they are moved to the new location automatically on first run.
353
-
354
352
  ### Custom keybindings
355
353
 
356
354
  Edit the `keymap.json` file in your sqlit config dir. See [`config/keymap.template.json`](config/keymap.template.json) for the full default keymap. Keymap.json need to only contain the overriding keymaps.
@@ -239,8 +239,6 @@ Autocomplete triggers automatically in INSERT mode. Use `Tab` to accept.
239
239
 
240
240
  Connections and settings are stored in `$XDG_CONFIG_HOME/sqlit/` (default: `~/.config/sqlit/`). Override the location by setting `SQLIT_CONFIG_DIR`.
241
241
 
242
- If an older install left files in `~/.sqlit/`, they are moved to the new location automatically on first run.
243
-
244
242
  ### Custom keybindings
245
243
 
246
244
  Edit the `keymap.json` file in your sqlit config dir. See [`config/keymap.template.json`](config/keymap.template.json) for the full default keymap. Keymap.json need to only contain the overriding keymaps.
@@ -169,6 +169,7 @@ max-complexity = 25 # complex domain logic in cloud providers and TUI screens
169
169
 
170
170
  [project.scripts]
171
171
  sqlit = "sqlit.cli:main"
172
+ sqlit-tui = "sqlit.cli:main"
172
173
 
173
174
  [project.urls]
174
175
  Homepage = "https://github.com/Maxteabag/sqlit"
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.5.0'
22
- __version_tuple__ = version_tuple = (1, 5, 0)
21
+ __version__ = version = '1.5.2'
22
+ __version_tuple__ = version_tuple = (1, 5, 2)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -177,6 +177,32 @@ def _sane_tty() -> None:
177
177
  pass
178
178
 
179
179
 
180
+ def _prewarm_process_worker(runtime: RuntimeConfig) -> Any | None:
181
+ """Spawn the process worker before the Textual App is constructed.
182
+
183
+ `multiprocessing.spawn` collects the parent's open file descriptors at
184
+ spawn time. Textual's `App.__init__` registers signal-handler pipes
185
+ and other non-inheritable FDs, which cause spawn to abort with
186
+ `ValueError: bad value(s) in fds_to_keep` (see issue #189). Spawning
187
+ here — before the App is constructed — is the latest point at which
188
+ the FD set is still clean.
189
+
190
+ Returns the live client, or None if spawn fails or the worker is
191
+ disabled. On failure we fall through to the lazy path inside the UI;
192
+ on macOS that path raises and the in-process executor takes over.
193
+ """
194
+ if not runtime.process_worker:
195
+ return None
196
+ if runtime.mock.enabled:
197
+ return None
198
+ try:
199
+ from sqlit.domains.process_worker.app.process_worker_client import ProcessWorkerClient
200
+
201
+ return ProcessWorkerClient()
202
+ except Exception:
203
+ return None
204
+
205
+
180
206
  def _run_app(app: Any) -> int:
181
207
  exit_code: int | None = None
182
208
  handled_signals = [signal.SIGINT, signal.SIGTERM]
@@ -464,6 +490,7 @@ def main() -> int:
464
490
  connection_url, filtered_argv = _extract_connection_url(filtered_argv)
465
491
 
466
492
  log_startup_step("cli_parser_start")
493
+ from sqlit import __version__
467
494
  parser = argparse.ArgumentParser(
468
495
  prog="sqlit",
469
496
  description="A terminal UI for SQL databases",
@@ -476,6 +503,12 @@ def main() -> int:
476
503
  ),
477
504
  formatter_class=argparse.RawDescriptionHelpFormatter,
478
505
  )
506
+ parser.add_argument(
507
+ "-v",
508
+ "--version",
509
+ action="version",
510
+ version=f"%(prog)s {__version__}",
511
+ )
479
512
 
480
513
  parser.add_argument(
481
514
  "--mock",
@@ -843,10 +876,14 @@ def main() -> int:
843
876
  print(f"Error: {exc}")
844
877
  return 1
845
878
 
879
+ # Spawn the worker before the Textual App is constructed; see
880
+ # _prewarm_process_worker for why this matters on macOS.
881
+ process_worker_client = _prewarm_process_worker(runtime)
846
882
  app = SSMSTUI(
847
883
  services=services,
848
884
  startup_connection=startup_config,
849
885
  exclusive_connection=exclusive_connection,
886
+ process_worker_client=process_worker_client,
850
887
  )
851
888
  exit_code = _run_app(app)
852
889
  if exit_code != 0:
@@ -907,7 +944,12 @@ def main() -> int:
907
944
  print(f"Error: {alert_error}")
908
945
  return 1
909
946
 
910
- app = SSMSTUI(services=services, startup_connection=temp_config)
947
+ process_worker_client = _prewarm_process_worker(runtime)
948
+ app = SSMSTUI(
949
+ services=services,
950
+ startup_connection=temp_config,
951
+ process_worker_client=process_worker_client,
952
+ )
911
953
  return _run_app(app)
912
954
 
913
955
  if args.command in {"connections", "connection"}:
@@ -417,18 +417,29 @@ class DatabaseAdapter(ABC):
417
417
  """Quote an identifier (table name, column name, etc.)."""
418
418
  pass
419
419
 
420
+ def format_autocomplete_identifier(self, name: str) -> str:
421
+ """Format an identifier for insertion from autocomplete.
422
+
423
+ Most dialects keep the raw name for backwards-compatible suggestions.
424
+ Dialects with case-sensitive quoted identifiers can override this to
425
+ return executable SQL for names that need quoting.
426
+ """
427
+ return name
428
+
420
429
  def qualified_name(self, database: str | None, schema: str | None, name: str) -> str:
421
430
  """Build a quoted qualified identifier, skipping empty segments.
422
431
 
423
432
  Default handles SQL Server-style `[db].[schema].[name]`, PostgreSQL-
424
433
  style `"schema"."name"`, and single-part `"name"` by omitting any
425
- empty/None component. Dialects that want different composition
426
- (e.g. MySQL, which has no schemas within databases) can override.
434
+ empty/None component, removing database component if provider
435
+ doesn't support cross-database queries and remove default schema name.
436
+ Dialects that want different composition (e.g. MySQL, which has
437
+ no schemas within databases) can override.
427
438
  """
428
439
  parts: list[str] = []
429
- if database:
440
+ if database and self.supports_cross_database_queries:
430
441
  parts.append(self.quote_identifier(database))
431
- if schema:
442
+ if schema and (schema != self.default_schema or parts):
432
443
  parts.append(self.quote_identifier(schema))
433
444
  parts.append(self.quote_identifier(name))
434
445
  return ".".join(parts)
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import re
5
6
  from dataclasses import replace
6
7
  from typing import TYPE_CHECKING, Any
7
8
 
@@ -17,6 +18,8 @@ from sqlit.domains.connections.providers.adapters.base import (
17
18
  if TYPE_CHECKING:
18
19
  from sqlit.domains.connections.domain.config import ConnectionConfig
19
20
 
21
+ _POSTGRES_SAFE_UNQUOTED_IDENTIFIER = re.compile(r"^[a-z_][a-z0-9_]*$")
22
+
20
23
 
21
24
  class PostgresBaseAdapter(CursorBasedAdapter):
22
25
  """Base class for PostgreSQL-compatible databases (PostgreSQL, CockroachDB).
@@ -119,6 +122,12 @@ class PostgresBaseAdapter(CursorBasedAdapter):
119
122
  escaped = name.replace('"', '""')
120
123
  return f'"{escaped}"'
121
124
 
125
+ def format_autocomplete_identifier(self, name: str) -> str:
126
+ """Quote autocomplete identifiers that PostgreSQL would otherwise fold."""
127
+ if _POSTGRES_SAFE_UNQUOTED_IDENTIFIER.fullmatch(name):
128
+ return name
129
+ return self.quote_identifier(name)
130
+
122
131
  def build_select_query(self, table: str, limit: int, database: str | None = None, schema: str | None = None) -> str:
123
132
  """Build SELECT LIMIT query for PostgreSQL."""
124
133
  schema = schema or "public"
@@ -2,14 +2,39 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import faulthandler
6
+ import os
5
7
  import pickle
8
+ import sys
9
+ import tempfile
6
10
  import threading
7
11
  import time
8
12
  from collections import deque
9
13
  from dataclasses import dataclass, field
10
14
  from multiprocessing.connection import Connection
15
+ from pathlib import Path
11
16
  from typing import Any
12
17
 
18
+
19
+ def _open_worker_log() -> Any | None:
20
+ """Open the worker log file, honoring SQLIT_WORKER_LOG when set.
21
+
22
+ The parent process may attach this worker to a Textual-managed pipe;
23
+ libpq notice writes or unexpected stderr output would then SIGPIPE the
24
+ child. Redirecting both streams to a real file avoids that and gives a
25
+ place to land C-level fault tracebacks for future diagnosis.
26
+ """
27
+ override = os.environ.get("SQLIT_WORKER_LOG")
28
+ if override:
29
+ path = Path(override).expanduser()
30
+ else:
31
+ path = Path(tempfile.gettempdir()) / "sqlit-worker.log"
32
+ try:
33
+ path.parent.mkdir(parents=True, exist_ok=True)
34
+ return path.open("a", buffering=1)
35
+ except OSError:
36
+ return None
37
+
13
38
  from sqlit.domains.connections.domain.config import ConnectionConfig
14
39
  from sqlit.domains.connections.providers.catalog import get_provider
15
40
  from sqlit.domains.connections.providers.config_service import normalize_connection_config
@@ -115,7 +140,14 @@ class _WorkerState:
115
140
  )
116
141
  return
117
142
 
118
- if len(split_statements(query)) > 1:
143
+ from sqlit.domains.query.editing.comments import is_comment_only_statement
144
+
145
+ executable_statements = [
146
+ statement
147
+ for statement in split_statements(query)
148
+ if not is_comment_only_statement(statement)
149
+ ]
150
+ if len(executable_statements) > 1:
119
151
  self.send(
120
152
  {
121
153
  "type": "error",
@@ -493,6 +525,14 @@ class _WorkerState:
493
525
 
494
526
  def run_process_worker(conn: Connection) -> None:
495
527
  """Process entrypoint for query execution."""
528
+ log_file = _open_worker_log()
529
+ if log_file is not None:
530
+ sys.stdout = log_file
531
+ sys.stderr = log_file
532
+ try:
533
+ faulthandler.enable(file=log_file)
534
+ except (RuntimeError, ValueError):
535
+ pass
496
536
  state = _WorkerState(conn=conn)
497
537
  try:
498
538
  while True:
@@ -63,6 +63,14 @@ class ProcessWorkerClient:
63
63
  raise error
64
64
  if os.name != "posix" or sys.platform.startswith("win"):
65
65
  raise error
66
+ # macOS (especially Tahoe 26+) aborts in the child whenever a forked
67
+ # process touches CoreFoundation / Security.framework / os_log —
68
+ # which happens inside psycopg, getaddrinfo, and many other stdlib
69
+ # paths. Forking here causes hard segfaults (issue #189), so we
70
+ # surface the spawn failure and let the caller fall back to
71
+ # in-process execution.
72
+ if sys.platform == "darwin":
73
+ raise error
66
74
  try:
67
75
  self._start_with_context(get_context("fork"))
68
76
  except Exception:
@@ -19,7 +19,8 @@ if TYPE_CHECKING:
19
19
  def _iter_sql_chars(sql: str) -> Iterator[tuple[int, str, bool]]:
20
20
  """Iterate through SQL characters, tracking string literal context.
21
21
 
22
- Handles escape sequences (backslash) and SQL-style doubled quotes.
22
+ Handles escape sequences (backslash), SQL-style doubled quotes,
23
+ and PostgreSQL dollar-quoted strings ($$ or $tag$).
23
24
 
24
25
  Yields:
25
26
  (index, char, outside_string) tuples where outside_string is True
@@ -27,9 +28,24 @@ def _iter_sql_chars(sql: str) -> Iterator[tuple[int, str, bool]]:
27
28
  """
28
29
  in_single_quote = False
29
30
  in_double_quote = False
31
+ in_dollar_tag: str | None = None
30
32
  i = 0
31
33
 
32
34
  while i < len(sql):
35
+ # If inside a dollar-quoted string, check for the closing tag
36
+ if in_dollar_tag is not None:
37
+ if sql[i:].startswith(in_dollar_tag):
38
+ # Yield the characters of the closing tag as inside string
39
+ for offset in range(len(in_dollar_tag)):
40
+ yield (i + offset, sql[i + offset], False)
41
+ i += len(in_dollar_tag)
42
+ in_dollar_tag = None
43
+ continue
44
+ else:
45
+ yield (i, sql[i], False)
46
+ i += 1
47
+ continue
48
+
33
49
  char = sql[i]
34
50
 
35
51
  # Handle escape sequences in strings
@@ -51,6 +67,18 @@ def _iter_sql_chars(sql: str) -> Iterator[tuple[int, str, bool]]:
51
67
  i += 2
52
68
  continue
53
69
 
70
+ # Check for PostgreSQL dollar-quoted string start
71
+ if char == "$" and not in_single_quote and not in_double_quote:
72
+ # Match $[a-zA-Z_][a-zA-Z0-9_]*$ or $$
73
+ match = re.match(r"^\$([a-zA-Z_][a-zA-Z0-9_]*)?\$", sql[i:])
74
+ if match:
75
+ delimiter = match.group(0)
76
+ in_dollar_tag = delimiter
77
+ for offset in range(len(delimiter)):
78
+ yield (i + offset, sql[i + offset], False)
79
+ i += len(delimiter)
80
+ continue
81
+
54
82
  # Toggle quote state and yield
55
83
  if char == "'" and not in_double_quote:
56
84
  in_single_quote = not in_single_quote
@@ -21,7 +21,9 @@ from .core import (
21
21
  get_all_functions,
22
22
  get_all_keywords,
23
23
  get_current_word,
24
+ get_identifier_namespaces,
24
25
  get_last_token_info,
26
+ get_names_for_namespace,
25
27
  is_inside_string,
26
28
  remove_comments,
27
29
  remove_string_literals,
@@ -256,8 +258,11 @@ def get_completions(
256
258
 
257
259
  # Schema.table prefix → suggest tables after schema name
258
260
  # Pattern: FROM/JOIN schema. or schema.partial
259
- if re.search(r"\b(FROM|JOIN)\s+\w+\.\w*$", clean_before, re.IGNORECASE):
260
- return fuzzy_match(current_word, tables)
261
+ namespace_match = re.search(r"\b(?:FROM|JOIN)\s+(\w+)\.\w*$", clean_before, re.IGNORECASE)
262
+ if namespace_match:
263
+ namespace = namespace_match.group(1)
264
+ names = get_names_for_namespace(namespace, tables)
265
+ return fuzzy_match(current_word, names if names else tables)
261
266
 
262
267
  # ANY/ALL/SOME ( → suggest SELECT for subquery
263
268
  if re.search(r"\b(ANY|ALL|SOME)\s*\(\s*\w*$", clean_before, re.IGNORECASE):
@@ -326,6 +331,7 @@ def get_completions(
326
331
 
327
332
  for suggestion in suggestions:
328
333
  if suggestion.type == SuggestionType.TABLE:
334
+ results.extend(get_identifier_namespaces(tables))
329
335
  results.extend(tables)
330
336
  results.extend(cte_names)
331
337
 
@@ -171,6 +171,84 @@ def fuzzy_match(text: str, candidates: list[str], max_results: int = 50) -> list
171
171
  return [r[2] for r in results[:max_results]]
172
172
 
173
173
 
174
+ def split_identifier_parts(identifier: str) -> list[str]:
175
+ """Split a possibly quoted qualified identifier into unquoted parts."""
176
+ parts: list[str] = []
177
+ current: list[str] = []
178
+ quote: str | None = None
179
+ bracketed = False
180
+
181
+ for char in identifier:
182
+ if bracketed:
183
+ if char == "]":
184
+ bracketed = False
185
+ else:
186
+ current.append(char)
187
+ continue
188
+
189
+ if quote:
190
+ if char == quote:
191
+ quote = None
192
+ else:
193
+ current.append(char)
194
+ continue
195
+
196
+ if char == "[":
197
+ bracketed = True
198
+ continue
199
+ if char in {'"', "`"}:
200
+ quote = char
201
+ continue
202
+ if char == ".":
203
+ part = "".join(current).strip()
204
+ if part:
205
+ parts.append(part)
206
+ current = []
207
+ continue
208
+
209
+ current.append(char)
210
+
211
+ part = "".join(current).strip()
212
+ if part:
213
+ parts.append(part)
214
+ return parts
215
+
216
+
217
+ def get_identifier_namespaces(identifiers: list[str]) -> list[str]:
218
+ """Return first qualifier parts from schema/database-qualified names."""
219
+ namespaces: list[str] = []
220
+ seen: set[str] = set()
221
+ for identifier in identifiers:
222
+ parts = split_identifier_parts(identifier)
223
+ if len(parts) < 2:
224
+ continue
225
+ namespace = parts[0]
226
+ key = namespace.lower()
227
+ if key not in seen:
228
+ seen.add(key)
229
+ namespaces.append(namespace)
230
+ return namespaces
231
+
232
+
233
+ def get_names_for_namespace(namespace: str, identifiers: list[str]) -> list[str]:
234
+ """Return final identifier parts that belong to the requested namespace."""
235
+ namespace_lower = namespace.lower()
236
+ names: list[str] = []
237
+ seen: set[str] = set()
238
+
239
+ for identifier in identifiers:
240
+ parts = split_identifier_parts(identifier)
241
+ if len(parts) < 2 or parts[0].lower() != namespace_lower:
242
+ continue
243
+ name = parts[-1]
244
+ key = name.lower()
245
+ if key not in seen:
246
+ seen.add(key)
247
+ names.append(name)
248
+
249
+ return names
250
+
251
+
174
252
  def extract_table_refs(sql: str) -> list[TableRef]:
175
253
  """Extract table references and aliases from SQL.
176
254
 
@@ -403,12 +403,12 @@ class AutocompleteSchemaMixin:
403
403
  try:
404
404
  entries: list[tuple[str, list[tuple[str, tuple[str, str, str | None]]]]] = []
405
405
  for schema_name, table_name in tables:
406
+ display_name = dialect.format_table_name(schema_name, table_name)
406
407
  if single_db:
407
- full_name = table_name
408
+ full_name = display_name
408
409
  else:
409
410
  full_name = dialect.qualified_name(database, schema_name, table_name)
410
411
 
411
- display_name = dialect.format_table_name(schema_name, table_name)
412
412
  metadata = [
413
413
  (display_name.lower(), (schema_name, table_name, database)),
414
414
  (table_name.lower(), (schema_name, table_name, database)),
@@ -486,12 +486,12 @@ class AutocompleteSchemaMixin:
486
486
  try:
487
487
  entries: list[tuple[str, list[tuple[str, tuple[str, str, str | None]]]]] = []
488
488
  for schema_name, view_name in views:
489
+ display_name = dialect.format_table_name(schema_name, view_name)
489
490
  if single_db:
490
- full_name = view_name
491
+ full_name = display_name
491
492
  else:
492
493
  full_name = dialect.qualified_name(database, schema_name, view_name)
493
494
 
494
- display_name = dialect.format_table_name(schema_name, view_name)
495
495
  metadata = [
496
496
  (display_name.lower(), (schema_name, view_name, database)),
497
497
  (view_name.lower(), (schema_name, view_name, database)),
@@ -799,16 +799,16 @@ class AutocompleteSchemaMixin:
799
799
  db_arg = self._get_metadata_db_arg(database)
800
800
  tables = await run_db_call(inspector.get_tables, connection, db_arg)
801
801
  for schema_name, table_name in tables:
802
+ display_name = dialect.format_table_name(schema_name, table_name)
802
803
  # Use simple name if we have a default database, full qualifier otherwise
803
804
  if len(databases) == 1:
804
- # Single database - use simple table name
805
- schema_cache["tables"].append(table_name)
805
+ # Single database - omit only the provider's default schema
806
+ schema_cache["tables"].append(display_name)
806
807
  else:
807
808
  # Multiple databases - use qualified identifier
808
809
  full_name = dialect.qualified_name(database, schema_name, table_name)
809
810
  schema_cache["tables"].append(full_name)
810
811
  # Keep metadata for column loading (multiple keys for flexible lookup)
811
- display_name = dialect.format_table_name(schema_name, table_name)
812
812
  table_metadata[display_name.lower()] = (schema_name, table_name, database)
813
813
  table_metadata[table_name.lower()] = (schema_name, table_name, database)
814
814
  if database:
@@ -820,16 +820,16 @@ class AutocompleteSchemaMixin:
820
820
  # Get views
821
821
  views = await run_db_call(inspector.get_views, connection, db_arg)
822
822
  for schema_name, view_name in views:
823
+ display_name = dialect.format_table_name(schema_name, view_name)
823
824
  # Use simple name if we have a default database, full qualifier otherwise
824
825
  if len(databases) == 1:
825
- # Single database - use simple view name
826
- schema_cache["views"].append(view_name)
826
+ # Single database - omit only the provider's default schema
827
+ schema_cache["views"].append(display_name)
827
828
  else:
828
829
  # Multiple databases - use qualified identifier
829
830
  full_name = dialect.qualified_name(database, schema_name, view_name)
830
831
  schema_cache["views"].append(full_name)
831
832
  # Keep metadata for column loading (multiple keys for flexible lookup)
832
- display_name = dialect.format_table_name(schema_name, view_name)
833
833
  table_metadata[display_name.lower()] = (schema_name, view_name, database)
834
834
  table_metadata[view_name.lower()] = (schema_name, view_name, database)
835
835
  if database:
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import re
6
+ from typing import cast
6
7
 
7
8
  from sqlit.domains.query.completion import (
8
9
  SuggestionType,
@@ -16,6 +17,46 @@ from sqlit.shared.ui.protocols import AutocompleteMixinHost
16
17
  class AutocompleteSuggestionsMixin:
17
18
  """Mixin providing SQL autocomplete suggestion logic."""
18
19
 
20
+ def _format_autocomplete_identifier(self: AutocompleteMixinHost, name: str) -> str:
21
+ provider = getattr(self, "current_provider", None)
22
+ formatter = getattr(getattr(provider, "dialect", None), "format_autocomplete_identifier", None)
23
+ if callable(formatter):
24
+ return cast(str, formatter(name))
25
+ return name
26
+
27
+ def _format_autocomplete_name(self: AutocompleteMixinHost, name: str) -> str:
28
+ if any(marker in name for marker in ('"', "`", "[", "]")):
29
+ return name
30
+ table_metadata = getattr(self, "_table_metadata", {}) or {}
31
+ metadata = table_metadata.get(name.lower())
32
+ if metadata:
33
+ schema_name, object_name, _database = metadata
34
+ provider = getattr(self, "current_provider", None)
35
+ default_schema = getattr(getattr(provider, "capabilities", None), "default_schema", None)
36
+ formatted_object = AutocompleteSuggestionsMixin._format_autocomplete_identifier(self, object_name)
37
+ if schema_name and schema_name != default_schema and name.lower().startswith(f"{schema_name.lower()}."):
38
+ formatted_schema = AutocompleteSuggestionsMixin._format_autocomplete_identifier(self, schema_name)
39
+ return f"{formatted_schema}.{formatted_object}"
40
+ return formatted_object
41
+ if "." not in name:
42
+ return AutocompleteSuggestionsMixin._format_autocomplete_identifier(self, name)
43
+ return ".".join(
44
+ AutocompleteSuggestionsMixin._format_autocomplete_identifier(self, part)
45
+ for part in name.split(".")
46
+ )
47
+
48
+ def _format_autocomplete_columns(
49
+ self: AutocompleteMixinHost,
50
+ columns: dict[str, list[str]],
51
+ ) -> dict[str, list[str]]:
52
+ return {
53
+ table_key: [
54
+ AutocompleteSuggestionsMixin._format_autocomplete_identifier(self, column)
55
+ for column in column_names
56
+ ]
57
+ for table_key, column_names in columns.items()
58
+ }
59
+
19
60
  def _get_current_word(self: AutocompleteMixinHost, text: str, cursor_pos: int) -> str:
20
61
  """Get the word currently being typed at cursor position."""
21
62
  before_cursor = text[:cursor_pos]
@@ -64,8 +105,13 @@ class AutocompleteSuggestionsMixin:
64
105
  def _get_autocomplete_suggestions(self: AutocompleteMixinHost, text: str, cursor_pos: int) -> list[str]:
65
106
  """Get autocomplete suggestions using the SQL completion engine."""
66
107
  # Build schema data for get_completions
67
- tables = self._schema_cache.get("tables", []) + self._schema_cache.get("views", [])
68
- columns = self._schema_cache.get("columns", {})
108
+ raw_tables = self._schema_cache.get("tables", []) + self._schema_cache.get("views", [])
109
+ raw_columns = self._schema_cache.get("columns", {})
110
+ tables = [
111
+ AutocompleteSuggestionsMixin._format_autocomplete_name(self, table)
112
+ for table in raw_tables
113
+ ]
114
+ columns = AutocompleteSuggestionsMixin._format_autocomplete_columns(self, raw_columns)
69
115
  procedures = self._schema_cache.get("procedures", [])
70
116
 
71
117
  # First check if we need to lazy-load columns before calling get_completions
@@ -81,7 +127,7 @@ class AutocompleteSuggestionsMixin:
81
127
  been loaded yet. Returning Loading... for an unknown key would
82
128
  wedge forever because the loader skips unknown tables silently.
83
129
  """
84
- if key in columns:
130
+ if key in raw_columns:
85
131
  return False
86
132
  if key not in table_metadata:
87
133
  return False
@@ -102,7 +148,7 @@ class AutocompleteSuggestionsMixin:
102
148
  scope = suggestion.table_scope
103
149
  if scope:
104
150
  scope_lower = scope.lower()
105
- table_key = alias_map.get(scope_lower, scope_lower)
151
+ table_key = alias_map.get(scope_lower, scope_lower).lower()
106
152
 
107
153
  if needs_column_load(table_key) and table_key not in loading:
108
154
  self._load_columns_for_table(table_key)