feat(daemon): validate read-only SQL with sqlglot

This commit is contained in:
Andrey Avtomonov 2026-05-14 17:54:36 +02:00
parent de9f4d97e7
commit aa4431b295
4 changed files with 189 additions and 0 deletions

View file

@ -280,6 +280,30 @@ def test_sql_parse_table_identifier_endpoint() -> None:
assert body["results"]["template"]["reason"] == "looker_template_unresolved"
def test_sql_validate_read_only_endpoint() -> None:
client = TestClient(create_app())
ok_response = client.post(
"/sql/validate-read-only",
json={"dialect": "postgres", "sql": "select * from public.orders"},
)
bad_response = client.post(
"/sql/validate-read-only",
json={
"dialect": "postgres",
"sql": "with x as (insert into audit.events values (1) returning *) select * from x",
},
)
assert ok_response.status_code == 200
assert ok_response.json() == {"ok": True, "error": None}
assert bad_response.status_code == 200
assert bad_response.json() == {
"ok": False,
"error": "SQL contains read/write operation: Insert",
}
def test_sql_analyze_batch_endpoint_returns_per_item_results() -> None:
client = TestClient(create_app())