Skip to content

Commit

Permalink
add literal validate
Browse files Browse the repository at this point in the history
  • Loading branch information
zhejiangxiaomai committed Apr 14, 2023
1 parent 4ad47c1 commit 1091f5b
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 15 deletions.
31 changes: 22 additions & 9 deletions velox/substrait/SubstraitToVeloxPlanValidator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ bool SubstraitToVeloxPlanValidator::validateInputTypes(
}

bool SubstraitToVeloxPlanValidator::validateRound(
const ::substrait::Expression::ScalarFunction& scalarFunction,
const RowTypePtr& inputType) {
const ::substrait::Expression::ScalarFunction& scalarFunction,
const RowTypePtr& inputType) {
const auto& arguments = scalarFunction.arguments();
if (arguments.size() < 2) {
return false;
Expand All @@ -68,30 +68,42 @@ bool SubstraitToVeloxPlanValidator::validateRound(
case ::substrait::Expression_Literal::LiteralTypeCase::kI64:
return (arguments[1].value().literal().i64() >= 0);
default:
VELOX_NYI("Round scale validation is not supported for type case '{}'", typeCase);
VELOX_NYI(
"Round scale validation is not supported for type case '{}'",
typeCase);
}
}

bool SubstraitToVeloxPlanValidator::validateScalarFunction(
const ::substrait::Expression::ScalarFunction& scalarFunction,
const RowTypePtr& inputType) {
const auto& veloxFunction =
subParser_->findVeloxFunction(
planConverter_->getFunctionMap(), scalarFunction.function_reference());
const auto& veloxFunction = subParser_->findVeloxFunction(
planConverter_->getFunctionMap(), scalarFunction.function_reference());
if (veloxFunction == "round") {
return validateRound(scalarFunction, inputType);
}
return true;
}

bool SubstraitToVeloxPlanValidator::validateLiteral(
const ::substrait::Expression_Literal& literal,
const RowTypePtr& inputType) {
if (literal.has_list() && literal.list().values_size() == 0) {
return false;
}
return true;
}

bool SubstraitToVeloxPlanValidator::validateExpression(
const ::substrait::Expression& expression,
const RowTypePtr& inputType) {
std::shared_ptr<const core::ITypedExpr> veloxExpr;
std::shared_ptr<const core::ITypedExpr> veloxExpr;
auto typeCase = expression.rex_type_case();
switch (typeCase) {
case ::substrait::Expression::RexTypeCase::kScalarFunction:
return validateScalarFunction(expression.scalar_function(), inputType);
case ::substrait::Expression::RexTypeCase::kLiteral:
return validateLiteral(expression.literal(), inputType);
default:
return true;
}
Expand Down Expand Up @@ -245,8 +257,9 @@ bool SubstraitToVeloxPlanValidator::validate(
windowFunction.window_type());
}

bool boundTypeSupported = validateBoundType(windowFunction.upper_bound()) &&
validateBoundType(windowFunction.lower_bound());
bool boundTypeSupported =
validateBoundType(windowFunction.upper_bound()) &&
validateBoundType(windowFunction.lower_bound());
if (!boundTypeSupported) {
return false;
}
Expand Down
17 changes: 11 additions & 6 deletions velox/substrait/SubstraitToVeloxPlanValidator.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,18 +93,23 @@ class SubstraitToVeloxPlanValidator {

/// Validate the round scalar function.
bool validateRound(
const ::substrait::Expression::ScalarFunction& scalarFunction,
const RowTypePtr& inputType);
const ::substrait::Expression::ScalarFunction& scalarFunction,
const RowTypePtr& inputType);

/// Validate Substrait scarlar function.
bool validateScalarFunction(
const ::substrait::Expression::ScalarFunction& scalarFunction,
const RowTypePtr& inputType);
const ::substrait::Expression::ScalarFunction& scalarFunction,
const RowTypePtr& inputType);

/// Validate Substrait expression.
bool validateExpression(
const ::substrait::Expression& expression,
const RowTypePtr& inputType);
const ::substrait::Expression& expression,
const RowTypePtr& inputType);

/// Validate Substrait literal.
bool validateLiteral(
const ::substrait::Expression_Literal& literal,
const RowTypePtr& inputType);
};

} // namespace facebook::velox::substrait

0 comments on commit 1091f5b

Please sign in to comment.