| 591 | |
| 592 | |
| 593 | inline static void |
| 594 | WriteBsonSqlValue(Datum fieldValue, pgbson_element_writer *writer) |
| 595 | { |
| 596 | /* extract the bson. */ |
| 597 | pgbson *nestedBson = DatumGetPgBson(fieldValue); |
| 598 | |
| 599 | /* if it's a single value bson ({ "": <value> }) */ |
| 600 | /* then write the *value* as a child element. */ |
| 601 | pgbsonelement element; |
| 602 | bool isSingleElement = TryGetSinglePgbsonElementFromPgbson(nestedBson, &element); |
| 603 | if (isSingleElement && element.pathLength == 0) |
| 604 | { |
| 605 | PgbsonElementWriterWriteValue(writer, &element.bsonValue); |
| 606 | } |
| 607 | else |
| 608 | { |
| 609 | /* if it's not a single value element, treat it as a nested object. */ |
| 610 | pgbson_writer childWriter; |
| 611 | bson_iter_t childIter; |
| 612 | PgbsonElementWriterStartDocument(writer, &childWriter); |
| 613 | PgbsonInitIterator(nestedBson, &childIter); |
| 614 | while (bson_iter_next(&childIter)) |
| 615 | { |
| 616 | PgbsonWriterAppendValue(&childWriter, bson_iter_key(&childIter), |
| 617 | bson_iter_key_len(&childIter), bson_iter_value( |
| 618 | &childIter)); |
| 619 | } |
| 620 | |
| 621 | PgbsonElementWriterEndDocument(writer, &childWriter); |
| 622 | } |
| 623 | } |
| 624 | |
| 625 | |
| 626 | /* |
no test coverage detected