Przeglądaj źródła

HUE-5682 [editor] Show details about joins and join conditions in the autocomplete dropdown

Johan Ahlen 8 lat temu
rodzic
commit
eb1682307b

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

@@ -1003,6 +1003,7 @@ var SqlAutocompleter3 = (function () {
         tables: suggestJoins.tables,
         successCallback: function (data) {
           var joinSuggestions = [];
+          var totalCount = 0;
           data.values.forEach(function (value) {
             var suggestionString = suggestJoins.prependJoin ? (self.parseResult.lowerCase ? 'join ' : 'JOIN ') : '';
             var first = true;
@@ -1039,6 +1040,7 @@ var SqlAutocompleter3 = (function () {
                 suggestionString += self.convertNavOptQualifiedIdentifier(joinColPair.columns[0], suggestJoins.tables) + ' = ' + self.convertNavOptQualifiedIdentifier(joinColPair.columns[1], suggestJoins.tables);
                 first = false;
               });
+              totalCount += value.totalQueryCount;
               joinSuggestions.push({
                 value: suggestionString,
                 meta: AutocompleterGlobals.i18n.meta.join,
@@ -1048,6 +1050,10 @@ var SqlAutocompleter3 = (function () {
               });
             }
           });
+          joinSuggestions.forEach(function (suggestion) {
+            suggestion.details.relativePopularity = totalCount === 0 ? suggestion.details.totalQueryCount : Math.round(100 * suggestion.details.totalQueryCount / totalCount);
+            suggestion.weightAdjust = suggestion.details.relativePopularity + 1;
+          });
           self.entries(self.entries().concat(joinSuggestions));
           self.loadingJoins(false);
           joinsDeferred.resolve(joinSuggestions);
@@ -1077,6 +1083,7 @@ var SqlAutocompleter3 = (function () {
         tables: suggestJoinConditions.tables,
         successCallback: function (data) {
           var joinConditionSuggestions = [];
+          var totalCount = 0;
           data.values.forEach(function (value) {
             if (value.joinCols.length > 0) {
               var suggestionString = suggestJoinConditions.prependOn ? (self.parseResult.lowerCase ? 'on ' : 'ON ') : '';
@@ -1088,6 +1095,7 @@ var SqlAutocompleter3 = (function () {
                 suggestionString += self.convertNavOptQualifiedIdentifier(joinColPair.columns[0], suggestJoinConditions.tables) + ' = ' + self.convertNavOptQualifiedIdentifier(joinColPair.columns[1], suggestJoinConditions.tables);
                 first = false;
               });
+              totalCount += value.totalQueryCount;
               joinConditionSuggestions.push({
                 value: suggestionString,
                 meta: AutocompleterGlobals.i18n.meta.joinCondition,
@@ -1097,6 +1105,11 @@ var SqlAutocompleter3 = (function () {
               });
             }
           });
+          joinConditionSuggestions.forEach(function (suggestion) {
+            suggestion.details.relativePopularity = totalCount === 0 ? suggestion.details.totalQueryCount : Math.round(100 * suggestion.details.totalQueryCount / totalCount);
+            suggestion.weightAdjust = suggestion.details.relativePopularity + 1;
+          });
+
           self.entries(self.entries().concat(joinConditionSuggestions));
           joinConditionsDeferred.resolve();
           self.loadingJoinConditions(false);

+ 18 - 2
desktop/libs/notebook/src/notebook/templates/hue_ace_autocompleter.mako

@@ -308,13 +308,29 @@ from desktop.views import _ko
 
   <script type="text/html" id="autocomplete-details-join">
     <div class="autocompleter-details">
-      <pre data-bind="text: ko.mapping.toJSON(details)"></pre>
+      <div class="autocompleter-header"><i class="fa fa-fw fa-star-o"></i> ${ _('Popular join')}</div>
+      <div class="autocompleter-details-contents">
+        <div class="details-code" data-bind="text: value"></div>
+        <div class="details-popularity margin-top-10" data-bind="tooltip: { title: '${ _ko('Popularity') } ' + details.relativePopularity + '%', placement: 'bottom' }"><i class="fa fa-fw fa-star-o popular-icon"></i>
+          <div class="progress">
+            <div class="bar" data-bind="style: { 'width': details.relativePopularity + '%' }"></div>
+          </div>
+        </div>
+      </div>
     </div>
   </script>
 
   <script type="text/html" id="autocomplete-details-join-condition">
     <div class="autocompleter-details">
-      <pre data-bind="text: ko.mapping.toJSON(details)"></pre>
+      <div class="autocompleter-header"><i class="fa fa-fw fa-star-o"></i> ${ _('Popular join condition')}</div>
+      <div class="autocompleter-details-contents">
+        <div class="details-code" data-bind="text: value"></div>
+        <div class="details-popularity margin-top-10" data-bind="tooltip: { title: '${ _ko('Popularity') } ' + details.relativePopularity + '%', placement: 'bottom' }"><i class="fa fa-fw fa-star-o popular-icon"></i>
+          <div class="progress">
+            <div class="bar" data-bind="style: { 'width': details.relativePopularity + '%' }"></div>
+          </div>
+        </div>
+      </div>
     </div>
   </script>