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

Method AppendNull

cpp/src/arrow/json/parser.cc:532–583  ·  view source on GitHub ↗

Appending null is slightly tricky since null count is stored inline for builders of Kind::kNull. Append nulls using this helper

Source from the content-addressed store, hash-verified

530 /// Appending null is slightly tricky since null count is stored inline
531 /// for builders of Kind::kNull. Append nulls using this helper
532 Status AppendNull(BuilderPtr parent, int field_index, BuilderPtr builder) {
533 if (ARROW_PREDICT_FALSE(!builder.nullable)) {
534 return ParseError("a required field was null");
535 }
536 switch (builder.kind) {
537 case Kind::kNull: {
538 DCHECK_EQ(builder, parent.kind == Kind::kArray
539 ? Cast<Kind::kArray>(parent)->value_builder()
540 : Cast<Kind::kObject>(parent)->field_builder(field_index));
541
542 // increment null count stored inline
543 builder.index += 1;
544
545 // update the parent, since changing builder doesn't affect parent
546 if (parent.kind == Kind::kArray) {
547 Cast<Kind::kArray>(parent)->value_builder(builder);
548 } else {
549 Cast<Kind::kObject>(parent)->field_builder(field_index, builder);
550 }
551 return Status::OK();
552 }
553 case Kind::kBoolean:
554 return Cast<Kind::kBoolean>(builder)->AppendNull();
555
556 case Kind::kNumber:
557 return Cast<Kind::kNumber>(builder)->AppendNull();
558
559 case Kind::kString:
560 return Cast<Kind::kString>(builder)->AppendNull();
561
562 case Kind::kNumberOrString: {
563 return Cast<Kind::kNumberOrString>(builder)->AppendNull();
564 }
565
566 case Kind::kArray:
567 return Cast<Kind::kArray>(builder)->AppendNull();
568
569 case Kind::kObject: {
570 auto struct_builder = Cast<Kind::kObject>(builder);
571 RETURN_NOT_OK(struct_builder->AppendNull());
572
573 for (int i = 0; i < struct_builder->num_fields(); ++i) {
574 auto field_builder = struct_builder->field_builder(i);
575 RETURN_NOT_OK(AppendNull(builder, i, field_builder));
576 }
577 return Status::OK();
578 }
579
580 default:
581 return Status::NotImplemented("invalid builder Kind");
582 }
583 }
584
585 Status Finish(const std::shared_ptr<Array>& scalar_values, BuilderPtr builder,
586 std::shared_ptr<Array>* out) {

Callers

nothing calls this directly

Calls 8

field_builderMethod · 0.80
ParseErrorFunction · 0.70
OKFunction · 0.70
AppendNullFunction · 0.50
NotImplementedFunction · 0.50
value_builderMethod · 0.45
AppendNullMethod · 0.45
num_fieldsMethod · 0.45

Tested by

no test coverage detected