瀏覽代碼

HUE-3228 [dashboard] Only return the selected fields in a grid widget

Romain Rigaux 8 年之前
父節點
當前提交
b243944
共有 3 個文件被更改,包括 20 次插入17 次删除
  1. 3 3
      apps/impala/src/impala/dashboard_api.py
  2. 14 1
      apps/search/src/search/models.py
  3. 3 13
      desktop/libs/libsolr/src/libsolr/api.py

+ 3 - 3
apps/impala/src/impala/dashboard_api.py

@@ -22,9 +22,9 @@ from itertools import groupby
 
 from django.utils.html import escape
 
-from beeswax.server import dbms
 from notebook.models import make_notebook
 from notebook.connectors.base import get_api
+
 from search.models import Collection2
 
 
@@ -98,11 +98,11 @@ class SQLApi():
             'filters': self._convert_filters_to_where(filters),
         }
     else:
-      fields =  '*'
+      fields = Collection2.get_field_list(dashboard)
       sql = "SELECT %(fields)s FROM `%(database)s`.`%(table)s`" % {
           'database': database,
           'table': table,
-          'fields': fields
+          'fields': ', '.join(['`%s`' % f for f in fields])
       }
       if filters:
         sql += ' ' + self._convert_filters_to_where(filters)

+ 14 - 1
apps/search/src/search/models.py

@@ -613,7 +613,6 @@ class Collection2(object):
   def _make_gridlayout_header_field(cls, field, isDynamic=False):
     return {'name': field['name'], 'type': field['type'], 'sort': {'direction': None}, 'isDynamic': isDynamic}
 
-
   @classmethod
   def _make_luke_from_schema_fields(cls, schema_fields):
     return dict([
@@ -662,6 +661,20 @@ class Collection2(object):
     properties_['autocomplete'] = autocomplete
     self.data = json.dumps(properties_)
 
+  @classmethod
+  def get_field_list(cls, collection):
+    if collection['template']['fieldsSelected'] and collection['template']['isGridLayout']:
+      fields = set(collection['template']['fieldsSelected'] + ([collection['idField']] if collection['idField'] else []))
+      # Add field if needed
+      if collection['template']['leafletmap'].get('latitudeField'):
+        fields.add(collection['template']['leafletmap']['latitudeField'])
+      if collection['template']['leafletmap'].get('longitudeField'):
+        fields.add(collection['template']['leafletmap']['longitudeField'])
+      if collection['template']['leafletmap'].get('labelField'):
+        fields.add(collection['template']['leafletmap']['labelField'])
+      return list(fields)
+    else:
+      return ['*']
 
 def get_facet_field(category, field, facets):
   if category in ('nested', 'function'):

+ 3 - 13
desktop/libs/libsolr/src/libsolr/api.py

@@ -163,7 +163,7 @@ class SolrApi(object):
             })
             if timeFilter and timeFilter['time_field'] == facet['field'] and (facet['id'] not in timeFilter['time_filter_overrides'] or facet['widgetType'] != 'bucket-widget'):
               _f.update(self._get_time_filter_query(timeFilter, facet))
-          else:            
+          else:
             _f.update({
                 'type': 'terms',
                 'field': facet['field'],
@@ -215,18 +215,8 @@ class SolrApi(object):
 
     params += self._get_fq(collection, query)
 
-    if collection['template']['fieldsSelected'] and collection['template']['isGridLayout']:
-      fields = set(collection['template']['fieldsSelected'] + [collection['idField']] if collection['idField'] else [])
-      # Add field if needed
-      if collection['template']['leafletmap'].get('latitudeField'):
-        fields.add(collection['template']['leafletmap']['latitudeField'])
-      if collection['template']['leafletmap'].get('longitudeField'):
-        fields.add(collection['template']['leafletmap']['longitudeField'])
-      if collection['template']['leafletmap'].get('labelField'):
-        fields.add(collection['template']['leafletmap']['labelField'])
-      fl = urllib.unquote(utf_quoter(','.join(list(fields))))
-    else:
-      fl = '*'
+    from search.models import Collection2
+    fl = urllib.unquote(utf_quoter(','.join(Collection2.get_field_list(collection))))
 
     nested_fields = self._get_nested_fields(collection)
     if nested_fields: