basic version of coalesce function

This commit is contained in:
2022-03-08 17:35:08 +01:00
parent 056b45c831
commit 038d891db5
6 changed files with 56 additions and 22 deletions

View File

@@ -34,6 +34,13 @@ std::unique_ptr<ValueNode> USql::date_add_function(const std::vector<std::unique
}
std::unique_ptr<ValueNode> USql::lower_function(const std::vector<std::unique_ptr<ValueNode>> &evaluatedPars) {
std::string str = evaluatedPars[0]->getStringValue();
std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c) -> unsigned char { return tolower(c); });
return std::make_unique<StringValueNode>(str);
}
std::unique_ptr<ValueNode> USql::upper_function(const std::vector<std::unique_ptr<ValueNode>> &evaluatedPars) {
std::string str = evaluatedPars[0]->getStringValue();
std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c) -> unsigned char { return toupper(c); });
@@ -41,11 +48,21 @@ std::unique_ptr<ValueNode> USql::upper_function(const std::vector<std::unique_pt
return std::make_unique<StringValueNode>(str);
}
std::unique_ptr<ValueNode> USql::lower_function(const std::vector<std::unique_ptr<ValueNode>> &evaluatedPars) {
std::string str = evaluatedPars[0]->getStringValue();
std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c) -> unsigned char { return tolower(c); });
return std::make_unique<StringValueNode>(str);
std::unique_ptr<ValueNode> USql::coalesce_function(const std::vector<std::unique_ptr<ValueNode>> &evaluatedPars) {
for(const auto & par : evaluatedPars) {
if (!par->isNull()) {
// TODO implement rest and take it out as a function
if (par->node_type == NodeType::int_value)
return std::make_unique<IntValueNode>(par->getIntegerValue());
if (par->node_type == NodeType::float_value)
return std::make_unique<DoubleValueNode>(par->getDoubleValue());
if (par->node_type == NodeType::string_value)
return std::make_unique<StringValueNode>(par->getStringValue());
if (par->node_type == NodeType::bool_value)
return std::make_unique<BooleanValueNode>(par->getBooleanValue());
}
}
return std::make_unique<NullValueNode>();
}
std::unique_ptr<ValueNode> USql::pp_function(const std::vector<std::unique_ptr<ValueNode>> &evaluatedPars) {