| 819 | } |
| 820 | |
| 821 | JSONCONS_VISITOR_RETURN_TYPE visit_null(semantic_tag, const ser_context&, std::error_code&) override |
| 822 | { |
| 823 | JSONCONS_ASSERT(!stack_.empty()); |
| 824 | switch (stack_.back().item_kind_) |
| 825 | { |
| 826 | case stack_item_kind::flat_object: |
| 827 | case stack_item_kind::object: |
| 828 | { |
| 829 | if (stack_[0].count_ == 0) |
| 830 | { |
| 831 | if (!has_column_mapping_) |
| 832 | { |
| 833 | string_type str = stack_.back().column_path_; |
| 834 | column_paths_.emplace_back(str); |
| 835 | column_path_value_map_.emplace(std::move(str), string_type{alloc_}); |
| 836 | } |
| 837 | } |
| 838 | auto it = column_path_value_map_.find(stack_.back().column_path_); |
| 839 | if (it != column_path_value_map_.end()) |
| 840 | { |
| 841 | write_null_value(it->second); |
| 842 | } |
| 843 | break; |
| 844 | } |
| 845 | case stack_item_kind::flat_row: |
| 846 | case stack_item_kind::row: |
| 847 | { |
| 848 | append_array_path_component(); |
| 849 | auto it = column_path_value_map_.find(stack_.back().column_path_); |
| 850 | if (it != column_path_value_map_.end()) |
| 851 | { |
| 852 | write_null_value(it->second); |
| 853 | } |
| 854 | break; |
| 855 | } |
| 856 | case stack_item_kind::stream_flat_row: |
| 857 | { |
| 858 | if (stack_.back().count_ > 0) |
| 859 | { |
| 860 | sink_.push_back(field_delimiter_); |
| 861 | } |
| 862 | value_buffer_.clear(); |
| 863 | write_null_value(value_buffer_); |
| 864 | sink_.append(value_buffer_.data(), value_buffer_.size()); |
| 865 | break; |
| 866 | } |
| 867 | case stack_item_kind::column_multivalued_field: |
| 868 | case stack_item_kind::multivalued_field: |
| 869 | case stack_item_kind::stream_multivalued_field: |
| 870 | { |
| 871 | if (!value_buffer_.empty()) |
| 872 | { |
| 873 | value_buffer_.push_back(subfield_delimiter_); |
| 874 | } |
| 875 | write_null_value(value_buffer_); |
| 876 | break; |
| 877 | } |
| 878 | case stack_item_kind::column: |
nothing calls this directly
no test coverage detected