Эх сурвалжийг харах

HUE-1809 [sqoop] autocomplete jdbc class and string

Abraham Elmahrek 12 жил өмнө
parent
commit
dc9841df71

+ 1 - 5
apps/sqoop/src/sqoop/api/autocomplete.py

@@ -35,12 +35,8 @@ def get_query_server_config_from_request(request):
     check_params['username'] = request.GET.get('username')
 
   for alias in librdbms_conf.DATABASES:
-    valid = True
     config = dbms.get_query_server_config(alias)
-    for param in check_params:
-      if config[param] != check_params[param]:
-        valid = False
-    if valid:
+    if all([check_params[param] == config[param] for param in check_params]):
       return config
 
   return None

+ 41 - 2
apps/sqoop/src/sqoop/templates/app.mako

@@ -779,10 +779,8 @@ $(document).on('changed.page', function(e, jobWizard) {
       switch (viewModel.connection().jdbcDriver()) {
         case 'com.mysql.jdbc.Driver':
         return autocomplete.tables('mysql', database);
-        break;
         case 'org.postgresql.Driver':
         return autocomplete.tables('postgresql', database);
-        break;
         case 'oracle.jdbc.OracleDriver':
         return autocomplete.tables('oracle', database);
       }
@@ -813,6 +811,47 @@ $(document).on('changed.page', function(e, jobWizard) {
     'source': columnsAutocomplete
   });
 });
+$(document).on('shown_section', (function(){
+  var connectionEditorShown = false;
+  return function(e, section) {
+    if (section == 'connection-editor' && !connectionEditorShown) {
+      connectionEditorShown = true;
+      $('input[name="connection.jdbcDriver"]').typeahead({
+        'source': [
+          'com.mysql.jdbc.Driver',
+          'org.postgresql.Driver',
+          'oracle.jdbc.OracleDriver'
+        ]
+      });
+      $('input[name="connection.connectionString"]').typeahead({
+        'source': function(query, process) {
+          var arr = [];
+          switch (viewModel.connection().jdbcDriver()) {
+            case 'com.mysql.jdbc.Driver':
+            arr = $.map(autocomplete.databases('mysql'), function(value, index) {
+              return 'jdbc:mysql://' + host + ':' + port + '/' + value;
+            });
+            arr.push('jdbc:mysql://[host]:[port]/[database]');
+            break;
+            case 'org.postgresql.Driver':
+            arr = $.map(autocomplete.databases('postgresql'), function(value, index) {
+              return 'jdbc:postgresql://' + host + ':' + port + '/' + value;
+            });
+            arr.push('jdbc:postgresql://[host]:[port]/[database]');
+            break;
+            case 'oracle.jdbc.OracleDriver':
+            arr = $.map(autocomplete.databases('oracle'), function(value, index) {
+              return 'jdbc:oracle:thin:' + host + '@:' + port + ':' + value;
+            });
+            arr.push('jdbc:oracle:thin:@[host]:[port]:[sid]');
+            break;
+          }
+          return arr;
+        }
+      });
+    }
+  };
+})());
 
 $(document).on('keyup', 'input#filter', function() {
   viewModel.filter($('#filter').val());

+ 70 - 0
apps/sqoop/static/js/sqoop.connections.js

@@ -78,6 +78,50 @@ var connections = (function($) {
         });
         return jdbc_driver;
       });
+      self.host = ko.computed(function() {
+        var pattern = null;
+        switch (self.jdbcDriver()) {
+          case 'com.mysql.jdbc.Driver':
+          pattern = /jdbc:mysql:\/\/([^\:\/]+?).*/;
+          break;
+          case 'org.postgresql.Driver':
+          pattern = /jdbc:postgresql:\/\/([^\:\/]+?).*/;
+          break;
+          case 'oracle.jdbc.OracleDriver':
+          pattern = /jdbc:oracle:thin:@([^\:\/]+?).*/;
+          break;
+        }
+        if (pattern) {
+          var res = self.connectionString().match(pattern);
+          if (res) {
+            return res[1];
+          } else {
+            return null;
+          }
+        }
+      });
+      self.port = ko.computed(function() {
+        var pattern = null;
+        switch (self.jdbcDriver()) {
+          case 'com.mysql.jdbc.Driver':
+          pattern = /jdbc:mysql:\/\/([^\:\/]+?):(\d+)\/.*/;
+          break;
+          case 'org.postgresql.Driver':
+          pattern = /jdbc:postgresql:\/\/([^\:\/]+?):(\d+)\/.*/;
+          break;
+          case 'oracle.jdbc.OracleDriver':
+          pattern = /jdbc:oracle:thin:@([^\:\/]+?):(\d+):.*/;
+          break;
+        }
+        if (pattern) {
+          var res = self.connectionString().match(pattern);
+          if (res) {
+            return res[2];
+          } else {
+            return null;
+          }
+        }
+      });
       self.database = ko.computed(function() {
         var pattern = null;
         switch (self.jdbcDriver()) {
@@ -100,6 +144,32 @@ var connections = (function($) {
           }
         }
       });
+      self.username = ko.computed(function() {
+        var username = null;
+        $.each(self.connector(), function(index, form) {
+          if (form.name() == 'connection') {
+            $.each(form.inputs(), function(index, input) {
+              if (input.name() == 'connection.username') {
+                username = input.value();
+              }
+            });
+          }
+        });
+        return username;
+      });
+      self.password = ko.computed(function() {
+        var password = null;
+        $.each(self.connector(), function(index, form) {
+          if (form.name() == 'connection') {
+            $.each(form.inputs(), function(index, input) {
+              if (input.name() == 'connection.password') {
+                password = input.value();
+              }
+            });
+          }
+        });
+        return password;
+      });
     },
     'map': function() {
       var self = this;

+ 2 - 0
desktop/conf.dist/hue.ini

@@ -538,6 +538,8 @@
 ###########################################################################
 
 [sqoop]
+  # For autocompletion, fill out the librdbms section.
+
   # Sqoop server URL
   ## server_url=http://localhost:12000/sqoop
 

+ 2 - 0
desktop/conf/pseudo-distributed.ini.tmpl

@@ -579,6 +579,8 @@
 ###########################################################################
 
 [sqoop]
+  # For autocompletion, fill out the librdbms section.
+
   # Sqoop server URL
   ## server_url=http://localhost:12000/sqoop