YUKI Hiroshi
null+****@clear*****
Fri Aug 24 20:13:07 JST 2012
YUKI Hiroshi 2012-08-24 20:13:07 +0900 (Fri, 24 Aug 2012) New Revision: 0c342eaea350b1274e64967955b8e13441782153 https://github.com/groonga/gcs/commit/0c342eaea350b1274e64967955b8e13441782153 Log: Return field with empty value if it is "noresult" Modified files: lib/api/2011-02-01/search.js lib/select-query.js Modified: lib/api/2011-02-01/search.js (+15 -5) =================================================================== --- lib/api/2011-02-01/search.js 2012-08-24 20:02:30 +0900 (88859f4) +++ lib/api/2011-02-01/search.js 2012-08-24 20:13:07 +0900 (16aeb13) @@ -1,6 +1,7 @@ // -*- indent-tabs-mode: nil; js2-basic-offset: 2 -*- var SelectQuery = require('../../select-query').SelectQuery; +var IndexField = require('../../database').IndexField; var dummyRid = '000000000000000000000000000000000000000000000000000000000000000'; @@ -30,7 +31,7 @@ function formatFacet(drilldownRecord) { return {constraints: constraints}; } -function formatSelectResults(data) { +function formatSelectResults(data, selectQuery) { var columnList = data[0][1]; var columnNames = columnList.map(function(column) { return column[0]; @@ -40,6 +41,7 @@ function formatSelectResults(data) { var results = records.map(function(record) { var result = {}; var data = {}; + columnNames.forEach(function(columnName, index) { // bind internal "_key" column to the "id" if (columnName == '_key') { @@ -48,16 +50,24 @@ function formatSelectResults(data) { } // don't expose any internal column if (columnName[0] == '_') return; + + var fieldName = IndexField.toFieldName(columnName); if (Array.isArray(record[index])) { // vector column - data[columnName] = record[index]; + data[fieldName] = record[index]; } else { // scalar column - data[columnName] = [record[index]]; + data[fieldName] = [record[index]]; } }); - if (Object.keys(data).length) + + emptyReturnFields.forEach(function(fieldName) { + data[fieldName] = []; + }); + + if (selectQuery.returnFields.length) result.data = data; + return result; }); return results; @@ -75,7 +85,7 @@ function select(context, selectQuery, callback) { var numFoundRecords = data[0][0][0]; callback( null, - formatSelectResults(data), + formatSelectResults(data, selectQuery), numFoundRecords, formatFacets(data) ); Modified: lib/select-query.js (+24 -0) =================================================================== --- lib/select-query.js 2012-08-24 20:02:30 +0900 (13c6244) +++ lib/select-query.js 2012-08-24 20:13:07 +0900 (7493eb5) @@ -132,6 +132,30 @@ SelectQuery.prototype = { this.matchExpression = matchExpression; }, + get emptyReturnFields() { + if (this._emptyReturnFields === undefined) + this._emptyReturnFields = this.prepareEmptyReturnFields(); + return this._emptyReturnFields; + }, + prepareEmptyReturnFields: function() { + return this.returnFields.filter(function(fieldName) { + var field = this.domain.getIndexField(fieldName); + return field.exists() && !field.resultEnabled; + }, this) + }, + + get emptyFacets() { + if (this._emptyFacets === undefined) + this._emptyFacets = this.prepareEmptyFacets(); + return this._emptyFacets; + }, + prepareEmptyFacets: function() { + return this.facets.filter(function(fieldName) { + var field = this.domain.getIndexField(fieldName); + return field.exists() && !field.facetEnabled; + }, this) + }, + // for groonga query get filter() { return this.filters.join(' && '); -------------- next part -------------- HTML����������������������������...Download