You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2015/03/09 21:27:42 UTC

svn commit: r1665347 - in /lucene/dev/branches/branch_5x: ./ solr/ solr/CHANGES.txt solr/solrj/ solr/solrj/src/java/org/apache/solr/common/util/JsonRecordReader.java solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java

Author: noble
Date: Mon Mar  9 20:27:42 2015
New Revision: 1665347

URL: http://svn.apache.org/r1665347
Log:
SOLR-7209: /update/json/docs carry forward fields from previous records

Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/solr/   (props changed)
    lucene/dev/branches/branch_5x/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_5x/solr/solrj/   (props changed)
    lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/util/JsonRecordReader.java
    lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java

Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1665347&r1=1665346&r2=1665347&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Mon Mar  9 20:27:42 2015
@@ -148,6 +148,9 @@ Bug Fixes
 * SOLR-4464: DIH Processed documents counter resets to zero after first entity is processed.
   (Dave Cook, Shawn Heisey, Aaron Greenspan, Thomas Champagne via shalin)
 
+* SOLR-7209: /update/json/docs carry forward fields from previous records (Noble Paul)
+
+
 Optimizations
 ----------------------
 

Modified: lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/util/JsonRecordReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/util/JsonRecordReader.java?rev=1665347&r1=1665346&r2=1665347&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/util/JsonRecordReader.java (original)
+++ lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/util/JsonRecordReader.java Mon Mar  9 20:27:42 2015
@@ -320,7 +320,7 @@ public class JsonRecordReader {
 
       final boolean isRecordStarted = recordStarted || isRecord;
       Set<String> valuesAddedinThisFrame = null;
-      if (isRecord) {
+      if (isRecord || !recordStarted) {
         // This Node is a match for an PATH from a forEach attribute,
         // prepare for the clean up that will occurr when the record
         // is emitted after its END_ELEMENT is matched
@@ -384,7 +384,7 @@ public class JsonRecordReader {
               Object val = parseSingleFieldValue(event, parser, runnable);
               if (val != null) {
                 putValue(values, nameInRecord, val);
-                if (isRecordStarted) valuesAddedinThisFrame.add(nameInRecord);
+                valuesAddedinThisFrame.add(nameInRecord);
               }
 
             } else {
@@ -414,12 +414,9 @@ public class JsonRecordReader {
           }
         }
       } finally {
-        if ((isRecord() || !isRecordStarted) && !stack.empty()) {
-          Set<String> cleanThis = stack.pop();
-          if (cleanThis != null) {
-            for (String fld : cleanThis) {
-              values.remove(fld);
-            }
+        if ((isRecord() || !isRecordStarted)) {
+          for (String fld : valuesAddedinThisFrame) {
+            values.remove(fld);
           }
         }
       }

Modified: lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java?rev=1665347&r1=1665346&r2=1665347&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java (original)
+++ lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/common/util/TestJsonRecordReader.java Mon Mar  9 20:27:42 2015
@@ -220,4 +220,38 @@ public class TestJsonRecordReader extend
     records = streamer.getAllRecords(new StringReader(json));
     assertEquals(2, records.size());
   }
+
+  public void testClearPreviousRecordFields() throws Exception {
+    String json = "{\n" +
+        "'first': 'John',\n" +
+        "'exams': [\n" +
+        "{'subject': 'Maths', 'test'   : 'term1', 'marks':90},\n" +
+        "{'subject': 'Biology', 'test'   : 'term1', 'marks':86}\n" +
+        "]\n" +
+        "}\n" +
+        "{\n" +
+        "'first': 'Bob',\n" +
+        "'exams': [\n" +
+        "{'subject': 'Maths', 'test': 'term1', 'marks': 95\n" +
+        "}\n" +
+        ",\n" +
+        "{\n" +
+        "'subject': 'Biology', 'test'   : 'term1', 'marks': 92}\n" +
+        "]\n" +
+        "}";
+
+
+    JsonRecordReader streamer;
+    List<Map<String, Object>> records;
+
+    streamer = JsonRecordReader.getInst("/exams", Collections.singletonList("/**"));
+    records = streamer.getAllRecords(new StringReader(json));
+    assertEquals(4, records.size());
+
+    for (Map<String, Object> record : records) {
+      for (Map.Entry<String, Object> e : record.entrySet()) {
+        assertFalse(e.getValue() instanceof List);
+      }
+    }
+  }
 }