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

Function GetPromotionGraph

cpp/src/arrow/json/converter.cc:321–380  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

319}
320
321const PromotionGraph* GetPromotionGraph() {
322 static struct : PromotionGraph {
323 std::shared_ptr<Field> Null(const std::string& name) const override {
324 return field(name, null(), true, Kind::Tag(Kind::kNull));
325 }
326
327 std::shared_ptr<DataType> Infer(
328 const std::shared_ptr<Field>& unexpected_field) const override {
329 auto kind = Kind::FromTag(unexpected_field->metadata());
330 switch (kind) {
331 case Kind::kNull:
332 return null();
333
334 case Kind::kBoolean:
335 return boolean();
336
337 case Kind::kNumber:
338 return int64();
339
340 case Kind::kString:
341 return timestamp(TimeUnit::SECOND);
342
343 case Kind::kArray: {
344 const auto& type = checked_cast<const ListType&>(*unexpected_field->type());
345 auto value_field = type.value_field();
346 return list(value_field->WithType(Infer(value_field)));
347 }
348 case Kind::kObject: {
349 auto fields = unexpected_field->type()->fields();
350 for (auto& field : fields) {
351 field = field->WithType(Infer(field));
352 }
353 return struct_(std::move(fields));
354 }
355 default:
356 return nullptr;
357 }
358 }
359
360 std::shared_ptr<DataType> Promote(
361 const std::shared_ptr<DataType>& failed,
362 const std::shared_ptr<Field>& unexpected_field) const override {
363 switch (failed->id()) {
364 case Type::NA:
365 return Infer(unexpected_field);
366
367 case Type::TIMESTAMP:
368 return utf8();
369
370 case Type::INT64:
371 return float64();
372
373 default:
374 return nullptr;
375 }
376 }
377 } impl;
378

Callers 2

SetParseOptionsMethod · 0.85
TESTFunction · 0.85

Calls

no outgoing calls

Tested by 1

TESTFunction · 0.68