MCPcopy Create free account
hub / github.com/apache/arrow / DatumToLiterals

Function DatumToLiterals

cpp/src/arrow/engine/substrait/expression_internal.cc:1294–1341  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1292}
1293
1294Result<std::vector<std::unique_ptr<substrait::Expression>>> DatumToLiterals(
1295 const Datum& datum, ExtensionSet* ext_set,
1296 const ConversionOptions& conversion_options) {
1297 std::vector<std::unique_ptr<substrait::Expression>> literals;
1298
1299 auto ScalarToLiteralExpr = [&](const std::shared_ptr<Scalar>& scalar)
1300 -> Result<std::unique_ptr<substrait::Expression>> {
1301 ARROW_ASSIGN_OR_RAISE(std::unique_ptr<substrait::Expression::Literal> literal,
1302 ToProto(scalar, ext_set, conversion_options));
1303 auto literal_expr = std::make_unique<substrait::Expression>();
1304 literal_expr->set_allocated_literal(literal.release());
1305 return literal_expr;
1306 };
1307
1308 switch (datum.kind()) {
1309 case Datum::Kind::SCALAR: {
1310 ARROW_ASSIGN_OR_RAISE(auto literal_expr, ScalarToLiteralExpr(datum.scalar()));
1311 literals.push_back(std::move(literal_expr));
1312 break;
1313 }
1314 case Datum::Kind::ARRAY: {
1315 std::shared_ptr<Array> values = datum.make_array();
1316 for (int64_t i = 0; i < values->length(); i++) {
1317 ARROW_ASSIGN_OR_RAISE(std::shared_ptr<Scalar> scalar, values->GetScalar(i));
1318 ARROW_ASSIGN_OR_RAISE(auto literal_expr, ScalarToLiteralExpr(scalar));
1319 literals.push_back(std::move(literal_expr));
1320 }
1321 break;
1322 }
1323 case Datum::Kind::CHUNKED_ARRAY: {
1324 std::shared_ptr<ChunkedArray> values = datum.chunked_array();
1325 for (const auto& chunk : values->chunks()) {
1326 for (int64_t i = 0; i < chunk->length(); i++) {
1327 ARROW_ASSIGN_OR_RAISE(std::shared_ptr<Scalar> scalar, chunk->GetScalar(i));
1328 ARROW_ASSIGN_OR_RAISE(auto literal_expr, ScalarToLiteralExpr(scalar));
1329 literals.push_back(std::move(literal_expr));
1330 }
1331 }
1332 break;
1333 }
1334 case Datum::Kind::RECORD_BATCH:
1335 case Datum::Kind::TABLE:
1336 case Datum::Kind::NONE:
1337 return Status::Invalid("Expected a literal or an array of literals, got ",
1338 datum.ToString());
1339 }
1340 return literals;
1341}
1342
1343} // namespace
1344

Callers 1

ToProtoFunction · 0.85

Calls 12

push_backMethod · 0.80
make_arrayMethod · 0.80
chunked_arrayMethod · 0.80
ARROW_ASSIGN_OR_RAISEFunction · 0.70
ToProtoFunction · 0.70
InvalidFunction · 0.50
releaseMethod · 0.45
kindMethod · 0.45
lengthMethod · 0.45
GetScalarMethod · 0.45
chunksMethod · 0.45
ToStringMethod · 0.45

Tested by

no test coverage detected