in gandiva/src/main/cpp/jni_common.cc [354:418]
NodePtr ProtoTypeToInNode(const gandiva::types::InNode& node) {
NodePtr field = ProtoTypeToNode(node.node());
if (node.has_intvalues()) {
std::unordered_set<int32_t> int_values;
for (int i = 0; i < node.intvalues().intvalues_size(); i++) {
int_values.insert(node.intvalues().intvalues(i).value());
}
return TreeExprBuilder::MakeInExpressionInt32(field, int_values);
}
if (node.has_longvalues()) {
std::unordered_set<int64_t> long_values;
for (int i = 0; i < node.longvalues().longvalues_size(); i++) {
long_values.insert(node.longvalues().longvalues(i).value());
}
return TreeExprBuilder::MakeInExpressionInt64(field, long_values);
}
if (node.has_decimalvalues()) {
std::unordered_set<gandiva::DecimalScalar128> decimal_values;
for (int i = 0; i < node.decimalvalues().decimalvalues_size(); i++) {
decimal_values.insert(
gandiva::DecimalScalar128(node.decimalvalues().decimalvalues(i).value(),
node.decimalvalues().decimalvalues(i).precision(),
node.decimalvalues().decimalvalues(i).scale()));
}
return TreeExprBuilder::MakeInExpressionDecimal(field, decimal_values);
}
if (node.has_floatvalues()) {
std::unordered_set<float> float_values;
for (int i = 0; i < node.floatvalues().floatvalues_size(); i++) {
float_values.insert(node.floatvalues().floatvalues(i).value());
}
return TreeExprBuilder::MakeInExpressionFloat(field, float_values);
}
if (node.has_doublevalues()) {
std::unordered_set<double> double_values;
for (int i = 0; i < node.doublevalues().doublevalues_size(); i++) {
double_values.insert(node.doublevalues().doublevalues(i).value());
}
return TreeExprBuilder::MakeInExpressionDouble(field, double_values);
}
if (node.has_stringvalues()) {
std::unordered_set<std::string> stringvalues;
for (int i = 0; i < node.stringvalues().stringvalues_size(); i++) {
stringvalues.insert(node.stringvalues().stringvalues(i).value());
}
return TreeExprBuilder::MakeInExpressionString(field, stringvalues);
}
if (node.has_binaryvalues()) {
std::unordered_set<std::string> stringvalues;
for (int i = 0; i < node.binaryvalues().binaryvalues_size(); i++) {
stringvalues.insert(node.binaryvalues().binaryvalues(i).value());
}
return TreeExprBuilder::MakeInExpressionBinary(field, stringvalues);
}
// not supported yet.
std::cerr << "Unknown constant type for in expression.\n";
return nullptr;
}