kaqing 2.0.71__tar.gz → 2.0.72__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 (189) hide show
  1. {kaqing-2.0.71 → kaqing-2.0.72}/PKG-INFO +1 -1
  2. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sql/sql_completer.py +6 -6
  3. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sql/state_machine.py +154 -169
  4. kaqing-2.0.72/adam/version.py +5 -0
  5. {kaqing-2.0.71 → kaqing-2.0.72}/kaqing.egg-info/PKG-INFO +1 -1
  6. {kaqing-2.0.71 → kaqing-2.0.72}/setup.py +1 -1
  7. kaqing-2.0.71/adam/version.py +0 -5
  8. {kaqing-2.0.71 → kaqing-2.0.72}/README +0 -0
  9. {kaqing-2.0.71 → kaqing-2.0.72}/adam/__init__.py +0 -0
  10. {kaqing-2.0.71 → kaqing-2.0.72}/adam/app_session.py +0 -0
  11. {kaqing-2.0.71 → kaqing-2.0.72}/adam/apps.py +0 -0
  12. {kaqing-2.0.71 → kaqing-2.0.72}/adam/batch.py +0 -0
  13. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/__init__.py +0 -0
  14. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/check.py +0 -0
  15. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/check_context.py +0 -0
  16. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/check_result.py +0 -0
  17. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/check_utils.py +0 -0
  18. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/compactionstats.py +0 -0
  19. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/cpu.py +0 -0
  20. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/disk.py +0 -0
  21. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/gossip.py +0 -0
  22. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/issue.py +0 -0
  23. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/memory.py +0 -0
  24. {kaqing-2.0.71 → kaqing-2.0.72}/adam/checks/status.py +0 -0
  25. {kaqing-2.0.71 → kaqing-2.0.72}/adam/cli.py +0 -0
  26. {kaqing-2.0.71 → kaqing-2.0.72}/adam/cli_group.py +0 -0
  27. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/__init__.py +0 -0
  28. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/column.py +0 -0
  29. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/columns.py +0 -0
  30. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/compactions.py +0 -0
  31. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/cpu.py +0 -0
  32. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/dir_data.py +0 -0
  33. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/dir_snapshots.py +0 -0
  34. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/gossip.py +0 -0
  35. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/host_id.py +0 -0
  36. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/memory.py +0 -0
  37. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/node_address.py +0 -0
  38. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/node_load.py +0 -0
  39. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/node_owns.py +0 -0
  40. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/node_status.py +0 -0
  41. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/node_tokens.py +0 -0
  42. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/node_utils.py +0 -0
  43. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/pod_name.py +0 -0
  44. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/volume_cassandra.py +0 -0
  45. {kaqing-2.0.71 → kaqing-2.0.72}/adam/columns/volume_root.py +0 -0
  46. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/__init__.py +0 -0
  47. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/alter_tables.py +0 -0
  48. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/app.py +0 -0
  49. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/app_ping.py +0 -0
  50. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/bash.py +0 -0
  51. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/cd.py +0 -0
  52. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/check.py +0 -0
  53. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/cli_commands.py +0 -0
  54. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/command.py +0 -0
  55. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/command_helpers.py +0 -0
  56. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/commands_utils.py +0 -0
  57. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/cp.py +0 -0
  58. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/cql/__init__.py +0 -0
  59. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/cql/cql_completions.py +0 -0
  60. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/cql/cql_table_completer.py +0 -0
  61. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/cql/cql_utils.py +0 -0
  62. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/cql/cqlsh.py +0 -0
  63. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/__init__.py +0 -0
  64. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/code_start.py +0 -0
  65. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/code_stop.py +0 -0
  66. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/code_utils.py +0 -0
  67. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/deploy.py +0 -0
  68. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/deploy_frontend.py +0 -0
  69. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/deploy_pg_agent.py +0 -0
  70. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/deploy_pod.py +0 -0
  71. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/deploy_utils.py +0 -0
  72. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/undeploy.py +0 -0
  73. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/undeploy_frontend.py +0 -0
  74. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/undeploy_pg_agent.py +0 -0
  75. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/deploy/undeploy_pod.py +0 -0
  76. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/describe/__init__.py +0 -0
  77. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/describe/describe.py +0 -0
  78. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/describe/describe_keyspace.py +0 -0
  79. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/describe/describe_keyspaces.py +0 -0
  80. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/describe/describe_table.py +0 -0
  81. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/describe/describe_tables.py +0 -0
  82. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/devices.py +0 -0
  83. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/exit.py +0 -0
  84. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/help.py +0 -0
  85. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/issues.py +0 -0
  86. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/login.py +0 -0
  87. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/logs.py +0 -0
  88. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/ls.py +0 -0
  89. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/medusa/__init__.py +0 -0
  90. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/medusa/medusa.py +0 -0
  91. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/medusa/medusa_backup.py +0 -0
  92. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/medusa/medusa_restore.py +0 -0
  93. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/medusa/medusa_show_backupjobs.py +0 -0
  94. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/medusa/medusa_show_restorejobs.py +0 -0
  95. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/nodetool.py +0 -0
  96. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/nodetool_commands.py +0 -0
  97. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/param_get.py +0 -0
  98. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/param_set.py +0 -0
  99. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/postgres/__init__.py +0 -0
  100. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/postgres/postgres.py +0 -0
  101. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/postgres/postgres_ls.py +0 -0
  102. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/postgres/postgres_preview.py +0 -0
  103. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/postgres/postgres_session.py +0 -0
  104. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/postgres/postgres_utils.py +0 -0
  105. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/postgres/psql_completions.py +0 -0
  106. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/postgres/psql_table_completer.py +0 -0
  107. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/preview_table.py +0 -0
  108. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/pwd.py +0 -0
  109. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/__init__.py +0 -0
  110. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper.py +0 -0
  111. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_forward.py +0 -0
  112. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_forward_stop.py +0 -0
  113. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_restart.py +0 -0
  114. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_run_abort.py +0 -0
  115. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_runs.py +0 -0
  116. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_runs_abort.py +0 -0
  117. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_schedule_activate.py +0 -0
  118. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_schedule_start.py +0 -0
  119. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_schedule_stop.py +0 -0
  120. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_schedules.py +0 -0
  121. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_session.py +0 -0
  122. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/reaper/reaper_status.py +0 -0
  123. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/repair/__init__.py +0 -0
  124. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/repair/repair.py +0 -0
  125. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/repair/repair_log.py +0 -0
  126. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/repair/repair_run.py +0 -0
  127. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/repair/repair_scan.py +0 -0
  128. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/repair/repair_stop.py +0 -0
  129. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/report.py +0 -0
  130. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/restart.py +0 -0
  131. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/rollout.py +0 -0
  132. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/shell.py +0 -0
  133. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/__init__.py +0 -0
  134. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show.py +0 -0
  135. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_adam.py +0 -0
  136. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_app_actions.py +0 -0
  137. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_app_id.py +0 -0
  138. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_app_queues.py +0 -0
  139. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_cassandra_status.py +0 -0
  140. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_cassandra_version.py +0 -0
  141. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_commands.py +0 -0
  142. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_login.py +0 -0
  143. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_params.py +0 -0
  144. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_processes.py +0 -0
  145. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_repairs.py +0 -0
  146. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/show/show_storage.py +0 -0
  147. {kaqing-2.0.71 → kaqing-2.0.72}/adam/commands/watch.py +0 -0
  148. {kaqing-2.0.71 → kaqing-2.0.72}/adam/config.py +0 -0
  149. {kaqing-2.0.71 → kaqing-2.0.72}/adam/embedded_apps.py +0 -0
  150. {kaqing-2.0.71 → kaqing-2.0.72}/adam/embedded_params.py +0 -0
  151. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/__init__.py +0 -0
  152. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/cassandra_clusters.py +0 -0
  153. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/cassandra_nodes.py +0 -0
  154. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/config_maps.py +0 -0
  155. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/custom_resources.py +0 -0
  156. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/deployment.py +0 -0
  157. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/ingresses.py +0 -0
  158. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/jobs.py +0 -0
  159. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/kube_context.py +0 -0
  160. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/pods.py +0 -0
  161. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/secrets.py +0 -0
  162. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/service_accounts.py +0 -0
  163. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/services.py +0 -0
  164. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/statefulsets.py +0 -0
  165. {kaqing-2.0.71 → kaqing-2.0.72}/adam/k8s_utils/volumes.py +0 -0
  166. {kaqing-2.0.71 → kaqing-2.0.72}/adam/log.py +0 -0
  167. {kaqing-2.0.71 → kaqing-2.0.72}/adam/pod_exec_result.py +0 -0
  168. {kaqing-2.0.71 → kaqing-2.0.72}/adam/repl.py +0 -0
  169. {kaqing-2.0.71 → kaqing-2.0.72}/adam/repl_commands.py +0 -0
  170. {kaqing-2.0.71 → kaqing-2.0.72}/adam/repl_session.py +0 -0
  171. {kaqing-2.0.71 → kaqing-2.0.72}/adam/repl_state.py +0 -0
  172. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sql/__init__.py +0 -0
  173. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sql/term_completer.py +0 -0
  174. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sso/__init__.py +0 -0
  175. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sso/authenticator.py +0 -0
  176. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sso/authn_ad.py +0 -0
  177. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sso/authn_okta.py +0 -0
  178. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sso/cred_cache.py +0 -0
  179. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sso/id_token.py +0 -0
  180. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sso/idp.py +0 -0
  181. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sso/idp_login.py +0 -0
  182. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sso/idp_session.py +0 -0
  183. {kaqing-2.0.71 → kaqing-2.0.72}/adam/sso/sso_config.py +0 -0
  184. {kaqing-2.0.71 → kaqing-2.0.72}/adam/utils.py +0 -0
  185. {kaqing-2.0.71 → kaqing-2.0.72}/kaqing.egg-info/SOURCES.txt +0 -0
  186. {kaqing-2.0.71 → kaqing-2.0.72}/kaqing.egg-info/dependency_links.txt +0 -0
  187. {kaqing-2.0.71 → kaqing-2.0.72}/kaqing.egg-info/entry_points.txt +0 -0
  188. {kaqing-2.0.71 → kaqing-2.0.72}/kaqing.egg-info/top_level.txt +0 -0
  189. {kaqing-2.0.71 → kaqing-2.0.72}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kaqing
3
- Version: 2.0.71
3
+ Version: 2.0.72
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  License: UNKNOWN
@@ -4,7 +4,7 @@ from prompt_toolkit.document import Document
4
4
  import sqlparse
5
5
  from sqlparse.sql import Statement
6
6
 
7
- from adam.sql.state_machine import StateMachine
7
+ from adam.sql.state_machine import StateMachine, StateTo
8
8
  from adam.sql.term_completer import TermCompleter
9
9
 
10
10
  __all__ = [
@@ -36,17 +36,17 @@ class SqlCompleter(Completer):
36
36
  completer = DML_COMPLETER
37
37
  else:
38
38
  statement: Statement = stmts[0]
39
- state = self.machine.traverse_tokens(statement.tokens, state)
39
+ state: StateTo = self.machine.traverse_tokens(statement.tokens, StateTo(state))
40
40
  if self.debug:
41
- print('\n =>', state)
41
+ print('\n =>', state.to_s if isinstance(state, StateTo) else '')
42
42
 
43
- if not state:
43
+ if not state or not state.to_s:
44
44
  completer = DML_COMPLETER
45
45
 
46
- if state in self.machine.suggestions:
46
+ if state and state.to_s in self.machine.suggestions:
47
47
  terms = []
48
48
 
49
- for word in self.machine.suggestions[state].strip(' ').split(','):
49
+ for word in self.machine.suggestions[state.to_s].strip(' ').split(','):
50
50
  if word == 'tables':
51
51
  terms.extend(self.tables())
52
52
  elif word == 'single':
@@ -130,24 +130,19 @@ __all__ = [
130
130
 
131
131
  SPEC = [
132
132
  ' > select > select',
133
- 'select_ > name|* > select_a ^ *',
133
+ 'select_ > name|* > select_a ^ *',
134
134
  'select_a > , > select_a_comma_',
135
- 'select_a_comma_ > name|* > select_a ^ *',
136
- 'select_a_ > from > select_from ^ from',
137
- 'select_from_ > name > select_from_x ^ (select,tables',
138
- '- > { > select_from_x_lp_',
139
- 'select_from_x_lp_ > select > select',
135
+ 'select_a_comma_ > name|* > select_a ^ *',
136
+ 'select_a_ > from > select_from ^ from',
137
+ 'select_from_ > name > select_from_x ^ (select,tables',
138
+ '- > ( > select_from_lp_',
139
+ '- < ) > select_from_ns',
140
+ 'select_from_lp_ > select > select',
140
141
  'select_from_x > , > select_from_x_comma_',
141
- '- > } > select_from_x_rp_',
142
- '- > ] > select_from_x_rb_',
143
- 'select_from_x_rp__ > as > select_from_x_as ^ as',
144
- 'select_from_x_rb__ > and|or > select_where_ ^ and,or,group by,limit',
145
- '- > group > select_group',
146
- '- > group by > select_group_by',
147
- '- > limit > select_where_sc_limit',
148
- 'select_from_x_comma_ > name > select_from_x ^ tables',
149
- 'select_from_x_ ^ as,where,inner join,left outer join,right outer join,full outer join,group by,limit',
150
- 'select_from_x_as_x_ > , > select_from_x_comma_ ^ where,inner join,left outer join,right outer join,full outer join,group by,limit',
142
+ 'select_from_ns_ > as > select_from_x_as ^ as',
143
+ 'select_from_x_comma_ > name > select_from_x ^ tables',
144
+ 'select_from_x_ ^ as,where,inner join,left outer join,right outer join,full outer join,group by,limit',
145
+ 'select_from_x_as_x_ > , > select_from_x_comma_ ^ where,inner join,left outer join,right outer join,full outer join,group by,limit',
151
146
  '- > as > select_from_x_as',
152
147
  '- > where > select_where',
153
148
  '- > limit > select_where_sc_limit',
@@ -163,122 +158,108 @@ SPEC = [
163
158
  '- > right outer join > select_join',
164
159
  '- > full > select_from_x_full',
165
160
  '- > full outer join > select_join',
166
- 'select_from_x_as_ > name > select_from_x_as_x ^ x,y,z',
161
+ 'select_from_x_as_ > name > select_from_x_as_x ^ x,y,z',
167
162
  'select_from_x_as_x > , > select_from_x_as_x_comma_',
168
- '- > } > select_where_sc_re_',
169
- 'select_from_x_as_x_comma_ > name > select_from_x ^ tables',
170
- 'select_where_ > name > select_where_a ^ id,x.,y.,z.',
171
- 'select_where_a > comparison > select_where_a_op ^ =,<,<=,>,>=,<>,like,not,in',
172
- 'select_where_a_ > comparison > select_where_a_op ^ =,<,<=,>,>=,<>,like,not,in',
163
+ 'select_from_x_as_x_comma_ > name > select_from_x ^ tables',
164
+ 'select_where_ > name > select_where_a ^ id,x.,y.,z.',
165
+ 'select_where_a > comparison > select_where_a_op ^ =,<,<=,>,>=,<>,like,not,in',
166
+ 'select_where_a_ > comparison > select_where_a_op ^ =,<,<=,>,>=,<>,like,not,in',
173
167
  '- > not > select_where_a_not',
174
168
  '- > in > select_where_a_in',
175
- 'select_where_a_not_ > comparison > select_where_a_not_op ^ like,in',
169
+ 'select_where_a_not_ > comparison > select_where_a_not_op ^ like,in',
176
170
  '- > in > select_where_a_in',
177
- 'select_where_a_in > [ > select_where_a_in_lp_ ^ (',
178
- 'select_where_a_in_lp_ > name|single|num > select_where_a_in_lp_a ^ single,select',
171
+ 'select_where_a_in > ( > select_where_a_in_lp_ ^ (',
172
+ '- < ) > select_where_sc',
173
+ 'select_where_a_in_lp_ > name|single|num > select_where_a_in_lp_a ^ single,select',
179
174
  '- > select > select_where_a_in_lp_select',
180
- 'select_where_a_in_lp_select_ > name > select_a ^ id',
181
- 'select_where_a_in_lp_a > , > select_where_a_in_lp_a_comma_ ^ comma,)',
182
- '- > ] > select_where_sc',
183
- 'select_where_a_in_lp_a_comma_ > name|single|num > select_where_a_in_lp_a ^ single',
184
- 'select_where_a_not_op > name|single|num > select_where_sc ^ single',
185
- 'select_where_a_op > name|single|num > select_where_sc ^ single',
186
- 'select_where_sc > ) > select_where_sc_rp_',
187
- 'select_where_sc > } > select_where_sc_re_',
188
- 'select_where_sc_re__ > as > select_from_x_as ^ as',
189
- 'select_where_sc_rp_ > } > select_where_sc_re_',
190
- 'select_where_sc_rp__ > as > select_from_x_as ^ and,or,group by,limit',
191
- '- > and|or > select_where',
192
- '- > group > select_group',
193
- '- > group by > select_group_by',
194
- '- > limit > select_where_sc_limit',
195
- '- > } > select_where_sc_re_',
196
- 'select_where_sc_ > and|or > select_where ^ and,or,group by,limit',
175
+ 'select_where_a_in_lp_select_ > name > select_a ^ id',
176
+ 'select_where_a_in_lp_a > , > select_where_a_in_lp_a_comma_ ^ comma,)',
177
+ 'select_where_a_in_lp_a_comma_ > name|single|num > select_where_a_in_lp_a ^ single',
178
+ 'select_where_a_not_op > name|single|num > select_where_sc ^ single',
179
+ 'select_where_a_op > name|single|num > select_where_sc ^ single',
180
+ 'select_where_sc_ > and|or > select_where ^ and,or,group by,limit',
197
181
  '- > group > select_group',
198
182
  '- > group by > select_group_by',
199
183
  '- > limit > select_where_sc_limit',
200
- 'select_group_ > by > select_group_by ^ by',
201
- 'select_group_by_ > name > select_group_by_a ^ id,x.,y.,z.',
184
+ 'select_group_ > by > select_group_by ^ by',
185
+ 'select_group_by_ > name > select_group_by_a ^ id,x.,y.,z.',
202
186
  'select_group_by_a > , > select_group_by_a_comma_',
203
- '- > } > select_where_sc_re_',
204
- 'select_group_by_a_comma_ > name > select_group_by_a ^ id,x.,y.,z.',
205
- 'select_group_by_a_ > limit > select_where_sc_limit ^ limit',
206
- 'select_where_sc_limit_ > num > select_where_sc_limit_num ^ 1',
207
- 'select_where_sc_limit_num > ) > select_where_sc_limit_num_rp_',
208
- 'select_where_sc_limit_num_rp__ > as > select_from_x_as ^ as',
187
+ 'select_group_by_a_comma_ > name > select_group_by_a ^ id,x.,y.,z.',
188
+ 'select_group_by_a_ > limit > select_where_sc_limit ^ limit',
189
+ 'select_where_sc_limit_ > num > select_where_sc_limit_num ^ 1',
190
+ 'select_where_sc_limit_num_rp__ > as > select_from_x_as ^ as',
209
191
  'select_where_x_inner_ > join > select_join',
210
- 'select_join_ > name > select_x_join_y ^ tables',
211
- 'select_from_x_left_ > join > select_join ^ outer join',
192
+ 'select_join_ > name > select_x_join_y ^ tables',
193
+ 'select_from_x_left_ > join > select_join ^ outer join',
212
194
  '- > outer > select_from_x_left_outer',
213
- 'select_from_x_left_outer_ > join > select_join ^ join',
214
- 'select_from_x_right_ > join > select_join ^ outer join',
195
+ 'select_from_x_left_outer_ > join > select_join ^ join',
196
+ 'select_from_x_right_ > join > select_join ^ outer join',
215
197
  '- > outer > select_from_x_right_outer',
216
- 'select_from_x_right_outer_ > join > select_join ^ join',
217
- 'select_from_x_full_ > join > select_join ^ outer join',
198
+ 'select_from_x_right_outer_ > join > select_join ^ join',
199
+ 'select_from_x_full_ > join > select_join ^ outer join',
218
200
  '- > outer > select_from_x_full_outer',
219
- 'select_from_x_full_outer_ > join > select_join ^ join',
220
- 'select_x_join_y_ > as > select_x_join_y_as ^ as,on',
221
- '- > on > select_x_join_y_on ^ as,on',
222
- 'select_x_join_y_as_ > name > select_x_join_y_as_y ^ x,y,z',
223
- 'select_x_join_y_as_y_ > on > select_x_join_y_on ^ on',
224
- 'select_x_join_y_on_ > name > select_x_join_y_on_a ^ id,x.,y.,z.',
225
- 'select_x_join_y_on_a > comparison > select_x_join_y_on_a_op ^ =',
226
- 'select_x_join_y_on_a_op > name > select_x_join_y_on_a_op_b ^ id,x.,y.,z.',
201
+ 'select_from_x_full_outer_ > join > select_join ^ join',
202
+ 'select_x_join_y_ > as > select_x_join_y_as ^ as,on',
203
+ '- > on > select_x_join_y_on ^ as,on',
204
+ 'select_x_join_y_as_ > name > select_x_join_y_as_y ^ x,y,z',
205
+ 'select_x_join_y_as_y_ > on > select_x_join_y_on ^ on',
206
+ 'select_x_join_y_on_ > name > select_x_join_y_on_a ^ id,x.,y.,z.',
207
+ 'select_x_join_y_on_a > comparison > select_x_join_y_on_a_op ^ =',
208
+ 'select_x_join_y_on_a_op > name > select_x_join_y_on_a_op_b ^ id,x.,y.,z.',
227
209
  'select_x_join_y_on_a_op_b > _ > select_from_x_as_x_',
228
- '- > } > select_where_sc_re_',
229
210
 
230
211
 
231
212
  ' > insert > insert',
232
- 'insert_ > into > insert_into ^ into',
233
- 'insert_into_ > name > insert_into_x ^ tables',
213
+ 'insert_ > into > insert_into ^ into',
214
+ 'insert_into_ > name > insert_into_x ^ tables',
234
215
  'insert_into_x > ( > insert_into_x_lp_',
235
- 'insert_into_x_ > ( > insert_into_x_lp_ ^ (,values(',
216
+ 'insert_into_x_ > ( > insert_into_x_lp_ ^ (,values(',
236
217
  '- > values > insert_values',
237
- 'insert_into_x_lp_ > name > insert_into_x_lp_a ^ id',
218
+ 'insert_into_x_lp_ > name > insert_into_x_lp_a ^ id',
238
219
  'insert_into_x_lp_a > , > insert_into_x_lp_a_comma_',
239
220
  '- > ) > insert_into_x_lp_a_rp_',
240
- 'insert_into_x_lp_a_comma_ > name > insert_into_x_lp_a ^ id',
241
- 'insert_into_x_lp_a_rp__ > values > insert_values ^ values(,select',
221
+ 'insert_into_x_lp_a_comma_ > name > insert_into_x_lp_a ^ id',
222
+ 'insert_into_x_lp_a_rp__ > values > insert_values ^ values(,select',
242
223
  '- > select > select',
243
224
  'insert_values > ( > insert_values_lp_',
244
- 'insert_values_lp_ > name|single|num > insert_values_lp_v ^ single',
225
+ 'insert_values_lp_ > name|single|num > insert_values_lp_v ^ single',
245
226
  'insert_values_lp_v > , > insert_values_lp_v_comma_',
246
227
  'insert_values_lp_v_comma_ > name|single|num > insert_values_lp_v',
247
228
 
248
229
 
249
230
  ' > update > update',
250
- 'update_ > name > update_x ^ tables',
251
- 'update_x_ > set > update_set ^ set',
252
- 'update_set_ > name > update_set_a ^ id',
231
+ 'update_ > name > update_x ^ tables',
232
+ 'update_x_ > set > update_set ^ set',
233
+ 'update_set_ > name > update_set_a ^ id',
253
234
  'update_set_a > comparison > update_set_a_op',
254
- 'update_set_a_op > name|single|num > update_set_sc ^ single',
235
+ 'update_set_a_op > name|single|num > update_set_sc ^ single',
255
236
  'update_set_sc > , > update_set_sc_comma_',
256
- 'update_set_sc_comma_ > name > update_set_a ^ id',
257
- 'update_set_sc_ > , > update_set_sc_comma_ ^ where',
237
+ 'update_set_sc_comma_ > name > update_set_a ^ id',
238
+ 'update_set_sc_ > , > update_set_sc_comma_ ^ where',
258
239
  '- > where > update_where',
259
- 'update_where_ > name > update_where_a ^ id',
240
+ 'update_where_ > name > update_where_a ^ id',
260
241
  'update_where_a > comparison > update_where_a_op',
261
- 'update_where_a_ > comparison > update_where_a_op ^ =,<,<=,>,>=,<>,like,not,in',
242
+ 'update_where_a_ > comparison > update_where_a_op ^ =,<,<=,>,>=,<>,like,not,in',
262
243
  '- > not > update_where_a_not',
263
244
  '- > in > update_where_a_in',
264
- 'update_where_a_not_ > comparison > update_where_a_not_op ^ like,in',
245
+ 'update_where_a_not_ > comparison > update_where_a_not_op ^ like,in',
265
246
  '- > in > update_where_a_in',
266
- 'update_where_a_in > ( > update_where_a_in_lp_ ^ (',
267
- 'update_where_a_in_lp_ > name|single|num > update_where_a_in_lp_a ^ single,select',
247
+ 'update_where_a_in > ( > update_where_a_in_lp_ ^ (',
248
+ '- < ) > update_where_sc',
249
+ 'update_where_a_in_lp_ > name|single|num > update_where_a_in_lp_a ^ single,select',
268
250
  '- > select > update_where_a_in_lp_select',
269
- 'update_where_a_in_lp_select_ > name > select_a ^ id',
270
- 'update_where_a_in_lp_a > , > update_where_a_in_lp_a_comma_ ^ comma,)',
271
- '- > ) > update_where_sc',
272
- 'update_where_a_in_lp_a_comma_ > name|single|num > update_where_a_in_lp_a ^ single',
273
- 'update_where_a_not_op > name|single|num > update_where_sc ^ single',
274
- 'update_where_a_op > name|single|num > update_where_sc ^ single',
275
- 'update_where_sc_ > and|or > update_where ^ and,or',
251
+ 'update_where_a_in_lp_select_ > name > select_a ^ id',
252
+ 'update_where_a_in_lp_a > , > update_where_a_in_lp_a_comma_ ^ comma,)',
253
+ 'update_where_a_in_lp_a_comma_ > name|single|num > update_where_a_in_lp_a ^ single',
254
+ 'update_where_a_not_op > name|single|num > update_where_sc ^ single',
255
+ 'update_where_a_op > name|single|num > update_where_sc ^ single',
256
+ 'update_where_sc_ > and|or > update_where ^ and,or',
276
257
 
277
258
 
278
259
  ' > delete > delete',
279
- 'delete_ > from > delete_from ^ from',
280
- 'delete_from_ > name > delete_from_x ^ tables',
281
- 'delete_from_x_ > where > update_where ^ where',
260
+ 'delete_ > from > delete_from ^ from',
261
+ 'delete_from_ > name > delete_from_x ^ tables',
262
+ 'delete_from_x_ > where > update_where ^ where',
282
263
  ]
283
264
 
284
265
  KEYWORDS = [
@@ -286,37 +267,32 @@ KEYWORDS = [
286
267
  'and', 'or', 'group', 'by', 'group by', 'limit',
287
268
  'inner join', 'on', 'left', 'right', 'full', 'outer', 'left outer join',
288
269
  'left join', 'right outer join', 'right join', 'full join', 'full outer join',
289
-
290
270
  'insert', 'into', 'values',
291
-
292
271
  'update', 'where', 'set',
293
-
294
272
  'delete'
295
273
  ]
296
274
 
275
+ class StateTo:
276
+ def __init__(self, to_s: str, comeback_token: str = None, comeback_state: str = None):
277
+ self.to_s = to_s
278
+ self.comeback_token = comeback_token
279
+ self.comeback_state = comeback_state
280
+
281
+ def __str__(self):
282
+ return f'{self.to_s} comeback[{self.comeback_token} {self.comeback_state}]'
283
+
297
284
  class StateMachine:
298
- def __init__(self, indent=0, lp_level = 0, le_levels_to_match: set = set(), lb_levels_to_match: set = set(), debug = False):
299
- self.states: dict[str, str] = {}
285
+ def __init__(self, indent=0, lp_level = 0, debug = False):
286
+ self.states: dict[str, StateTo] = {}
300
287
  self.suggestions: dict[str, str] = {}
301
288
 
302
- def add_whitespace_transition(from_s: str):
303
- # add whitespace transition if a state with trailing whitespace is found from from states, for example, select > _ > select_
304
- if from_s.endswith('_') and not from_s.endswith('_comma_') and not from_s.endswith('_lp_') and not from_s.endswith('_rp_'):
305
- if self.debug:
306
- print(f'{from_s[:-1]} > _ = {to_s}')
307
- self.states[f'{from_s[:-1]} > _'] = from_s
308
-
309
289
  self.indent = indent
310
290
  self.lp_level = lp_level
311
- self.le_levels_to_match = le_levels_to_match
312
- self.lb_levels_to_match = lb_levels_to_match
291
+ self.comebacks: dict[int, str] = {}
313
292
  self.debug = debug
314
293
 
315
294
  from_ss_to_add = []
316
295
  from_ss = ['']
317
- token = None
318
- tokens = []
319
- to_s = None
320
296
  words: str = None
321
297
  for l in SPEC:
322
298
  t_and_w = l.split('^')
@@ -326,68 +302,72 @@ class StateMachine:
326
302
  words = None
327
303
 
328
304
  tks = t_and_w[0].strip(' ').split('>')
329
- if l.startswith('-'):
330
- token = tks[1].strip(' ')
331
- if len(tks) > 2:
332
- to_s = tks[2].strip(' ')
333
- for from_s in from_ss:
334
- tokens = [token]
335
- if '|' in token:
336
- tokens = token.strip(' ').split('|')
337
-
338
- for t in tokens:
339
- if self.debug:
340
- print(f'{from_s} > {t} = {to_s}')
341
- self.states[f'{from_s} > {t}'] = to_s
342
- else:
305
+ if not l.startswith('-'):
343
306
  if words:
344
307
  self.suggestions[tks[0].strip(' ')] = words
345
308
 
346
309
  if len(tks) == 1:
347
- from_s = tks[0].strip(' ')
348
- add_whitespace_transition(from_s)
349
- from_ss_to_add.append(f'{from_s}')
310
+ from_ss_to_add.append(tks[0].strip(' '))
350
311
  continue
351
312
 
352
313
  from_ss = []
353
314
  from_ss.extend(from_ss_to_add)
354
315
  from_ss_to_add = []
355
316
  from_ss.append(tks[0].strip(' '))
317
+
318
+ self.add_transitions(from_ss, tks)
319
+
320
+ def add_transitions(self, from_ss: list[str], tks: list[str]):
321
+ token = tks[1].strip(' ')
322
+ if len(tks) > 2:
323
+ to_s = tks[2].strip(' ')
324
+ for from_s in from_ss:
325
+ self.add_whitespace_transition(from_s, to_s)
326
+ self.add_transition(from_s, token, to_s)
327
+ elif '<' in tks[0]:
328
+ from_and_token = tks[0].split('<')
329
+ if len(from_and_token) > 1:
356
330
  for from_s in from_ss:
357
- add_whitespace_transition(from_s)
358
- token = tks[1].strip(' ')
359
- tokens = [token]
360
- if len(tks) > 2:
361
- to_s = tks[2].strip(' ')
362
-
363
- if '|' in token:
364
- tokens = token.split('|')
365
-
366
- for t in tokens:
367
- if self.debug:
368
- print(f'{from_s} > {t} = {to_s}')
369
- self.states[f'{from_s} > {t}'] = to_s
370
-
371
- def traverse_tokens(self, tokens: list[Token], state: str = ''):
372
- def is_opening_embrace():
373
- if f'{state} > ' + '{' in self.states:
374
- self.le_levels_to_match.add(self.lp_level)
375
- return '{'
376
- elif f'{state} > ' + '[' in self.states:
377
- self.lb_levels_to_match.add(self.lp_level)
378
- return '['
379
-
380
- return '('
381
-
382
- def is_closing_embrace():
383
- if f'{state} > ' + '}' in self.states and self.lp_level in self.le_levels_to_match:
384
- self.le_levels_to_match.remove(self.lp_level)
385
- return '}'
386
- elif f'{state} > ' + ']' in self.states and self.lp_level in self.lb_levels_to_match:
387
- self.lb_levels_to_match.remove(self.lp_level)
388
- return ']'
389
-
390
- return ')'
331
+ self.add_comeback_transition(from_s, from_and_token[1], tks[1].strip(' '))
332
+
333
+ def add_whitespace_transition(self, from_s: str, to_s: str):
334
+ # add whitespace transition if a state with trailing whitespace is found from from states, for example, select > _ > select_
335
+ if from_s.endswith('_') and not from_s.endswith('_comma_') and not from_s.endswith('_lp_') and not from_s.endswith('_rp_'):
336
+ if self.debug:
337
+ print(f'{from_s[:-1]} > _ = {to_s}')
338
+ self.states[f'{from_s[:-1]} > _'] = StateTo(from_s)
339
+
340
+ def add_transition(self, from_s: str, token: str, to_s: str):
341
+ tokens = [token]
342
+ if '|' in token:
343
+ tokens = token.split('|')
344
+
345
+ for t in tokens:
346
+ if self.debug:
347
+ print(f'{from_s} > {t} = {to_s}')
348
+ self.states[f'{from_s} > {t}'] = StateTo(to_s)
349
+
350
+ def add_comeback_transition(self, from_s: str, token: str, to_s: str):
351
+ orig = self.states[f'{from_s} > (']
352
+ orig.comeback_token = token
353
+ orig.comeback_state = to_s
354
+ self.states[f'{from_s} > ('] = orig
355
+
356
+ def traverse_tokens(self, tokens: list[Token], state: StateTo = StateTo('')):
357
+ def handle_opening_parenthesis():
358
+ if f'{state.to_s} > {it}' in self.states:
359
+ state_test = self.states[f'{state.to_s} > {it}']
360
+ if state_test.comeback_token:
361
+ self.comebacks[self.lp_level] = state_test.comeback_state
362
+
363
+ def handle_closing_parenthesis():
364
+ if self.lp_level in self.comebacks:
365
+ try:
366
+ return StateTo(self.comebacks[self.lp_level])
367
+ finally:
368
+ del self.comebacks[self.lp_level]
369
+
370
+ return None
391
371
 
392
372
  for token in tokens:
393
373
  if self.debug:
@@ -407,6 +387,8 @@ class StateMachine:
407
387
  if token.is_group:
408
388
  state = self.traverse_tokens(token.tokens, state)
409
389
  else:
390
+ comeback_state = None
391
+
410
392
  it = ''
411
393
  if (t := token.value.lower()) in KEYWORDS:
412
394
  it = t
@@ -421,21 +403,24 @@ class StateMachine:
421
403
  elif token.ttype == T.Wildcard:
422
404
  it = '*'
423
405
  elif token.ttype == T.Punctuation:
424
- if token.value == ',':
425
- it = ','
426
- elif token.value == '(':
427
- it = is_opening_embrace()
406
+ it = token.value
407
+
408
+ if it == '(':
409
+ handle_opening_parenthesis()
428
410
  self.lp_level += 1
429
- elif token.value == ')':
411
+ elif it == ')':
430
412
  self.lp_level -= 1
431
- it = is_closing_embrace()
413
+ comeback_state = handle_closing_parenthesis()
432
414
 
433
415
  elif token.ttype == T.Operator.Comparison:
434
416
  it = 'comparison'
435
417
 
436
418
  try:
437
- # print(f'{state} > {it} > ', end='')
438
- state = self.states[f'{state} > {it}']
419
+ # print(f'\n{state.to_s} > {it} > ', end='')
420
+ if comeback_state:
421
+ state = comeback_state
422
+ else:
423
+ state = self.states[f'{state.to_s} > {it}']
439
424
  # print(state)
440
425
  except:
441
426
  pass
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ __version__ = "2.0.72" #: the working version
5
+ __release__ = "1.0.0" #: the release version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kaqing
3
- Version: 2.0.71
3
+ Version: 2.0.72
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  License: UNKNOWN
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='kaqing',
5
- version='2.0.71',
5
+ version='2.0.72',
6
6
  packages=find_packages(),
7
7
  entry_points={
8
8
  'console_scripts': [
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
-
4
- __version__ = "2.0.71" #: the working version
5
- __release__ = "1.0.0" #: the release version
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes