Browse Source

HUE-7362 [assist] Enable filter on column types in the left assist

Johan Ahlen 8 years ago
parent
commit
bab09db

+ 21 - 8
desktop/core/src/desktop/static/desktop/js/assist/assistDbEntry.js

@@ -81,20 +81,33 @@ var AssistDbEntry = (function () {
       if (self.filter == null || (self.filter.showTables && self.filter.showTables() && self.filter.showViews && self.filter.showViews() && (!self.filter.querySpec().facets || self.filter.querySpec().facets === {}) && (!self.filter.querySpec().text || self.filter.querySpec().text.length === 0))) {
       if (self.filter == null || (self.filter.showTables && self.filter.showTables() && self.filter.showViews && self.filter.showViews() && (!self.filter.querySpec().facets || self.filter.querySpec().facets === {}) && (!self.filter.querySpec().text || self.filter.querySpec().text.length === 0))) {
         return self.entries();
         return self.entries();
       }
       }
+      var facets = self.filter.querySpec().facets;
+      if (self.entries().length > 0 && (self.entries()[0].definition.isColumn || self.entries()[0].definition.isComplex)) {
+        if (!facets || !facets['type']) {
+          return self.entries();
+        } else {
+          if ((Object.keys(facets['type']).length == 2 && facets['type']['table'] && facets['type']['view']) || (Object.keys(facets['type']).length == 1 && (facets['type']['table'] || facets['type']['view']))) {
+            return self.entries();
+          }
+          return self.entries().filter(function (entry) {
+            return facets['type'][entry.definition.type];
+          })
+        }
+      }
 
 
       var result = [];
       var result = [];
       $.each(self.entries(), function (index, entry) {
       $.each(self.entries(), function (index, entry) {
         if ((entry.definition.isTable && !self.filter.showTables()) || (entry.definition.isView && !self.filter.showViews()) ) {
         if ((entry.definition.isTable && !self.filter.showTables()) || (entry.definition.isView && !self.filter.showViews()) ) {
           return;
           return;
         }
         }
-        var facets = self.filter.querySpec().facets;
-        var facetMatch = !facets || !facets['type'];
-        if (!facetMatch) {
-          facets['type'].every(function (typeFacet) {
-            facetMatch = (typeFacet === 'table' && entry.definition.isTable) || (typeFacet === 'view' && entry.definition.isView);
-            return !facetMatch;
-          });
+        var facetMatch = !facets || !facets['type'] || (!facets['type']['table'] && !facets['type']['view']);
+        if (!facetMatch && facets['type']['table']) {
+          facetMatch = entry.definition.isTable;
+        }
+        if (!facetMatch && facets['type']['view']) {
+          facetMatch = entry.definition.isView;
         }
         }
+
         var textMatch = !self.filter.querySpec().text || self.filter.querySpec().text.length === 0;
         var textMatch = !self.filter.querySpec().text || self.filter.querySpec().text.length === 0;
         if (!textMatch) {
         if (!textMatch) {
           var nameLower = entry.definition.name.toLowerCase();
           var nameLower = entry.definition.name.toLowerCase();
@@ -465,7 +478,7 @@ var AssistDbEntry = (function () {
    */
    */
   AssistDbEntry.prototype.createEntry = function (definition) {
   AssistDbEntry.prototype.createEntry = function (definition) {
     var self = this;
     var self = this;
-    return new AssistDbEntry(definition, self, self.assistDbSource, null, self.i18n, self.navigationSettings, self.sortFunctions)
+    return new AssistDbEntry(definition, self, self.assistDbSource, self.filter, self.i18n, self.navigationSettings, self.sortFunctions)
   };
   };
 
 
   AssistDbEntry.prototype.getHierarchy = function () {
   AssistDbEntry.prototype.getHierarchy = function () {

File diff suppressed because it is too large
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/globalSearchParser.js


+ 4 - 2
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/globalSearchParser.jison

@@ -138,13 +138,15 @@ Facet
  : 'FACET' FreeText
  : 'FACET' FreeText
    {
    {
      var facet = {};
      var facet = {};
-     facet[$1.substring(0, $1.length - 1)] = [ $2 ];
+     var facetName = $1.substring(0, $1.length - 1).toLowerCase();
+     facet[facetName] = {};
+     facet[facetName][$2.toLowerCase()] = true;
      $$ = { facets: facet };
      $$ = { facets: facet };
    }
    }
  ;
  ;
 
 
 Facet_EDIT
 Facet_EDIT
- : 'FACET' 'CURSOR'     --> { suggestFacetValues: $1.substring(0, $1.length - 1) }
+ : 'FACET' 'CURSOR'     --> { suggestFacetValues: $1.substring(0, $1.length - 1).toLowerCase() }
  ;
  ;
 
 
 FreeText
 FreeText

+ 3 - 1
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlParseSupport.js

@@ -1907,7 +1907,9 @@ var SqlParseSupport = (function () {
       if (a && b) {
       if (a && b) {
         Object.keys(b).forEach(function (key) {
         Object.keys(b).forEach(function (key) {
           if (a[key]) {
           if (a[key]) {
-            a[key] = a[key].concat(b[key]);
+            Object.keys(b[key]).forEach(function (val) {
+              a[key][val.toLowerCase()] = true;
+            });
           } else {
           } else {
             a[key] = b[key];
             a[key] = b[key];
           }
           }

+ 8 - 8
desktop/core/src/desktop/static/desktop/spec/autocomplete/globalSearchParserSpec.js

@@ -35,7 +35,7 @@
         suggestFacets: true,
         suggestFacets: true,
         suggestResults: true,
         suggestResults: true,
         facets: {
         facets: {
-          'TAGS' : ['asdf']
+          'tags' : { 'asdf': true }
         },
         },
         text: []
         text: []
       });
       });
@@ -45,7 +45,7 @@
       testParser('type:table tags: ', '', {
       testParser('type:table tags: ', '', {
         suggestFacetValues: 'tags',
         suggestFacetValues: 'tags',
         facets: {
         facets: {
-          'type': ['table']
+          'type': { 'table': true }
         },
         },
         text: []
         text: []
       });
       });
@@ -56,7 +56,7 @@
         suggestFacets: true,
         suggestFacets: true,
         suggestResults: true,
         suggestResults: true,
         facets: {
         facets: {
-          'type': ['table', 'column']
+          'type': { 'table': true, 'column': true }
         },
         },
         text: []
         text: []
       });
       });
@@ -76,8 +76,8 @@
         suggestFacets: true,
         suggestFacets: true,
         suggestResults: true,
         suggestResults: true,
         facets: {
         facets: {
-          boo: ['asdfa adsf'],
-          foo: ['bar']
+          boo: { 'asdfa adsf': true },
+          foo: { 'bar': true }
         },
         },
         text: ['some', 'text', 'goes', 'here', 'quoted value']
         text: ['some', 'text', 'goes', 'here', 'quoted value']
       });
       });
@@ -88,14 +88,14 @@
         suggestFacets: true,
         suggestFacets: true,
         suggestResults: true,
         suggestResults: true,
         facets: {
         facets: {
-          type: ['foo']
+          type: { 'foo': true }
         },
         },
         text: ['bar']
         text: ['bar']
       });
       });
     });
     });
 
 
-    it('should suggest facet values for "tags: |"', function () {
-      testParser('tags: ', '', {
+    it('should suggest facet values for "TAGS: |"', function () {
+      testParser('TAGS: ', '', {
         suggestFacetValues: 'tags',
         suggestFacetValues: 'tags',
         facets: {},
         facets: {},
         text: []
         text: []

+ 22 - 1
desktop/core/src/desktop/templates/assist.mako

@@ -957,7 +957,28 @@ from notebook.conf import ENABLE_QUERY_BUILDER, ENABLE_QUERY_SCHEDULING, get_ord
           params: {
           params: {
             querySpec: filter.querySpec,
             querySpec: filter.querySpec,
             facets: ['type'],
             facets: ['type'],
-            knownFacetValues: { 'type': {'table': -1, 'view': -1 } }
+            knownFacetValues: { 'type': {
+              'array': -1,
+              'table': -1,
+              'view': -1,
+              'boolean': -1,
+              'bigint': -1,
+              'binary': -1,
+              'char': -1,
+              'date': -1,
+              'double': -1,
+              'decimal': -1,
+              'float': -1,
+              'int': -1,
+              'map': -1,
+              'real': -1,
+              'smallint': -1,
+              'string': -1,
+              'struct': -1,
+              'timestamp': -1,
+              'tinyint': -1,
+              'varchar': -1
+            }}
           }
           }
         } --><!-- /ko -->
         } --><!-- /ko -->
       </div>
       </div>

Some files were not shown because too many files changed in this diff