[Groonga-commit] groonga/groonga-admin at 2d9897f [master] Detect match_columns automatically

Back to archive index

Kouhei Sutou null+****@clear*****
Mon Oct 27 18:33:04 JST 2014


Kouhei Sutou	2014-10-27 18:33:04 +0900 (Mon, 27 Oct 2014)

  New Revision: 2d9897f5ba4fca88e68d2ebac2e05bf47e995acf
  https://github.com/groonga/groonga-admin/commit/2d9897f5ba4fca88e68d2ebac2e05bf47e995acf

  Message:
    Detect match_columns automatically

  Added files:
    app/scripts/groonga-client/response/column-list.js
  Modified files:
    app/index.html
    app/scripts/controllers/table-search-controller.js
    app/views/tables/search.html

  Modified: app/index.html (+1 -0)
===================================================================
--- app/index.html    2014-10-27 17:36:53 +0900 (9812d8c)
+++ app/index.html    2014-10-27 18:33:04 +0900 (55f61b9)
@@ -75,6 +75,7 @@
         <script src="scripts/groonga-client/response/base.js"></script>
         <script src="scripts/groonga-client/response/select.js"></script>
         <script src="scripts/groonga-client/response/table-list.js"></script>
+        <script src="scripts/groonga-client/response/column-list.js"></script>
         <script src="scripts/app.js"></script>
         <script src="scripts/controllers/top-controller.js"></script>
         <script src="scripts/controllers/table-search-controller.js"></script>

  Modified: app/scripts/controllers/table-search-controller.js (+35 -2)
===================================================================
--- app/scripts/controllers/table-search-controller.js    2014-10-27 17:36:53 +0900 (480aae6)
+++ app/scripts/controllers/table-search-controller.js    2014-10-27 18:33:04 +0900 (c48f7fd)
@@ -14,13 +14,23 @@ angular.module('groongaAdminApp')
     $scope.rawData = [];
     $scope.columns = [];
     $scope.records = [];
+    $scope.indexedColumns = [];
     $scope.commandLine = '';
     $scope.message = '';
     $scope.elapsedTimeInMilliseconds = 0;
     $scope.nTotalRecords = 0;
     $scope.parameters = angular.copy($location.search());
 
-    $scope.search = function(parameters) {
+    $scope.search = function() {
+      var parameters = angular.copy($scope.parameters);
+      parameters.match_columns = $scope.indexedColumns
+        .filter(function(indexedColumn) {
+          return indexedColumn.inUse;
+        })
+        .map(function(indexedColumn) {
+          return indexedColumn.name;
+        })
+        .join(',');
       $location.search(parameters);
     };
 
@@ -28,6 +38,30 @@ angular.module('groongaAdminApp')
       $location.search({});
     };
 
+    var client = new GroongaClient($http);
+    client.execute('table_list')
+      .success(function(response) {
+        response.tables().forEach(function(table) {
+          client.execute('column_list', {table: table.name})
+            .success(function(response) {
+              response.columns().forEach(function(column) {
+                if (!column.isIndex) {
+                  return;
+                }
+                if (column.range != $scope.table) {
+                  return;
+                }
+                var matchColumns = $scope.parameters['match_columns'] || [];
+                column.sources.forEach(function(source) {
+                  var localName = source.split('.')[1];
+                  var inUse = matchColumns.indexOf(localName) != -1;
+                  $scope.indexedColumns.push({name: localName, inUse: inUse});
+                });
+              });
+            });
+        });
+      });
+
     var parameters = {
       table: $scope.table
     };
@@ -37,7 +71,6 @@ angular.module('groongaAdminApp')
       }
       parameters[key] = value;
     });
-    var client = new GroongaClient($http);
     var request = client.execute('select', parameters);
     request.success(function(response) {
       $scope.rawData = response.rawData();

  Added: app/scripts/groonga-client/response/column-list.js (+44 -0) 100644
===================================================================
--- /dev/null
+++ app/scripts/groonga-client/response/column-list.js    2014-10-27 18:33:04 +0900 (85937ac)
@@ -0,0 +1,44 @@
+'use strict';
+
+(function() {
+  function ColumnList(rawData) {
+    GroongaClient.Response.Base.call(this, rawData);
+  }
+  GroongaClient.Response.ColumnList = ColumnList;
+
+  ColumnList.prototype = Object.create(GroongaClient.Response.Base.prototype);
+  ColumnList.prototype.constructor = ColumnList;
+
+  ColumnList.prototype.parameters = function() {
+    return this.body()[0].map(function(parameter) {
+      return {
+        name: parameter[0],
+        type: parameter[1]
+      };
+    });
+  };
+
+  ColumnList.prototype.columns = function() {
+    var parameters = this.parameters();
+    return this.body().slice(1).map(function(columnProperties) {
+      var column = {};
+      parameters.forEach(function(parameter, index) {
+        var name = parameter.name;
+        var value = columnProperties[index];
+        switch (parameter.name) {
+        case 'flags':
+          value = value.split('|');
+          break;
+        case 'source':
+          name = 'sources';
+          break;
+        }
+        column[name] = value;
+      });
+      column.isScalar = column.flags.indexOf('COLUMN_SCALAR') != -1;
+      column.isVector = column.flags.indexOf('COLUMN_VECTOR') != -1;
+      column.isIndex  = column.flags.indexOf('COLUMN_INDEX')  != -1;
+      return column;
+    });
+  };
+})();

  Modified: app/views/tables/search.html (+9 -4)
===================================================================
--- app/views/tables/search.html    2014-10-27 17:36:53 +0900 (aedb26e)
+++ app/views/tables/search.html    2014-10-27 18:33:04 +0900 (491b2be)
@@ -6,16 +6,21 @@
   <form role="search">
     <div class="form-group">
       <div class="input-group">
-        <span class="input-group-addon">match_columns</span>
-        <input type="search" class="form-control" ng-model="parameters.match_columns">
+        <span ng-repeat="indexedColumn in indexedColumns track by $index">
+          <label>
+            <input type="checkbox"
+                   ng-model="indexedColumn.inUse">
+            {{indexedColumn.name}}
+          </label>
+        </span>
       </div>
       <div class="input-group">
-        <span class="input-group-addon">query</span>
+        <span class="input-group-addon">Query</span>
         <input type="search" class="form-control" ng-model="parameters.query">
       </div>
     </div>
     <div class="form-group">
-      <button ng-click="search(parameters)" class="btn btn-default">Search</button>
+      <button ng-click="search()" class="btn btn-default">Search</button>
       <button ng-click="clear()" class="btn btn-default">Clear</button>
     </div>
   </form>
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index