Bläddra i källkod

HUE-1480 [hbase] Make column family optional in searchbar

Kevin Wang 12 år sedan
förälder
incheckning
464c0f7
2 ändrade filer med 25 tillägg och 14 borttagningar
  1. 4 4
      apps/hbase/src/hbase/api.py
  2. 21 10
      apps/hbase/static/js/controls.js

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

@@ -139,7 +139,7 @@ class HbaseApi(object):
   def deleteColumns(self, cluster, tableName, row, columns):
     client = self.connectCluster(cluster)
     Mutation = get_thrift_type('Mutation')
-    mutations = [Mutation(isDelete = True, column=column) for column in columns]
+    mutations = [Mutation(isDelete = True, column=smart_str(column)) for column in columns]
     return client.mutateRow(tableName, smart_str(row), mutations, None)
 
   def deleteColumn(self, cluster, tableName, row, column):
@@ -150,7 +150,7 @@ class HbaseApi(object):
     mutations = []
     Mutation = get_thrift_type('Mutation')
     for column in data.keys():
-      mutations.append(Mutation(column=column, value=smart_str(data[column]))) # must use str for API, does thrift coerce by itself?
+      mutations.append(Mutation(column=smart_str(column), value=smart_str(data[column]))) # must use str for API, does thrift coerce by itself?
     return client.mutateRow(tableName, smart_str(row), mutations, None)
 
   def putColumn(self, cluster, tableName, row, column, value):
@@ -159,7 +159,7 @@ class HbaseApi(object):
   def putUpload(self, cluster, tableName, row, column, value):
     client = self.connectCluster(cluster)
     Mutation = get_thrift_type('Mutation')
-    return client.mutateRow(tableName, row, [Mutation(column=column, value=value.file.read(value.size))], None)
+    return client.mutateRow(tableName, row, [Mutation(column=smart_str(column), value=value.file.read(value.size))], None)
 
   def getRowQuerySet(self, cluster, tableName, columns, queries):
     client = self.connectCluster(cluster)
@@ -174,7 +174,7 @@ class HbaseApi(object):
       if fs:
         fs = " AND (" + fs.strip() + ")"
       filterstring = "(ColumnPaginationFilter(%i,0) AND PageFilter(%i))" % (limit, limit) + (fs or "")
-      scan = get_thrift_type('TScan')(startRow=smart_str(query['row_key']), stopRow=None, timestamp=None, columns=query['columns'] or columns, caching=None, filterString=filterstring, batchSize=None)
+      scan = get_thrift_type('TScan')(startRow=smart_str(query['row_key']), stopRow=None, timestamp=None, columns=[smart_str(column) for column in (query['columns'] or columns)], caching=None, filterString=filterstring, batchSize=None)
       scanner = client.scannerOpenWithScan(tableName, scan, None)
       aggregate_data += client.scannerGetList(scanner, query['scan_length'])
     return aggregate_data

+ 21 - 10
apps/hbase/static/js/controls.js

@@ -208,12 +208,23 @@ var SmartViewModel = function(options) {
           //pull out column filters
           var toRemove = [];
           var cfs = [];
-          $(columns).each(function(i, o) {
-            if(columns[i].match(searchRenderers['rowkey']['nested']['columns']['nested']['range']['select'])) {
-              var partitions = columns[i].split(searchRenderers['rowkey']['nested']['columns']['nested']['range']['select']);
+          for(var n = 0; n < columns.length; n++) {
+            var o = columns[n];
+            if(columns[n].match(searchRenderers['rowkey']['nested']['columns']['nested']['range']['select'])) {
+              var partitions = columns[n].split(searchRenderers['rowkey']['nested']['columns']['nested']['range']['select']);
               filter += filterPostfix("ColumnRangeFilter('" + partitions[0] + "', false, '" + partitions[1] + "', true)");
-              toRemove.push(i);
+              toRemove.push(n);
             } else {
+              if(o.indexOf(':') == -1) {
+                toRemove.push(n);
+                //for each column family push cf and then column
+                $(self.columnFamilies()).each(function(i, item) {
+                  columns.push(item.name + o);
+                });
+                continue;
+              } else {
+                o = o.slice(o.indexOf(':') + 1);
+              }
               var colscan = pullFromRenderer(o, searchRenderers['rowkey']['nested']['scan']);
               if(colscan) {
                 colscan = parseInt(colscan.split('+')[1]) + 1;
@@ -221,15 +232,15 @@ var SmartViewModel = function(options) {
               }
               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(':'));
+                filter += filterPostfix("ColumnPrefixFilter('" + o.match(/[0-9]+/g)[0] + "')");
+                columns[n] = columns[n].split(':')[0] + ':';
               }
             }
-          });
+          }
 
-          $(toRemove).each(function(i) {
-            columns.splice(toRemove[i], 1);
-          });
+          for(var n = toRemove.length - 1; n>=0; n--) {
+            columns.splice(toRemove[n], 1);
+          };
 
           self.querySet.push(new QuerySetPiece({
             'row_key': inputs[i].replace(/\\(\+|\*|\,)/g, '$1').replace(/[\[\{].+[\]\}]|\*/g,'').trim(), //clean up with column regex selectors instead