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