buildai-cli 0.3.75__tar.gz → 0.3.76__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 (36) hide show
  1. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/PKG-INFO +1 -1
  2. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/db/query.py +13 -4
  3. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/pyproject.toml +1 -1
  4. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/.gitignore +0 -0
  5. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/AGENTS.md +0 -0
  6. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/CLAUDE.md +0 -0
  7. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/buildai_bootstrap.py +0 -0
  8. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/__init__.py +0 -0
  9. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/_has_core.py +0 -0
  10. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/auth_local.py +0 -0
  11. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/__init__.py +0 -0
  12. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/api_proxy.py +0 -0
  13. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/auth.py +0 -0
  14. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/db/__init__.py +0 -0
  15. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/db/broker.py +0 -0
  16. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/db/common.py +0 -0
  17. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/db/migrate.py +0 -0
  18. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/db/schema.py +0 -0
  19. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/db/status.py +0 -0
  20. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/db/tunnel.py +0 -0
  21. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/dev.py +0 -0
  22. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/doctor.py +0 -0
  23. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/gigcamera.py +0 -0
  24. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/commands/processing.py +0 -0
  25. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/config.py +0 -0
  26. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/console.py +0 -0
  27. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/context.py +0 -0
  28. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/db_broker.py +0 -0
  29. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/guard.py +0 -0
  30. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/internal_api.py +0 -0
  31. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/main.py +0 -0
  32. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/nl_query/__init__.py +0 -0
  33. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/nl_query/dataset_tools.py +0 -0
  34. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/ops_init.py +0 -0
  35. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/output.py +0 -0
  36. {buildai_cli-0.3.75 → buildai_cli-0.3.76}/cli/pagination.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: buildai-cli
3
- Version: 0.3.75
3
+ Version: 0.3.76
4
4
  Summary: Build AI CLI (Typer)
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: httpx>=0.27.0
@@ -65,6 +65,8 @@ def _is_write_query(sql: str) -> bool:
65
65
  return True
66
66
 
67
67
  normalized = _normalize_sql(sql)
68
+ if normalized.startswith("WITH ") and re.search(r"\b(INSERT|UPDATE|DELETE)\b", normalized):
69
+ return True
68
70
  for keyword in ("VACUUM", "REASSIGN"):
69
71
  if normalized.startswith(keyword + " ") or normalized == keyword:
70
72
  return True
@@ -98,14 +100,21 @@ def _is_ddl_query(sql: str) -> bool:
98
100
  def _is_select_query(sql: str) -> bool:
99
101
  """Return whether the SQL is a row-returning query."""
100
102
 
103
+ import sqlparse
104
+ from sqlparse.tokens import DML
105
+
101
106
  normalized = _normalize_sql(sql)
102
107
  if normalized.startswith("SELECT "):
103
108
  return True
104
109
  if normalized.startswith("WITH "):
105
- for keyword in ("INSERT", "UPDATE", "DELETE"):
106
- if f" {keyword} " in normalized:
107
- return False
108
- return True
110
+ statements = sqlparse.parse(sql)
111
+ if statements:
112
+ for token in statements[0].tokens:
113
+ if token.is_whitespace:
114
+ continue
115
+ if token.ttype is DML:
116
+ return token.value.upper() == "SELECT"
117
+ return re.search(r"\b(INSERT|UPDATE|DELETE)\b", normalized) is None
109
118
  return any(normalized.startswith(keyword) for keyword in ("SHOW ", "EXPLAIN ", "TABLE "))
110
119
 
111
120
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "buildai-cli"
7
- version = "0.3.75"
7
+ version = "0.3.76"
8
8
  description = "Build AI CLI (Typer)"
9
9
  requires-python = ">=3.11"
10
10
  dependencies = [
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes