diff --git a/ibis/backends/bigquery/__init__.py b/ibis/backends/bigquery/__init__.py index 7eb9075ff380..bed8a8e059e3 100644 --- a/ibis/backends/bigquery/__init__.py +++ b/ibis/backends/bigquery/__init__.py @@ -1324,7 +1324,7 @@ def create_view( ) self._run_pre_execute_hooks(obj) self.raw_sql(stmt.sql(self.name)) - return self.table(name, database=(catalog, database)) + return self.table(name, database=(catalog, db)) def drop_view( self, name: str, /, *, database: str | None = None, force: bool = False diff --git a/ibis/backends/bigquery/tests/unit/test_client.py b/ibis/backends/bigquery/tests/unit/test_client.py index a9bc04d2c31c..60442a9fccab 100644 --- a/ibis/backends/bigquery/tests/unit/test_client.py +++ b/ibis/backends/bigquery/tests/unit/test_client.py @@ -3,7 +3,7 @@ import pytest import sqlglot as sg -from ibis.backends.bigquery import _force_quote_table, client +from ibis.backends.bigquery import Backend, _force_quote_table, client @pytest.mark.parametrize( @@ -55,3 +55,28 @@ def test_force_quoting(bq_path_str, expected): table = _force_quote_table(table) assert table.sql("bigquery") == expected + + +def test_create_view_project_dataset_database_uses_parsed_database(): + backend = Backend.__new__(Backend) + backend.billing_project = "billing-project" + backend.data_project = "billing-project" + backend.dataset = "default_dataset" + + captured = {} + + backend._run_pre_execute_hooks = lambda _: None + backend.compile = lambda _: sg.select(1) + backend.raw_sql = lambda sql: captured.setdefault("sql", sql) + backend.table = lambda name, /, *, database=None: captured.setdefault( + "table", (name, database) + ) + + backend.create_view( + "my_view", + object(), + database="my-project.my_dataset", + overwrite=True, + ) + + assert captured["table"] == ("my_view", ("my-project", "my_dataset"))