Skip to content

Commit 7c9c0cb

Browse files
TobKedplamut
authored andcommitted
feat(bigquery): add support for custom QueryJobConfig in BigQuery.cursor.execute method (#9278)
* feat(big_query): add support for custom QueryJobConfig in execute cursor method * fixup! feat(big_query): add support for custom QueryJobConfig in execute cursor method
1 parent d8ce06e commit 7c9c0cb

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

bigquery/google/cloud/bigquery/dbapi/cursor.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def _set_rowcount(self, query_results):
116116
total_rows = num_dml_affected_rows
117117
self.rowcount = total_rows
118118

119-
def execute(self, operation, parameters=None, job_id=None):
119+
def execute(self, operation, parameters=None, job_id=None, job_config=None):
120120
"""Prepare and execute a database operation.
121121
122122
.. note::
@@ -148,6 +148,9 @@ def execute(self, operation, parameters=None, job_id=None):
148148
:type job_id: str
149149
:param job_id: (Optional) The job_id to use. If not set, a job ID
150150
is generated at random.
151+
152+
:type job_config: :class:`~google.cloud.bigquery.job.QueryJobConfig`
153+
:param job_config: (Optional) Extra configuration options for the query job.
151154
"""
152155
self._query_data = None
153156
self._query_job = None
@@ -160,9 +163,8 @@ def execute(self, operation, parameters=None, job_id=None):
160163
formatted_operation = _format_operation(operation, parameters=parameters)
161164
query_parameters = _helpers.to_query_parameters(parameters)
162165

163-
config = job.QueryJobConfig()
166+
config = job_config or job.QueryJobConfig(use_legacy_sql=False)
164167
config.query_parameters = query_parameters
165-
config.use_legacy_sql = False
166168
self._query_job = client.query(
167169
formatted_operation, job_config=config, job_id=job_id
168170
)

bigquery/tests/unit/test_dbapi_cursor.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,20 @@ def test_execute_custom_job_id(self):
191191
self.assertEqual(args[0], "SELECT 1;")
192192
self.assertEqual(kwargs["job_id"], "foo")
193193

194+
def test_execute_custom_job_config(self):
195+
from google.cloud.bigquery.dbapi import connect
196+
from google.cloud.bigquery import job
197+
198+
config = job.QueryJobConfig(use_legacy_sql=True)
199+
client = self._mock_client(rows=[], num_dml_affected_rows=0)
200+
connection = connect(client)
201+
cursor = connection.cursor()
202+
cursor.execute("SELECT 1;", job_id="foo", job_config=config)
203+
args, kwargs = client.query.call_args
204+
self.assertEqual(args[0], "SELECT 1;")
205+
self.assertEqual(kwargs["job_id"], "foo")
206+
self.assertEqual(kwargs["job_config"], config)
207+
194208
def test_execute_w_dml(self):
195209
from google.cloud.bigquery.dbapi import connect
196210

0 commit comments

Comments
 (0)