Browse Source

HUE-7091 [assist] Show add filter action for missing partition filter risk

This will show the autocomplete with any partition key columns on top
Johan Ahlen 8 years ago
parent
commit
965acfe

+ 15 - 0
desktop/core/src/desktop/static/desktop/js/sqlAutocompleter3.js

@@ -99,6 +99,12 @@ var AutocompleteResults = (function () {
     self.snippet = options.snippet;
     self.editor = options.editor;
 
+    self.sortOverride = null;
+
+    huePubSub.subscribe('editor.autocomplete.temporary.sort.override', function (sortOverride) {
+      self.sortOverride = sortOverride;
+    });
+
     self.entries = ko.observableArray();
 
     self.lastKnownRequests = {};
@@ -226,6 +232,14 @@ var AutocompleteResults = (function () {
             return 1;
           }
         }
+        if (self.sortOverride && self.sortOverride.partitionColumnsFirst) {
+          if (a.partitionKey && !b.partitionKey) {
+            return -1;
+          }
+          if (b.partitionKey && !a.partitionKey) {
+            return 1;
+          }
+        }
         var aWeight = a.category.weight + (a.weightAdjust || 0);
         var bWeight = b.category.weight + (b.weightAdjust || 0);
         if (typeof aWeight !== 'undefined' && typeof bWeight !== 'undefined' && bWeight !== aWeight) {
@@ -239,6 +253,7 @@ var AutocompleteResults = (function () {
         }
         return a.value.localeCompare(b.value);
       });
+      self.sortOverride = null;
       return result;
     }).extend({ rateLimit: 200 });
   }

+ 10 - 6
desktop/core/src/desktop/templates/assist.mako

@@ -1949,8 +1949,8 @@ from notebook.conf import ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, get_ord
             <li>
               <div class="risk-list-title" data-bind="css: { 'risk-list-high' : risk === 'high', 'risk-list-normal':  risk !== 'high' }, tooltip: { title: risk + ' ' + riskTables }"><span data-bind="text: riskAnalysis"></span></div>
               <div class="risk-list-description" data-bind="text: riskRecommendation"></div>
-              <div class="risk-quickfix" data-bind="visible: riskId === 17 && $parent.activeEditor() && $parent.activeLocations(), with: $parent" style="display:none;">
-                <a href="javascript:void(0);" data-bind="click: addFilter">${ _('Add filter') }</a>
+              <div class="risk-quickfix" data-bind="visible: (riskId === 17 || riskId === 22) && $parent.activeEditor() && $parent.activeLocations()" style="display:none;">
+                <a href="javascript:void(0);" data-bind="click: function () { $parent.addFilter(riskId); }">${ _('Add filter') }</a>
               </div>
             </li>
           </ul>
@@ -2158,12 +2158,11 @@ from notebook.conf import ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, get_ord
 
       }
 
-      AssistantPanel.prototype.addFilter = function () {
+      AssistantPanel.prototype.addFilter = function (riskId) {
         var self = this;
         if (self.activeLocations() && self.activeEditor()) {
           self.activeLocations().activeStatementLocations.every(function (location) {
-            if (location.type === 'whereClause' && location.missing && !location.subquery) {
-
+            if (location.type === 'whereClause' && !location.subquery && (location.missing || riskId === 22 )) {
               self.activeEditor().moveCursorToPosition({
                 row: location.location.last_line - 1,
                 column: location.location.last_column - 1
@@ -2173,9 +2172,14 @@ from notebook.conf import ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, get_ord
               if (/\S$/.test(self.activeEditor().getTextBeforeCursor())) {
                 self.activeEditor().session.insert(self.activeEditor().getCursorPosition(), ' ');
               }
-              self.activeEditor().session.insert(self.activeEditor().getCursorPosition(), 'where ');
+
+              self.activeEditor().session.insert(self.activeEditor().getCursorPosition(), location.missing ? 'where ' : 'and ');
               self.activeEditor().focus();
 
+              if (riskId === 22) {
+                huePubSub.publish('editor.autocomplete.temporary.sort.override', { partitionColumnsFirst: true });
+              }
+
               window.setTimeout(function () {
                 self.activeEditor().execCommand("startAutocomplete");
               }, 1);