Răsfoiți Sursa

[notebook] Add MySql autocomplete

Romain Rigaux 10 ani în urmă
părinte
comite
186dcdd245
1 a modificat fișierele cu 45 adăugiri și 2 ștergeri
  1. 45 2
      desktop/libs/notebook/src/notebook/connectors/mysql.py

+ 45 - 2
desktop/libs/notebook/src/notebook/connectors/mysql.py

@@ -46,11 +46,10 @@ class MySqlApi(Api):
 
   def execute(self, notebook, snippet):
     query_server = dbms.get_query_server_config(server='mysql')
-#     db = dbms.get(self.user, query_server)
     db = MySQLClient(query_server, self.user)
 
     table = db.execute_statement(snippet['statement'])
-    
+
     data = table.rows()
     has_result_set = data is not None
 
@@ -94,3 +93,47 @@ class MySqlApi(Api):
   @query_error_handler
   def close_statement(self, snippet):
     return {'status': -1}
+
+  @query_error_handler
+  def autocomplete(self, snippet, database=None, table=None, column=None, nested=None):
+    query_server = dbms.get_query_server_config(server='mysql')
+    db = MySQLClient(query_server, self.user)
+
+    assist = Assist(db)
+    response = {'error': 0}
+
+    try:
+      if database is None:
+        response['databases'] = assist.get_databases()
+      elif table is None:
+        response['tables'] = assist.get_tables(database)
+      else:
+        columns = assist.get_columns(database, table)
+        response['columns'] = [col for col in columns]
+        response['extended_columns'] = [{
+            'name': col,
+            'type': '',
+            'comment': ''
+          } for col in columns
+        ]
+    except Exception, e:
+      LOG.warn('Autocomplete data fetching error: %s' % e)
+      response['code'] = -1
+      response['error'] = str(e)
+
+    return response
+
+
+class Assist():
+
+  def __init__(self, db):
+    self.db = db
+
+  def get_databases(self):
+    return self.db.get_databases()
+
+  def get_tables(self, database, table_names=[]):
+    return self.db.get_tables(database, table_names)
+
+  def get_columns(self, database, table):
+    return self.db.get_columns(database, table)