Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions ibis-server/tests/routers/v3/connector/postgres/test_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -1219,3 +1219,46 @@ async def test_query_unicode_table(client, connection_info):
"欄位1": "int32",
"欄位2": "int32",
}


async def test_case_sensitive_without_quote(client, connection_info):
manifest = {
"catalog": "wren",
"schema": "public",
"models": [
{
"name": "Orders",
"tableReference": {
"schema": "public",
"table": "orders",
},
"columns": [
{
"name": "O_orderkey",
"type": "integer",
"expression": "o_orderkey",
},
{"name": "O_custkey", "type": "integer", "expression": "o_custkey"},
],
}
],
}

manifest_str = base64.b64encode(orjson.dumps(manifest)).decode("utf-8")

response = await client.post(
url=f"{base_url}/query?cacheEnable=true",
json={
"connectionInfo": connection_info,
"manifestStr": manifest_str,
"sql": "SELECT O_orderkey, O_custkey FROM Orders LIMIT 1",
},
headers={X_WREN_FALLBACK_DISABLE: "true"},
)

assert response.status_code == 200
result = response.json()
assert result["dtypes"] == {
"O_orderkey": "int32",
"O_custkey": "int32",
}
35 changes: 13 additions & 22 deletions wren-core-py/poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion wren-core-py/src/extractor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ impl PyManifestExtractor {
}

fn resolve_used_table_names(mdl: &WrenMDL, sql: &str) -> Result<Vec<String>, CoreError> {
let ctx_state = wren_core::SessionContext::new().state();
let mut config = wren_core::SessionConfig::new();
config.options_mut().sql_parser.enable_ident_normalization = false;
let ctx_state = wren_core::SessionContext::new_with_config(config).state();
ctx_state
.sql_to_statement(sql, "generic")
.map_err(CoreError::from)
Expand Down
39 changes: 39 additions & 0 deletions wren-core-py/tests/test_modeling_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -549,3 +549,42 @@ def test_backward_compatible_check():
json.dumps(manifest_backward).encode("utf-8")
).decode("utf-8")
assert is_backward_compatible(manifest_backward_str)


def test_case_sensitive_without_quote():
manifest = {
"catalog": "my_catalog",
"schema": "my_schema",
"dataSource": "mysql",
"models": [
{
"name": "Orders",
"tableReference": {
"schema": "main",
"table": "orders",
},
"columns": [
{"name": "O_orderkey", "type": "integer"},
{"name": "O_custkey", "type": "integer"},
{"name": "O_orderdate", "type": "date"},
],
},
],
}
manifest_str = base64.b64encode(json.dumps(manifest).encode("utf-8")).decode(
"utf-8"
)
sql = "select O_orderkey, O_custkey, O_orderdate from Orders"
extractor = ManifestExtractor(manifest_str)
tables = extractor.resolve_used_table_names(sql)
assert tables == ["Orders"]

extracted_manifest = extractor.extract_by(tables)
encoded_str = to_json_base64(extracted_manifest)

session_context = SessionContext(encoded_str, None)
actual = session_context.transform_sql(sql)
assert (
actual
== 'SELECT "Orders"."O_orderkey", "Orders"."O_custkey", "Orders"."O_orderdate" FROM (SELECT "Orders"."O_custkey", "Orders"."O_orderdate", "Orders"."O_orderkey" FROM (SELECT __source."O_custkey" AS "O_custkey", __source."O_orderdate" AS "O_orderdate", __source."O_orderkey" AS "O_orderkey" FROM main.orders AS __source) AS "Orders") AS "Orders"'
)