Skip to content

Commit 6d1373e

Browse files
committed
Correct the handling of UDT in CalciteScriptEngine by substituting calcite's type factory with OpenSearchTypeFactory
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
1 parent b9d9a61 commit 6d1373e

3 files changed

Lines changed: 3 additions & 25 deletions

File tree

opensearch/src/main/java/org/opensearch/sql/opensearch/storage/script/CalciteScriptEngine.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import org.opensearch.script.ScriptContext;
8080
import org.opensearch.script.ScriptEngine;
8181
import org.opensearch.search.lookup.SourceLookup;
82+
import org.opensearch.sql.calcite.utils.OpenSearchTypeFactory;
8283
import org.opensearch.sql.data.model.ExprTimestampValue;
8384
import org.opensearch.sql.data.type.ExprCoreType;
8485
import org.opensearch.sql.data.type.ExprType;
@@ -128,8 +129,7 @@ public <T> T compile(
128129
Map<String, ExprType> fieldTypes =
129130
(Map<String, ExprType>) objectMap.get(RelJsonSerializer.FIELD_TYPES);
130131

131-
JavaTypeFactoryImpl typeFactory =
132-
new JavaTypeFactoryImpl(relJsonSerializer.getCluster().getTypeFactory().getTypeSystem());
132+
JavaTypeFactory typeFactory = OpenSearchTypeFactory.TYPE_FACTORY;
133133
RexToLixTranslator.InputGetter getter = new ScriptInputGetter(typeFactory, rowType, fieldTypes);
134134
String code =
135135
CalciteScriptEngine.translate(

opensearch/src/main/java/org/opensearch/sql/opensearch/storage/serde/ExtendedRelJson.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,6 @@ public static ExtendedRelJson create(JsonBuilder jsonBuilder) {
4242
return super.toJson(value);
4343
}
4444

45-
/**
46-
* Jsonify an Object to string. When udtAsString is set, user-defined types are serialized to
47-
* string types.
48-
*/
49-
public @Nullable Object toJson(@Nullable Object value, boolean udtAsString) {
50-
if (udtAsString) {
51-
return super.toJson(value);
52-
}
53-
return toJson(value);
54-
}
55-
5645
private Object toJson(RelDataTypeField node) {
5746
final Map<String, @Nullable Object> map;
5847
if (node.getType().isStruct()) {

opensearch/src/main/java/org/opensearch/sql/opensearch/storage/serde/RelJsonSerializer.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@
1919
import org.apache.calcite.plan.RelOptCluster;
2020
import org.apache.calcite.rel.externalize.RelJson;
2121
import org.apache.calcite.rel.type.RelDataType;
22-
import org.apache.calcite.rex.RexCall;
2322
import org.apache.calcite.rex.RexNode;
24-
import org.apache.calcite.sql.SqlBinaryOperator;
2523
import org.apache.calcite.sql.SqlOperatorTable;
2624
import org.apache.calcite.sql.fun.SqlLibrary;
2725
import org.apache.calcite.sql.fun.SqlLibraryOperatorTableFactory;
@@ -86,16 +84,7 @@ public String serialize(RexNode rexNode, RelDataType rowType, Map<String, ExprTy
8684
JsonBuilder jsonBuilder = new JsonBuilder();
8785
RelJson relJson = ExtendedRelJson.create(jsonBuilder);
8886
String rexNodeJson = jsonBuilder.toJsonString(relJson.toJson(rexNode));
89-
Object rowTypeJsonObj;
90-
// UDTs are not comparable when pushed-down as scripts. We set their types to strings as a
91-
// workaround. Refer to this comment for more details:
92-
// https://github.com/opensearch-project/sql/pull/4245#issuecomment-3268673999
93-
if (rexNode instanceof RexCall
94-
&& ((RexCall) rexNode).getOperator() instanceof SqlBinaryOperator) {
95-
rowTypeJsonObj = ((ExtendedRelJson) relJson).toJson(rowType, true);
96-
} else {
97-
rowTypeJsonObj = relJson.toJson(rowType);
98-
}
87+
Object rowTypeJsonObj = relJson.toJson(rowType);
9988
String rowTypeJson = jsonBuilder.toJsonString(rowTypeJsonObj);
10089
// Construct envelope of serializable objects
10190
Map<String, Object> envelope =

0 commit comments

Comments
 (0)