This is an automated email from the ASF dual-hosted git repository.

cgivre pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git


The following commit(s) were added to refs/heads/master by this push:
     new 11aaa3f89c DRILL-8506: Ignore JSON Elements with Empty Keys (#2935)
11aaa3f89c is described below

commit 11aaa3f89cb85f7ef63e6cc5416c6b2f90e8322c
Author: Charles S. Givre <[email protected]>
AuthorDate: Mon Aug 26 08:58:19 2024 -0400

    DRILL-8506: Ignore JSON Elements with Empty Keys (#2935)
---
 .../exec/store/easy/json/parser/ObjectParser.java  |  4 ++--
 .../exec/store/easy/json/loader/TestBasics.java    | 26 +++++++++++++++-------
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/json/parser/ObjectParser.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/json/parser/ObjectParser.java
index ad405c1641..a5787f85b0 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/json/parser/ObjectParser.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/json/parser/ObjectParser.java
@@ -238,8 +238,8 @@ public abstract class ObjectParser extends 
AbstractElementParser {
    */
   private ElementParser detectValueParser(String key, TokenIterator tokenizer) 
{
     if (key.isEmpty()) {
-      throw errorFactory().structureError(
-          "Drill does not allow empty keys in JSON key/value pairs");
+      logger.warn("Ignoring empty key: {}", key);
+      return DummyValueParser.INSTANCE;
     }
     ElementParser fieldParser = onField(key, tokenizer);
     if (fieldParser == null) {
diff --git 
a/exec/java-exec/src/test/java/org/apache/drill/exec/store/easy/json/loader/TestBasics.java
 
b/exec/java-exec/src/test/java/org/apache/drill/exec/store/easy/json/loader/TestBasics.java
index 10fcbace9e..0ab5c2b3c3 100644
--- 
a/exec/java-exec/src/test/java/org/apache/drill/exec/store/easy/json/loader/TestBasics.java
+++ 
b/exec/java-exec/src/test/java/org/apache/drill/exec/store/easy/json/loader/TestBasics.java
@@ -17,12 +17,6 @@
  */
 package org.apache.drill.exec.store.easy.json.loader;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 import org.apache.drill.categories.JsonTest;
 import org.apache.drill.common.exceptions.UserException;
 import org.apache.drill.common.types.TypeProtos.MinorType;
@@ -35,6 +29,12 @@ import org.apache.drill.test.rowSet.RowSetUtilities;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 @Category(JsonTest.class)
 public class TestBasics extends BaseJsonLoaderTest {
 
@@ -176,12 +176,22 @@ public class TestBasics extends BaseJsonLoaderTest {
 
   @Test
   public void testEmptyKey() {
-    expectError("{\"\": 10}", "does not allow empty keys");
+    JsonLoaderFixture loader = new JsonLoaderFixture();
+    loader.jsonOptions.skipMalformedRecords = true;
+    loader.open("{\"\": 10}");
+    RowSet results = loader.next();
+    assertNotNull(results);
+    assertEquals(1, results.rowCount());
   }
 
   @Test
   public void testBlankKey() {
-    expectError("{\"  \": 10}", "does not allow empty keys");
+    JsonLoaderFixture loader = new JsonLoaderFixture();
+    loader.jsonOptions.skipMalformedRecords = true;
+    loader.open("{\"  \": 10}");
+    RowSet results = loader.next();
+    assertNotNull(results);
+    assertEquals(1, results.rowCount());
   }
 
   @Test

Reply via email to