[Groonga-commit] groonga/gcs [master] Return field with empty value if it is "noresult"

Back to archive index

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 



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