jdesjean 7 vuotta sitten
vanhempi
commit
1037395def

+ 3 - 16
desktop/libs/dashboard/src/dashboard/api.py

@@ -425,6 +425,7 @@ def _create_facet(collection, user, facet_id, facet_label, facet_field, widget_t
   elif widget_type == 'document-widget':
     # SQL query, 1 solr widget
     if collection['selectedDocument'].get('uuid'):
+      properties['statementUuid'] = collection['selectedDocument'].get('uuid')
       doc = Document2.objects.get_by_uuid(user=user, uuid=collection['selectedDocument']['uuid'], perm_type='read')
       snippets = doc.data_dict.get('snippets', [])
       properties['result'] = {'handle': {'statement_id': 0, 'statements_count': 1, 'previous_statement_hash': hashlib.sha224(str(uuid.uuid4())).hexdigest()}}
@@ -432,22 +433,8 @@ def _create_facet(collection, user, facet_id, facet_label, facet_field, widget_t
         table_metadata = get_api(MockRequest(user, '""'), snippets[0]).autocomplete({'source': 'query', 'type': snippets[0]['type']}, doc.id)
         template['fieldsAttributes'] = [Collection2._make_gridlayout_header_field(field) for field in table_metadata['extended_columns']]
         properties['engine'] = snippets[0]['type']
-        if snippets[0]['result']['handle']:
-          handle = snippets[0]['result']['handle']
-          properties['result']['handle'].update({
-            'statement_id': handle['statement_id'],
-            'statements_count': handle['statements_count']
-          })
-        properties['statement'] = snippets[0]['statement_raw']
-      else:
-        properties['statement'] = ''
-
-      if collection['selectedDocument'].get('statement_id'):
-        properties['result']['handle']['statement_id'] = collection['selectedDocument'].get('statement_id')
-        properties['result']['handle']['statements_count'] = properties['result']['handle'].get('statements_count', collection['selectedDocument'].get('statement_id'))
-    else: # Demo data for now
-      properties['statement'] = 'select * from customers'
-      properties['result'] = {'handle': {}}
+    else:
+      properties['statementUuid'] = ''
 
     properties['uuid'] = facet_field
     properties['facets'] = [{'canRange': False, 'field': 'blank', 'limit': 10, 'mincount': 0, 'sort': 'desc', 'aggregate': {'function': 'count'}, 'isDate': False, 'type': 'field'}]

+ 2 - 9
desktop/libs/notebook/src/notebook/api.py

@@ -408,16 +408,9 @@ def _historify(notebook, user):
 
 
 def _get_statement(notebook):
-  statement = ''
   if notebook['snippets'] and len(notebook['snippets']) > 0:
-    try:
-      statement = notebook['snippets'][0]['result']['handle']['statement']
-      if type(statement) == dict:  # Old format
-        statement = notebook['snippets'][0]['statement_raw']
-    except KeyError:  # Old format
-      statement = notebook['snippets'][0]['statement_raw']
-  return statement
-
+    return Notebook.statement_with_variables(notebook['snippets'][0])
+  return ''
 
 @require_GET
 @api_error_handler

+ 26 - 1
desktop/libs/notebook/src/notebook/connectors/base.py

@@ -97,7 +97,32 @@ class Notebook(object):
     return _data
 
   def get_str(self):
-    return '\n\n\n'.join(['USE %s;\n\n%s' % (snippet['database'], snippet['statement_raw']) for snippet in self.get_data()['snippets']])
+    return '\n\n\n'.join(['USE %s;\n\n%s' % (snippet['database'], Notebook.statement_with_variables(snippet)) for snippet in self.get_data()['snippets']])
+
+  @staticmethod
+  def statement_with_variables(snippet):
+    statement_raw = snippet['statement_raw']
+    hasCurlyBracketParameters = snippet['type'] != 'pig'
+    variables = {}
+    for variable in snippet['variables']:
+      variables[variable['name']] = variable
+
+    if variables:
+      variables_names = []
+      for variable in snippet['variables']:
+        variables_names.append(variable['name'])
+      variablesString = '|'.join(variables_names)
+
+      def replace(match):
+        p1 = match.group(1)
+        p2 = match.group(2)
+        variable = variables[p2]
+        value = variable['value']
+        return p1 + (value if value is not None else variable['meta'].get('placeholder',''))
+        
+      return re.sub("([^\\\\])\\$" + ("{(" if hasCurlyBracketParameters else "(") + variablesString + ")(=[^}]*)?" + ("}" if hasCurlyBracketParameters else ""), replace, statement_raw)
+      
+    return statement_raw
 
   def add_hive_snippet(self, database, sql):
     _data = json.loads(self.data)

+ 6 - 2
desktop/libs/notebook/src/notebook/dashboard_api.py

@@ -152,16 +152,20 @@ class SQLDashboardApi(DashboardApi):
             'filters': self._convert_filters_to_where(filters),
         }
       elif facet['type'] == 'statement':
+        doc = Document2.objects.get_by_uuid(user=self.user, uuid=facet['statementUuid'], perm_type='read')
+        snippets = doc.data_dict.get('snippets', [])
+        statement = snippets[0]['statement_raw']
+
         if filters:
           sql = '''SELECT *
           FROM
           (%(statement)s) as sub
           %(filters)s''' % {
-            'statement': facet['properties']['statement'],
+            'statement': statement,
             'filters': self._convert_filters_to_where(filters, alias='sub')
           }
         else:
-          sql = facet['properties']['statement']
+          sql = statement
         result_properties = facet['properties']['result']
     else:
       fields = Collection2.get_field_list(dashboard)