This is an automated email from the ASF dual-hosted git repository.
marong pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-gluten.git
The following commit(s) were added to refs/heads/main by this push:
new a1e0367e9 [GLUTEN-5003][VL] Fix Null literal fallback (#5004)
a1e0367e9 is described below
commit a1e0367e9d129cc5f9ca30f596819d1546a9a1fd
Author: WangGuangxin <[email protected]>
AuthorDate: Tue Mar 19 10:51:02 2024 +0800
[GLUTEN-5003][VL] Fix Null literal fallback (#5004)
---
.../scala/io/glutenproject/execution/VeloxLiteralSuite.scala | 6 +++---
cpp/velox/substrait/SubstraitParser.cc | 5 +++++
cpp/velox/substrait/SubstraitToVeloxExpr.cc | 11 +++++------
cpp/velox/substrait/SubstraitToVeloxExpr.h | 1 -
4 files changed, 13 insertions(+), 10 deletions(-)
diff --git
a/backends-velox/src/test/scala/io/glutenproject/execution/VeloxLiteralSuite.scala
b/backends-velox/src/test/scala/io/glutenproject/execution/VeloxLiteralSuite.scala
index d625b8078..557681558 100644
---
a/backends-velox/src/test/scala/io/glutenproject/execution/VeloxLiteralSuite.scala
+++
b/backends-velox/src/test/scala/io/glutenproject/execution/VeloxLiteralSuite.scala
@@ -115,6 +115,9 @@ class VeloxLiteralSuite extends
VeloxWholeStageTransformerSuite {
validateOffloadResult("SELECT struct('Spark', cast(null as int))")
validateOffloadResult("SELECT struct(cast(null as decimal))")
validateOffloadResult("SELECT map('b', 'a', 'e', null)")
+ validateOffloadResult("SELECT array(null)")
+ validateOffloadResult("SELECT array(cast(null as int))")
+ validateOffloadResult("SELECT map(1, null)")
}
test("Scalar Type Literal") {
@@ -132,9 +135,6 @@ class VeloxLiteralSuite extends
VeloxWholeStageTransformerSuite {
}
test("Literal Fallback") {
- validateFallbackResult("SELECT array(null)")
- validateFallbackResult("SELECT array(cast(null as int))")
- validateFallbackResult("SELECT map(1, null)")
validateFallbackResult("SELECT struct(cast(null as struct<a: string>))")
}
}
diff --git a/cpp/velox/substrait/SubstraitParser.cc
b/cpp/velox/substrait/SubstraitParser.cc
index 35f130076..ce6a532ef 100644
--- a/cpp/velox/substrait/SubstraitParser.cc
+++ b/cpp/velox/substrait/SubstraitParser.cc
@@ -294,6 +294,11 @@ T SubstraitParser::getLiteralValue(const
::substrait::Expression::Literal& /* li
VELOX_NYI();
}
+template <>
+std::shared_ptr<void> gluten::SubstraitParser::getLiteralValue(const
substrait::Expression_Literal& literal) {
+ return nullptr;
+}
+
template <>
facebook::velox::UnknownValue gluten::SubstraitParser::getLiteralValue(const
substrait::Expression_Literal& literal) {
return UnknownValue();
diff --git a/cpp/velox/substrait/SubstraitToVeloxExpr.cc
b/cpp/velox/substrait/SubstraitToVeloxExpr.cc
index 4071c1b01..fd68be16e 100644
--- a/cpp/velox/substrait/SubstraitToVeloxExpr.cc
+++ b/cpp/velox/substrait/SubstraitToVeloxExpr.cc
@@ -395,7 +395,7 @@ ArrayVectorPtr
SubstraitVeloxExprConverter::literalsToArrayVector(const ::substr
VELOX_CHECK_GT(childSize, 0, "there should be at least 1 value in list
literal.");
auto childLiteral = literal.list().values(0);
auto elementAtFunc = [&](vector_size_t idx) { return
literal.list().values(idx); };
- auto childVector = literalsToVector(childLiteral, childSize, literal,
elementAtFunc);
+ auto childVector = literalsToVector(childLiteral, childSize, elementAtFunc);
return makeArrayVector(childVector);
}
@@ -406,22 +406,21 @@ MapVectorPtr
SubstraitVeloxExprConverter::literalsToMapVector(const ::substrait:
auto& valueLiteral = literal.map().key_values(0).value();
auto keyAtFunc = [&](vector_size_t idx) { return
literal.map().key_values(idx).key(); };
auto valueAtFunc = [&](vector_size_t idx) { return
literal.map().key_values(idx).value(); };
- auto keyVector = literalsToVector(keyLiteral, childSize, literal, keyAtFunc);
- auto valueVector = literalsToVector(valueLiteral, childSize, literal,
valueAtFunc);
+ auto keyVector = literalsToVector(keyLiteral, childSize, keyAtFunc);
+ auto valueVector = literalsToVector(valueLiteral, childSize, valueAtFunc);
return makeMapVector(keyVector, valueVector);
}
VectorPtr SubstraitVeloxExprConverter::literalsToVector(
const ::substrait::Expression::Literal& childLiteral,
vector_size_t childSize,
- const ::substrait::Expression::Literal& literal,
std::function<::substrait::Expression::Literal(vector_size_t /* idx */)>
elementAtFunc) {
auto childTypeCase = childLiteral.literal_type_case();
switch (childTypeCase) {
case ::substrait::Expression_Literal::LiteralTypeCase::kNull: {
- auto veloxType = SubstraitParser::parseType(literal.null());
+ auto veloxType = SubstraitParser::parseType(childLiteral.null());
auto kind = veloxType->kind();
- return VELOX_DYNAMIC_SCALAR_TYPE_DISPATCH(constructFlatVector, kind,
elementAtFunc, childSize, veloxType, pool_);
+ return VELOX_DYNAMIC_SCALAR_TYPE_DISPATCH_ALL(constructFlatVector, kind,
elementAtFunc, childSize, veloxType, pool_);
}
case
::substrait::Expression_Literal::LiteralTypeCase::kIntervalDayToSecond:
return constructFlatVector<TypeKind::BIGINT>(elementAtFunc, childSize,
INTERVAL_DAY_TIME(), pool_);
diff --git a/cpp/velox/substrait/SubstraitToVeloxExpr.h
b/cpp/velox/substrait/SubstraitToVeloxExpr.h
index 5699093b8..619d8c31c 100644
--- a/cpp/velox/substrait/SubstraitToVeloxExpr.h
+++ b/cpp/velox/substrait/SubstraitToVeloxExpr.h
@@ -93,7 +93,6 @@ class SubstraitVeloxExprConverter {
VectorPtr literalsToVector(
const ::substrait::Expression::Literal& childLiteral,
vector_size_t childSize,
- const ::substrait::Expression::Literal& literal,
std::function<::substrait::Expression::Literal(vector_size_t /* idx */)>
elementAtFunc);
RowVectorPtr literalsToRowVector(const ::substrait::Expression::Literal&
structLiteral);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]