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]

Reply via email to