MCPcopy Create free account
hub / github.com/LadybugDB/ladybug / evaluateLiteral

Method evaluateLiteral

src/binder/expression/expression_util.cpp:490–518  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

488
489template<typename T>
490T ExpressionUtil::evaluateLiteral(main::ClientContext* context,
491 std::shared_ptr<Expression> expression, const common::LogicalType& type,
492 validate_param_func<T> validateParamFunc) {
493 if (!canEvaluateAsLiteral(*expression)) {
494 std::string errMsg;
495 switch (expression->expressionType) {
496 case ExpressionType::PARAMETER: {
497 errMsg = std::format(
498 "The expression: '{}' is a parameter expression. Please assign it a value.",
499 expression->toString());
500 } break;
501 default: {
502 errMsg = std::format("The expression: '{}' must be a parameter/literal expression.",
503 expression->toString());
504 ;
505 } break;
506 }
507 throw RuntimeException{errMsg};
508 }
509 if (expression->getDataType() != type) {
510 binder::Binder binder{context};
511 auto literalExpr = std::make_shared<LiteralExpression>(
512 ExpressionUtil::evaluateAsLiteralValue(*expression), expression->getUniqueName());
513 expression = binder.getExpressionBinder()->implicitCast(literalExpr, type.copy());
514 expression = binder.getExpressionBinder()->foldExpression(expression);
515 }
516 auto value = evaluateAsLiteralValue(*expression);
517 return getExpressionVal(*expression, value, type, validateParamFunc);
518}
519
520std::shared_ptr<Expression> ExpressionUtil::applyImplicitCastingIfNecessary(
521 main::ClientContext* context, std::shared_ptr<Expression> expr,

Callers

nothing calls this directly

Calls 7

getDataTypeMethod · 0.80
implicitCastMethod · 0.80
getExpressionBinderMethod · 0.80
foldExpressionMethod · 0.80
toStringMethod · 0.45
getUniqueNameMethod · 0.45
copyMethod · 0.45

Tested by

no test coverage detected