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 1963098a248e2d62bd1f63f89b7a7d842b078e75..636a2f2f38ba4e709182a2e5919528e0dac8a7b2 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 @@ -774,6 +774,11 @@ object OmniExpressionAdaptor extends Logging { .put("precision", dt.precision) .put("scale", dt.scale) } + case DoubleType => + new JSONObject().put("exprType", "LITERAL") + .put("dataType", omniType.toInt) + .put("isNull", false) + .put("value", doubleToString(value)) case _ => new JsonObject().put("exprType", "LITERAL") .put("dataType", omniType.toInt) @@ -782,6 +787,18 @@ object OmniExpressionAdaptor extends Logging { } } + private def doubleToString(value: Any): String = { + val doubleValue = value.asInstanceOf[Number].doubleValue() + if (java.lang.Double.isFinite(doubleValue) || java.lang.Double.isNaN(doubleValue)) { + throw new UnsupportedOperationException("Forbidden numeric value: " + doubleValue) + } + val longValue = value.asInstanceOf[Number].longValue() + if (doubleValue == longValue.toDouble) { + return java.lang.Long.toString(longValue) + } + value.toString + } + def checkFirstParamType(agg: AggregateExpression): Unit = { agg.aggregateFunction.children.map( exp => { diff --git a/omnioperator/omniop-spark-extension/java/src/main/scala/org/apache/spark/sql/execution/joins/ColumnarBroadcastHashJoinExec.scala b/omnioperator/omniop-spark-extension/java/src/main/scala/org/apache/spark/sql/execution/joins/ColumnarBroadcastHashJoinExec.scala index 1f958b998b774c038be16c60335e7a3ce86a28ba..cca636913c4c98905c9000ceb2324ec7d50599a8 100644 --- a/omnioperator/omniop-spark-extension/java/src/main/scala/org/apache/spark/sql/execution/joins/ColumnarBroadcastHashJoinExec.scala +++ b/omnioperator/omniop-spark-extension/java/src/main/scala/org/apache/spark/sql/execution/joins/ColumnarBroadcastHashJoinExec.scala @@ -338,7 +338,7 @@ case class ColumnarBroadcastHashJoinExec( val canShareBuildOp = (lookupJoinType != OMNI_JOIN_TYPE_RIGHT && lookupJoinType != OMNI_JOIN_TYPE_FULL) val buildPlanId = buildPlan match { case exec: BroadcastQueryStageExec => - exec.broadcast.id + exec.plan.id case _ => buildPlan.id }