Преглед изворни кода

HUE-8507 [editor] SQL alchemy result set column headers are missing.

jdesjean пре 7 година
родитељ
комит
9101ad0
1 измењених фајлова са 16 додато и 12 уклоњено
  1. 16 12
      desktop/libs/notebook/src/notebook/connectors/sqlalchemyapi.py

+ 16 - 12
desktop/libs/notebook/src/notebook/connectors/sqlalchemyapi.py

@@ -58,10 +58,16 @@ class SqlAlchemyApi(Api):
     guid = uuid.uuid4().hex
     connection = self.engine.connect()
     result = connection.execute(snippet['statement'])
-    CONNECTION_CACHE[guid] = {
+    cache = {
       'connection': connection,
-      'result': result
+      'result': result,
+      'meta': [{
+          'name': col[0] if type(col) is dict or type(col) is tuple else col,
+          'type': 'String', #TODO: resolve
+          'comment': ''
+        } for col in result.cursor.description]
     }
+    CONNECTION_CACHE[guid] = cache
 
     return {
       'sync': False,
@@ -71,11 +77,7 @@ class SqlAlchemyApi(Api):
       'result': {
         'has_more': True,
         'data': [],
-        'meta': [{
-          'name': col[0] if type(col) is dict or type(col) is tuple else col,
-          'type': 'String', #TODO: resolve
-          'comment': ''
-        } for col in result.cursor.description],
+        'meta': cache['meta'],
         'type': 'table'
       }
     }
@@ -92,16 +94,18 @@ class SqlAlchemyApi(Api):
   @query_error_handler
   def fetch_result(self, notebook, snippet, rows, start_over):
     guid = snippet['result']['handle']['guid']
-    connection = CONNECTION_CACHE.get(guid)
-    if connection:
-      data = connection['result'].fetchmany(rows)
+    cache = CONNECTION_CACHE.get(guid)
+    if cache:
+      data = cache['result'].fetchmany(rows)
+      meta = cache['meta']
     else:
       data = []
+      meta = []
     has_result_set = data is not None
     return {
       'has_more': has_result_set and len(data) >= rows,
       'data': data if has_result_set else [],
-      'meta': [],
+      'meta': meta,
       'type': 'table'
     }
 
@@ -204,7 +208,7 @@ class SqlAlchemyApi(Api):
     inspector = inspect(self.engine)
 
     assist = Assist(inspector, self.engine)
-    response = {'status': -1}
+    response = {'status': -1, 'result': {}}
 
     metadata, sample_data = assist.get_sample_data(database, table, column)
     has_result_set = sample_data is not None