This is an automated email from the ASF dual-hosted git repository.

ktruong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 3cba1bd  feat: add expand_data parameter (#8472)
3cba1bd is described below

commit 3cba1bd9904c42c6ed39d413a7958b7cb6e0d345
Author: Kim Truong <[email protected]>
AuthorDate: Wed Oct 30 11:45:35 2019 -0700

    feat: add expand_data parameter (#8472)
    
    * feat: add expand_data parameter
    
    * fix: reformat files
---
 superset/assets/src/SqlLab/actions/sqlLab.js |  1 +
 superset/sql_lab.py                          | 16 ++++++++++++----
 superset/views/core.py                       | 16 ++++++++++++----
 tests/celery_tests.py                        |  2 +-
 4 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/superset/assets/src/SqlLab/actions/sqlLab.js 
b/superset/assets/src/SqlLab/actions/sqlLab.js
index e9785f8..a540cec 100644
--- a/superset/assets/src/SqlLab/actions/sqlLab.js
+++ b/superset/assets/src/SqlLab/actions/sqlLab.js
@@ -262,6 +262,7 @@ export function runQuery(query) {
       select_as_cta: query.ctas,
       templateParams: query.templateParams,
       queryLimit: query.queryLimit,
+      expand_data: true,
     };
 
     return SupersetClient.post({
diff --git a/superset/sql_lab.py b/superset/sql_lab.py
index 9050f06..575a10d 100644
--- a/superset/sql_lab.py
+++ b/superset/sql_lab.py
@@ -148,6 +148,7 @@ def get_sql_results(
     store_results=False,
     user_name=None,
     start_time=None,
+    expand_data=False,
 ):
     """Executes the sql query returns the results."""
     with session_scope(not ctask.request.called_directly) as session:
@@ -162,6 +163,7 @@ def get_sql_results(
                 user_name,
                 session=session,
                 start_time=start_time,
+                expand_data=expand_data,
             )
         except Exception as e:
             logging.exception(f"Query {query_id}: {e}")
@@ -264,6 +266,7 @@ def _serialize_and_expand_data(
     cdf: SupersetDataFrame,
     db_engine_spec: BaseEngineSpec,
     use_msgpack: Optional[bool] = False,
+    expand_data: bool = False,
 ) -> Tuple[Union[bytes, str], list, list, list]:
     selected_columns: list = cdf.columns or []
     expanded_columns: list
@@ -282,9 +285,13 @@ def _serialize_and_expand_data(
         all_columns, expanded_columns = (selected_columns, [])
     else:
         data = cdf.data or []
-        all_columns, data, expanded_columns = db_engine_spec.expand_data(
-            selected_columns, data
-        )
+        if expand_data:
+            all_columns, data, expanded_columns = db_engine_spec.expand_data(
+                selected_columns, data
+            )
+        else:
+            all_columns = selected_columns
+            expanded_columns = []
 
     return (data, selected_columns, all_columns, expanded_columns)
 
@@ -298,6 +305,7 @@ def execute_sql_statements(
     user_name=None,
     session=None,
     start_time=None,
+    expand_data=False,
 ):
     """Executes the sql query returns the results."""
     if store_results and start_time:
@@ -371,7 +379,7 @@ def execute_sql_statements(
     query.end_time = now_as_float()
 
     data, selected_columns, all_columns, expanded_columns = 
_serialize_and_expand_data(
-        cdf, db_engine_spec, store_results and results_backend_use_msgpack
+        cdf, db_engine_spec, store_results and results_backend_use_msgpack, 
expand_data
     )
 
     payload.update(
diff --git a/superset/views/core.py b/superset/views/core.py
index 01c0cdc..944c743 100755
--- a/superset/views/core.py
+++ b/superset/views/core.py
@@ -2581,7 +2581,7 @@ class Superset(BaseSupersetView):
             return json_error_response(f"{msg}")
 
     def _sql_json_async(
-        self, session: Session, rendered_query: str, query: Query
+        self, session: Session, rendered_query: str, query: Query, 
expand_data: bool
     ) -> str:
         """
             Send SQL JSON query to celery workers
@@ -2601,6 +2601,7 @@ class Superset(BaseSupersetView):
                 store_results=not query.select_as_cta,
                 user_name=g.user.username if g.user else None,
                 start_time=now_as_float(),
+                expand_data=expand_data,
             )
         except Exception as e:
             logging.exception(f"Query {query.id}: {e}")
@@ -2625,7 +2626,7 @@ class Superset(BaseSupersetView):
         return resp
 
     def _sql_json_sync(
-        self, session: Session, rendered_query: str, query: Query
+        self, session: Session, rendered_query: str, query: Query, 
expand_data: bool
     ) -> str:
         """
             Execute SQL query (sql json)
@@ -2644,6 +2645,7 @@ class Superset(BaseSupersetView):
                     rendered_query,
                     return_results=True,
                     user_name=g.user.username if g.user else None,
+                    expand_data=expand_data,
                 )
 
             payload = json.dumps(
@@ -2756,11 +2758,17 @@ class Superset(BaseSupersetView):
         limits = [mydb.db_engine_spec.get_limit_from_sql(rendered_query), 
limit]
         query.limit = min(lim for lim in limits if lim is not None)
 
+        # Flag for whether or not to expand data
+        # (feature that will expand Presto row objects and arrays)
+        expand_data: bool = is_feature_enabled(
+            "PRESTO_EXPAND_DATA"
+        ) and request.json.get("expand_data")
+
         # Async request.
         if async_flag:
-            return self._sql_json_async(session, rendered_query, query)
+            return self._sql_json_async(session, rendered_query, query, 
expand_data)
         # Sync request.
-        return self._sql_json_sync(session, rendered_query, query)
+        return self._sql_json_sync(session, rendered_query, query, expand_data)
 
     @has_access
     @expose("/csv/<client_id>")
diff --git a/tests/celery_tests.py b/tests/celery_tests.py
index 742e619..3670694 100644
--- a/tests/celery_tests.py
+++ b/tests/celery_tests.py
@@ -260,7 +260,7 @@ class CeleryTestCase(SupersetTestCase):
             db_engine_spec, "expand_data", wraps=db_engine_spec.expand_data
         ) as expand_data:
             data, selected_columns, all_columns, expanded_columns = 
sql_lab._serialize_and_expand_data(
-                cdf, db_engine_spec, False
+                cdf, db_engine_spec, False, True
             )
             expand_data.assert_called_once()
 

Reply via email to