in gandiva/src/main/cpp/jni_common.cc [430:495]
NodePtr ProtoTypeToNode(const gandiva::types::TreeNode& node) {
if (node.has_fieldnode()) {
return ProtoTypeToFieldNode(node.fieldnode());
}
if (node.has_fnnode()) {
return ProtoTypeToFnNode(node.fnnode());
}
if (node.has_ifnode()) {
return ProtoTypeToIfNode(node.ifnode());
}
if (node.has_andnode()) {
return ProtoTypeToAndNode(node.andnode());
}
if (node.has_ornode()) {
return ProtoTypeToOrNode(node.ornode());
}
if (node.has_innode()) {
return ProtoTypeToInNode(node.innode());
}
if (node.has_nullnode()) {
return ProtoTypeToNullNode(node.nullnode());
}
if (node.has_intnode()) {
return TreeExprBuilder::MakeLiteral(node.intnode().value());
}
if (node.has_floatnode()) {
return TreeExprBuilder::MakeLiteral(node.floatnode().value());
}
if (node.has_longnode()) {
return TreeExprBuilder::MakeLiteral(node.longnode().value());
}
if (node.has_booleannode()) {
return TreeExprBuilder::MakeLiteral(node.booleannode().value());
}
if (node.has_doublenode()) {
return TreeExprBuilder::MakeLiteral(node.doublenode().value());
}
if (node.has_stringnode()) {
return TreeExprBuilder::MakeStringLiteral(node.stringnode().value());
}
if (node.has_binarynode()) {
return TreeExprBuilder::MakeBinaryLiteral(node.binarynode().value());
}
if (node.has_decimalnode()) {
std::string value = node.decimalnode().value();
gandiva::DecimalScalar128 literal(value, node.decimalnode().precision(),
node.decimalnode().scale());
return TreeExprBuilder::MakeDecimalLiteral(literal);
}
std::cerr << "Unknown node type in protobuf\n";
return nullptr;
}