Skip to content

Commit 87a0d60

Browse files
committed
WIP.
1 parent e49cd43 commit 87a0d60

File tree

3 files changed

+21
-23
lines changed

3 files changed

+21
-23
lines changed

exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/conv/JsonConvertFrom.java

+15-14
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import org.apache.drill.exec.server.options.OptionManager;
3434
import org.apache.drill.exec.vector.complex.writer.BaseWriter;
3535
import org.apache.drill.exec.vector.complex.writer.BaseWriter.ComplexWriter;
36-
36+
@SuppressWarnings("unused")
3737
public class JsonConvertFrom {
3838

3939
private JsonConvertFrom() {}
@@ -55,38 +55,39 @@ public static class ConvertFromJsonNullableInput implements DrillSimpleFunc {
5555
ResultSetLoader rsLoader;
5656

5757
@Workspace
58-
org.apache.drill.exec.store.easy.json.loader.SingleElementIterator<java.io.InputStream> stream;
58+
org.apache.drill.exec.store.easy.json.loader.SingleElementIterator<java.io.InputStream> streamIter;
5959

6060
@Workspace
6161
org.apache.drill.exec.store.easy.json.loader.JsonLoaderImpl jsonLoader;
6262

6363
@Override
6464
public void setup() {
65+
streamIter = new org.apache.drill.exec.store.easy.json.loader.SingleElementIterator<>();
6566
rsLoader.startBatch();
6667
}
6768

6869
@Override
6970
public void eval() {
70-
if (in.end == 0) {
71-
// Return empty map
71+
// If the input is null or empty, return an empty map
72+
if (in.isSet == 0 || in.start == in.end) {
7273
return;
7374
}
7475

7576
java.io.InputStream inputStream = org.apache.drill.exec.vector.complex.fn.DrillBufInputStream.getStream(in.start, in.end, in.buffer);
7677

7778
try {
78-
stream.setValue(inputStream);
79+
streamIter.setValue(inputStream);
7980

8081
if (jsonLoader == null) {
81-
jsonLoader = org.apache.drill.exec.expr.fn.impl.conv.JsonConverterUtils.createJsonLoader(rsLoader, options, stream);
82+
jsonLoader = org.apache.drill.exec.expr.fn.impl.conv.JsonConverterUtils.createJsonLoader(rsLoader, options, streamIter);
8283
}
8384

8485
org.apache.drill.exec.physical.resultSet.RowSetLoader rowWriter = rsLoader.writer();
8586
rowWriter.start();
8687
if (jsonLoader.parser().next()) {
8788
rowWriter.save();
8889
}
89-
inputStream.close();
90+
//inputStream.close();
9091

9192
} catch (Exception e) {
9293
throw org.apache.drill.common.exceptions.UserException.dataReadError(e)
@@ -108,7 +109,7 @@ public static class ConvertFromJsonVarcharInput implements DrillSimpleFunc {
108109
ComplexWriter writer;
109110

110111
@Workspace
111-
org.apache.drill.exec.store.easy.json.loader.SingleElementIterator<java.io.InputStream> stream;
112+
org.apache.drill.exec.store.easy.json.loader.SingleElementIterator<java.io.InputStream> streamIter;
112113

113114
@Inject
114115
OptionManager options;
@@ -119,25 +120,25 @@ public static class ConvertFromJsonVarcharInput implements DrillSimpleFunc {
119120
@Workspace
120121
org.apache.drill.exec.store.easy.json.loader.JsonLoaderImpl jsonLoader;
121122

122-
123123
@Override
124124
public void setup() {
125+
streamIter = new org.apache.drill.exec.store.easy.json.loader.SingleElementIterator<>();
125126
rsLoader.startBatch();
126127
}
127128

128129
@Override
129130
public void eval() {
130-
String jsonString = org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(in.start, in.end, in.buffer);
131-
132131
// If the input is null or empty, return an empty map
133-
if (jsonString.length() == 0) {
132+
if (in.isSet == 0 || in.start == in.end) {
134133
return;
135134
}
136135

136+
java.io.InputStream inputStream = org.apache.drill.exec.vector.complex.fn.DrillBufInputStream.getStream(in.start, in.end, in.buffer);
137+
137138
try {
138-
stream.setValue(org.apache.drill.exec.expr.fn.impl.conv.JsonConverterUtils.convertStringToInputStream(jsonString));
139+
streamIter.setValue(inputStream);
139140
if (jsonLoader == null) {
140-
jsonLoader = org.apache.drill.exec.expr.fn.impl.conv.JsonConverterUtils.createJsonLoader(rsLoader, options, stream);
141+
jsonLoader = org.apache.drill.exec.expr.fn.impl.conv.JsonConverterUtils.createJsonLoader(rsLoader, options, streamIter);
141142
}
142143
org.apache.drill.exec.physical.resultSet.RowSetLoader rowWriter = rsLoader.writer();
143144
rowWriter.start();

exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/conv/JsonConverterUtils.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
package org.apache.drill.exec.expr.fn.impl.conv;
2020

2121

22-
import org.apache.commons.io.IOUtils;
23-
import org.apache.drill.common.exceptions.UserException;
2422
import org.apache.drill.exec.physical.resultSet.ResultSetLoader;
2523
import org.apache.drill.exec.server.options.OptionManager;
2624
import org.apache.drill.exec.store.easy.json.loader.JsonLoaderImpl;
@@ -29,14 +27,13 @@
2927
import org.slf4j.Logger;
3028
import org.slf4j.LoggerFactory;
3129

32-
import java.io.IOException;
3330
import java.io.InputStream;
34-
import java.nio.charset.Charset;
3531

3632
public class JsonConverterUtils {
3733

3834
private static final Logger logger = LoggerFactory.getLogger(JsonConverterUtils.class);
3935

36+
/*
4037
public static InputStream convertStringToInputStream(String input) {
4138
try (InputStream stream = IOUtils.toInputStream(input, Charset.defaultCharset())) {
4239
return stream;
@@ -46,6 +43,7 @@ public static InputStream convertStringToInputStream(String input) {
4643
.build(logger);
4744
}
4845
}
46+
*/
4947

5048
/**
5149
* Creates a {@link JsonLoaderImpl} for use in JSON conversion UDFs.

exec/java-exec/src/test/java/org/apache/drill/exec/store/json/TestJsonConversionUDF.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,20 @@ public static void setup() throws Exception {
5151
}
5252

5353
@Test
54-
public void testConvertFromJsonFunctionWithBinaryInput() throws Exception {
54+
public void testConvertFromJsonVarBinary() throws Exception {
5555
client.alterSession(ExecConstants.JSON_READER_NAN_INF_NUMBERS, true);
5656
String sql = "SELECT string_binary(convert_toJSON(convert_fromJSON(columns[1]))) as col FROM cp.`jsoninput/nan_test.csv`";
5757
RowSet results = client.queryBuilder().sql(sql).rowSet();
5858
assertEquals("Query result must contain 1 row", 1, results.rowCount());
59-
60-
results.print();
59+
results.clear();
6160
}
6261

6362
@Test
64-
public void testConvertFromJSONWithStringInput() throws Exception {
63+
public void testConvertFromJsonVarChar() throws Exception {
6564
// String sql = "SELECT *, convert_FromJSON('{\"foo\":\"bar\"}') FROM cp.`jsoninput/allTypes.csv`";
6665
String sql = "SELECT convert_FromJSON('{\"foo\":\"bar\"}') FROM (VALUES(1))";
6766
RowSet results = client.queryBuilder().sql(sql).rowSet();
68-
results.print();
67+
results.clear();
6968
}
7069

7170
/*

0 commit comments

Comments
 (0)