Repository: incubator-airflow
Updated Branches:
  refs/heads/master b1deb3318 -> f36ae3ac2


[AIRFLOW-2166] Restore BQ run_query dialect param

Restores the use_legacy_sql parameter in the run_query method of
BigQueryBaseCursor.

This method was removed by commit
d5d2c01f37f345458d9eeb8cdfbb0e77b55eb7ea, which introduced a
backward-incompatible change for direct calls to the cursor
methods.

Closes #3087 from ji-han/AIRFLOW-2166


Project: http://git-wip-us.apache.org/repos/asf/incubator-airflow/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-airflow/commit/f36ae3ac
Tree: http://git-wip-us.apache.org/repos/asf/incubator-airflow/tree/f36ae3ac
Diff: http://git-wip-us.apache.org/repos/asf/incubator-airflow/diff/f36ae3ac

Branch: refs/heads/master
Commit: f36ae3ac2da745eacf2c99ae4ee8aa8dc4c8594f
Parents: b1deb33
Author: Winston Huang <wins...@quizlet.com>
Authored: Fri Mar 2 14:40:34 2018 -0800
Committer: Chris Riccomini <criccom...@apache.org>
Committed: Fri Mar 2 14:40:41 2018 -0800

----------------------------------------------------------------------
 airflow/contrib/hooks/bigquery_hook.py    |  9 ++++++++-
 tests/contrib/hooks/test_bigquery_hook.py | 15 +++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/f36ae3ac/airflow/contrib/hooks/bigquery_hook.py
----------------------------------------------------------------------
diff --git a/airflow/contrib/hooks/bigquery_hook.py 
b/airflow/contrib/hooks/bigquery_hook.py
index d937f1e..c6499d3 100644
--- a/airflow/contrib/hooks/bigquery_hook.py
+++ b/airflow/contrib/hooks/bigquery_hook.py
@@ -455,6 +455,7 @@ class BigQueryBaseCursor(LoggingMixin):
                   allow_large_results=False,
                   flatten_results=False,
                   udf_config=False,
+                  use_legacy_sql=None,
                   maximum_billing_tier=None,
                   maximum_bytes_billed=None,
                   create_disposition='CREATE_IF_NEEDED',
@@ -485,6 +486,9 @@ class BigQueryBaseCursor(LoggingMixin):
         :type flatten_results: boolean
         :param udf_config: The User Defined Function configuration for the 
query.
             See https://cloud.google.com/bigquery/user-defined-functions for 
details.
+        :param use_legacy_sql: Whether to use legacy SQL (true) or standard 
SQL (false).
+            If `None`, defaults to `self.use_legacy_sql`.
+        :type use_legacy_sql: boolean
         :type udf_config: list
         :param maximum_billing_tier: Positive integer that serves as a
             multiplier of the basic price.
@@ -523,10 +527,13 @@ class BigQueryBaseCursor(LoggingMixin):
                 "Please only use one or more of the following options: {1}"
                 .format(schema_update_options, allowed_schema_update_options))
 
+        if use_legacy_sql is None:
+            use_legacy_sql = self.use_legacy_sql
+
         configuration = {
             'query': {
                 'query': bql,
-                'useLegacySql': self.use_legacy_sql,
+                'useLegacySql': use_legacy_sql,
                 'maximumBillingTier': maximum_billing_tier,
                 'maximumBytesBilled': maximum_bytes_billed,
                 'priority': priority

http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/f36ae3ac/tests/contrib/hooks/test_bigquery_hook.py
----------------------------------------------------------------------
diff --git a/tests/contrib/hooks/test_bigquery_hook.py 
b/tests/contrib/hooks/test_bigquery_hook.py
index a5dd595..6c6bed6 100644
--- a/tests/contrib/hooks/test_bigquery_hook.py
+++ b/tests/contrib/hooks/test_bigquery_hook.py
@@ -240,6 +240,21 @@ class TestBigQueryBaseCursor(unittest.TestCase):
 
         mock_jobs.cancel.assert_called_with(projectId=project_id, 
jobId=running_job_id)
 
+    @mock.patch.object(hook.BigQueryBaseCursor, 'run_with_configuration')
+    def test_run_query_sql_dialect_default(self, run_with_config):
+        cursor = hook.BigQueryBaseCursor(mock.Mock(), "project_id")
+        cursor.run_query('query')
+        args, kwargs = run_with_config.call_args
+        self.assertIs(args[0]['query']['useLegacySql'], True)
+
+    @mock.patch.object(hook.BigQueryBaseCursor, 'run_with_configuration')
+    def test_run_query_sql_dialect_override(self, run_with_config):
+        for bool_val in [True, False]:
+            cursor = hook.BigQueryBaseCursor(mock.Mock(), "project_id")
+            cursor.run_query('query', use_legacy_sql=bool_val)
+            args, kwargs = run_with_config.call_args
+            self.assertIs(args[0]['query']['useLegacySql'], bool_val)
+
 
 class TestTimePartitioningInRunJob(unittest.TestCase):
 

Reply via email to