mirror of
https://github.com/apache/superset.git
synced 2026-05-24 09:15:19 +00:00
fix(sqllab): execute prequeries on streaming connection to fix PostgreSQL CSV export (#40194)
Co-authored-by: Matt Fitzgerald <matt.fitzgerald@preset.io> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -55,6 +55,8 @@ def mock_query():
|
||||
query.select_sql = None
|
||||
query.executed_sql = "SELECT * FROM test_table"
|
||||
query.limiting_factor = LimitingFactor.NOT_LIMITED
|
||||
query.catalog = None
|
||||
query.schema = "public"
|
||||
query.database = MagicMock()
|
||||
query.database.db_engine_spec = MagicMock()
|
||||
query.database.db_engine_spec.engine = "postgresql"
|
||||
@@ -538,3 +540,40 @@ def test_null_values_handling(mocker, mock_query):
|
||||
assert "1,,100" in csv_data
|
||||
assert "2,test," in csv_data
|
||||
assert ",," in csv_data
|
||||
|
||||
|
||||
def test_catalog_and_schema_passed_to_engine(mocker, mock_query, mock_result_proxy):
|
||||
"""Test that catalog and schema are forwarded to get_sqla_engine.
|
||||
|
||||
Prequeries (e.g. SET search_path for PostgreSQL) are now run automatically
|
||||
via a connect event listener registered inside get_sqla_engine, not by the
|
||||
streaming command itself.
|
||||
"""
|
||||
mock_query.select_sql = "SELECT * FROM test"
|
||||
mock_query.catalog = "my_catalog"
|
||||
mock_query.schema = "my_schema"
|
||||
|
||||
mock_db, mock_session = _setup_sqllab_mocks(mocker, mock_query)
|
||||
|
||||
mock_connection = MagicMock()
|
||||
mock_connection.execution_options.return_value.execute.return_value = (
|
||||
mock_result_proxy
|
||||
)
|
||||
mock_connection.__enter__.return_value = mock_connection
|
||||
mock_connection.__exit__.return_value = None
|
||||
|
||||
mock_engine = MagicMock()
|
||||
mock_engine.connect.return_value = mock_connection
|
||||
mock_query.database.get_sqla_engine.return_value.__enter__.return_value = (
|
||||
mock_engine
|
||||
)
|
||||
|
||||
command = StreamingSqlResultExportCommand("test_client_123")
|
||||
command.validate()
|
||||
|
||||
list(command.run()())
|
||||
|
||||
mock_query.database.get_sqla_engine.assert_called_once_with(
|
||||
catalog="my_catalog",
|
||||
schema="my_schema",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user