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