fix(sql): quote column names with spaces to prevent SQLGlot parsing errors (#35553)

This commit is contained in:
Mehmet Salih Yavuz
2025-11-13 17:47:16 +03:00
committed by GitHub
parent 310dcd7b94
commit 306f4c14cf
7 changed files with 77 additions and 31 deletions

View File

@@ -29,6 +29,8 @@ from sqlalchemy import create_engine
from sqlalchemy.orm.session import Session
from sqlalchemy.pool import StaticPool
from superset.superset_typing import AdhocColumn
if TYPE_CHECKING:
from superset.models.core import Database
@@ -1125,3 +1127,34 @@ def test_process_select_expression_end_to_end(database: Database) -> None:
assert expected.replace(" ", "").lower() in result.replace(" ", "").lower(), (
f"Expected '{expected}' to be in result '{result}' for input '{expression}'"
)
def test_adhoc_column_to_sqla_with_column_reference(database: Database) -> None:
"""
Test that adhoc_column_to_sqla
properly quotes column identifiers when isColumnReference is true.
This tests the fix for column names with spaces being properly quoted
before being processed by SQLGlot to prevent "column AS alias" misinterpretation.
"""
from superset.connectors.sqla.models import SqlaTable
table = SqlaTable(
table_name="test_table",
database=database,
)
# Test 1: Column reference with spaces should be quoted
col_with_spaces: AdhocColumn = {
"sqlExpression": "Customer Name",
"label": "Customer Name",
"isColumnReference": True,
}
result = table.adhoc_column_to_sqla(col_with_spaces)
# Should contain the quoted column name
assert result is not None
result_str = str(result)
assert '"Customer Name"' in result_str