From 14d4a6e08b3c05728e13f17051abefc016eb7a0e Mon Sep 17 00:00:00 2001 From: l00657083 Date: Thu, 13 Jun 2024 14:56:19 +0800 Subject: [PATCH 1/2] fix null as string --- .../expression/OmniExpressionAdaptor.scala | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/omnioperator/omniop-spark-extension/java/src/main/scala/com/huawei/boostkit/spark/expression/OmniExpressionAdaptor.scala b/omnioperator/omniop-spark-extension/java/src/main/scala/com/huawei/boostkit/spark/expression/OmniExpressionAdaptor.scala index cfc95ae37..b6c0cad54 100644 --- a/omnioperator/omniop-spark-extension/java/src/main/scala/com/huawei/boostkit/spark/expression/OmniExpressionAdaptor.scala +++ b/omnioperator/omniop-spark-extension/java/src/main/scala/com/huawei/boostkit/spark/expression/OmniExpressionAdaptor.scala @@ -77,7 +77,8 @@ object OmniExpressionAdaptor extends Logging { private def unsupportedCastCheck(expr: Expression, cast: CastBase): Unit = { def doSupportCastToString(dataType: DataType): Boolean = { if (dataType.isInstanceOf[DecimalType] || dataType.isInstanceOf[StringType] || dataType.isInstanceOf[IntegerType] - || dataType.isInstanceOf[LongType] || dataType.isInstanceOf[DateType] || dataType.isInstanceOf[DoubleType]) { + || dataType.isInstanceOf[LongType] || dataType.isInstanceOf[DateType] || dataType.isInstanceOf[DoubleType] + || dataType.isInstanceOf[NullType]) { true } else { false @@ -287,19 +288,26 @@ object OmniExpressionAdaptor extends Logging { // Cast case cast: CastBase => unsupportedCastCheck(expr, cast) - cast.dataType match { - case StringType => - new JSONObject().put("exprType", "FUNCTION") - .addOmniExpJsonType("returnType", cast.dataType) - .put("width", 50) - .put("function_name", "CAST") - .put("arguments", new JSONArray().put(rewriteToOmniJsonExpressionLiteralJsonObject(cast.child, exprsIndexMap))) - + cast.child.dataType match { + case NullType => + new JSONObject().put("exprType", "LITERAL") + .addOmniExpJsonType("dataType", cast.dataType) + .put("isNull", true) case _ => - new JSONObject().put("exprType", "FUNCTION") - .addOmniExpJsonType("returnType", cast.dataType) - .put("function_name", "CAST") - .put("arguments", new JSONArray().put(rewriteToOmniJsonExpressionLiteralJsonObject(cast.child, exprsIndexMap))) + cast.dataType match { + case StringType => + new JSONObject().put("exprType", "FUNCTION") + .addOmniExpJsonType("returnType", cast.dataType) + .put("width", 50) + .put("function_name", "CAST") + .put("arguments", new JSONArray().put(rewriteToOmniJsonExpressionLiteralJsonObject(cast.child, exprsIndexMap))) + + case _ => + new JSONObject().put("exprType", "FUNCTION") + .addOmniExpJsonType("returnType", cast.dataType) + .put("function_name", "CAST") + .put("arguments", new JSONArray().put(rewriteToOmniJsonExpressionLiteralJsonObject(cast.child, exprsIndexMap))) + } } // Abs -- Gitee From 715650cee904d2778bbe8c78b2ef0cdb3ca9c7fd Mon Sep 17 00:00:00 2001 From: l00657083 Date: Fri, 14 Jun 2024 14:39:47 +0800 Subject: [PATCH 2/2] fix null as string --- .../expression/OmniExpressionAdaptor.scala | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/omnioperator/omniop-spark-extension/java/src/main/scala/com/huawei/boostkit/spark/expression/OmniExpressionAdaptor.scala b/omnioperator/omniop-spark-extension/java/src/main/scala/com/huawei/boostkit/spark/expression/OmniExpressionAdaptor.scala index b6c0cad54..3b0e01240 100644 --- a/omnioperator/omniop-spark-extension/java/src/main/scala/com/huawei/boostkit/spark/expression/OmniExpressionAdaptor.scala +++ b/omnioperator/omniop-spark-extension/java/src/main/scala/com/huawei/boostkit/spark/expression/OmniExpressionAdaptor.scala @@ -76,22 +76,14 @@ object OmniExpressionAdaptor extends Logging { private def unsupportedCastCheck(expr: Expression, cast: CastBase): Unit = { def doSupportCastToString(dataType: DataType): Boolean = { - if (dataType.isInstanceOf[DecimalType] || dataType.isInstanceOf[StringType] || dataType.isInstanceOf[IntegerType] - || dataType.isInstanceOf[LongType] || dataType.isInstanceOf[DateType] || dataType.isInstanceOf[DoubleType] - || dataType.isInstanceOf[NullType]) { - true - } else { - false - } + dataType.isInstanceOf[DecimalType] || dataType.isInstanceOf[StringType] || dataType.isInstanceOf[IntegerType] || + dataType.isInstanceOf[LongType] || dataType.isInstanceOf[DateType] || dataType.isInstanceOf[DoubleType] || + dataType.isInstanceOf[NullType] } def doSupportCastFromString(dataType: DataType): Boolean = { - if (dataType.isInstanceOf[DecimalType] || dataType.isInstanceOf[StringType] || dataType.isInstanceOf[DateType] - || dataType.isInstanceOf[IntegerType] || dataType.isInstanceOf[LongType] || dataType.isInstanceOf[DoubleType]) { - true - } else { - false - } + dataType.isInstanceOf[DecimalType] || dataType.isInstanceOf[StringType] || dataType.isInstanceOf[DateType] || + dataType.isInstanceOf[IntegerType] || dataType.isInstanceOf[LongType] || dataType.isInstanceOf[DoubleType] } // support cast(decimal/string/int/long as string) -- Gitee