瀏覽代碼

HUE-1439 [hbase] Column range help in search bar

Kevin Wang 12 年之前
父節點
當前提交
b518b4f
共有 3 個文件被更改,包括 35 次插入8 次删除
  1. 1 1
      apps/hbase/src/hbase/api.py
  2. 33 6
      apps/hbase/static/js/controls.js
  3. 1 1
      apps/hbase/static/js/utils.js

+ 1 - 1
apps/hbase/src/hbase/api.py

@@ -165,7 +165,7 @@ class HbaseApi(object):
         query['row_key'] = ""
       fs = query.get('filter', None)
       if fs:
-        fs = " AND (" + fs + ")"
+        fs = " AND (" + fs.strip() + ")"
       filterstring = "(ColumnPaginationFilter(" + str(limit) + ",0) AND PageFilter(" + str(limit) + "))" + (fs or "")
       scan = get_thrift_type('TScan')(startRow=query['row_key'], stopRow=None, timestamp=None, columns=query['columns'] or columns, caching=None, filterString=filterstring, batchSize=None)
       scanner = client.scannerOpenWithScan(tableName, scan, None)

+ 33 - 6
apps/hbase/static/js/controls.js

@@ -177,19 +177,46 @@ var SmartViewModel = function(options) {
     if(inputs) {
       for(var i=0; i<inputs.length; i++) {
         if(inputs[i].trim() != "" && inputs[i].trim() != ',') {
+          //pull out columns
+          var extract = inputs[i].match(searchRenderers['rowkey']['nested']['columns']['select']);
+          var columns = extract != null ? extract[0].match(searchRenderers['rowkey']['nested']['columns']['tag']) : [];
+          inputs[i] = inputs[i].replace(extract, '');
+
+          //pull out scan
           var p = pullFromRenderer(inputs[i], searchRenderers['rowkey']['nested']['scan']);
           inputs[i] = inputs[i].replace(p, '');
           p = p.split('+');
           var scan = p.length > 1 ? parseInt(p[1].trim()) : 0;
-          var extract = inputs[i].match(searchRenderers['rowkey']['nested']['columns']['select']);
-          var columns = extract != null ? extract[0].match(searchRenderers['rowkey']['nested']['columns']['tag']) : [];
-          var filter = inputs[i].match(searchRenderers['rowkey']['nested']['filter']['select']);
+
+          //pull out filters
+          var filter = inputs[i].match(searchRenderers['rowkey']['nested']['filter']['select']) || "";
+          filter = filter != null && filter.length > 0 ? escape(filter[0].trim().slice(1, -1)) : "";
+
+          //pull out column filters
+          function filterPostfix(postfix) {
+            return (filter != null && filter.length > 0 ? ' AND ' : ' ' ) + postfix;
+          }
+
+          var cfs = [];
+          $(columns).each(function(i, o) {
+            var colscan = pullFromRenderer(o, searchRenderers['rowkey']['nested']['scan']);
+            if(colscan) {
+              colscan = parseInt(colscan.split('+')[1]) + 1;
+              filter += filterPostfix("ColumnPaginationFilter(" + colscan + ", 0)");
+            }
+            var fc = o.replace(pullFromRenderer(o, searchRenderers['rowkey']['nested']['prefix']), '');
+            if(fc != o) {
+              filter += filterPostfix("ColumnPrefixFilter('" + fc.slice(fc.indexOf(':') + 1).match(/[0-9]+/g)[0] + "')");
+              columns[i] = fc.slice(0, fc.indexOf(':'));
+            }
+          });
+
           self.querySet.push(new QuerySetPiece({
             'row_key': inputs[i].replace(/\\(\+|\*|\,)/g, '$1').replace(/[\[\{].+[\]\}]|\*/g,'').trim(), //clean up with column regex selectors instead
             'scan_length': scan ? scan + 1 : 1,
             'columns': columns,
             'prefix': inputs[i].match(searchRenderers['rowkey']['nested']['prefix']['select']) != null,
-            'filter': filter != null && filter.length > 0 ? escape(filter[0].slice(1, -1)) : null
+            'filter': filter.length > 0 ? filter : null
           }));
         }
       }
@@ -572,12 +599,12 @@ var tagsearch = function() {
       mode: ['rowkey', 'prefix', 'scan'],
       selected: false
     }, {
-      hint: 'Mark Row Prefix',
+      hint: 'Mark Row/Column Prefix',
       shortcut: '*',
       mode: ['rowkey'],
       selected: false
     }, {
-      hint: 'Start Scan',
+      hint: 'Start Row/Column Scan',
       shortcut: '+',
       mode: ['rowkey', 'prefix'],
       selected: false

+ 1 - 1
apps/hbase/static/js/utils.js

@@ -278,7 +278,7 @@ function setCursor(node, pos, trimWhitespaceNodes){
 
 function pullFromRenderer(str, renderer) {
   try {
-    return str.match(searchRenderers.rowkey.nested.scan.select)[0].match(searchRenderers.rowkey.nested.scan.tag)[0];
+    return str.match(renderer.select)[0].match(renderer.tag)[0];
   } catch (e){
     return "";
   }