diff --git a/cpp/src/copying/contiguous_split.cu b/cpp/src/copying/contiguous_split.cu index 783e33547b7..4c3b4eddb8d 100644 --- a/cpp/src/copying/contiguous_split.cu +++ b/cpp/src/copying/contiguous_split.cu @@ -452,7 +452,7 @@ struct buf_info_functor { int offset_stack_pos, int parent_offset_index, int offset_depth, - rmm::cuda_stream_view stream) + rmm::cuda_stream_view) { if (col.nullable()) { std::tie(current, offset_stack_pos) = @@ -495,7 +495,7 @@ std::pair buf_info_functor::operator() struct_to_strings(table_view const& strings_columns, column_view const& column_names, string_view const row_prefix, string_view const row_suffix, - string_view const column_name_separator, string_view const value_separator, string_scalar const& narep, bool include_nulls, @@ -307,7 +305,6 @@ std::unique_ptr join_list_of_strings(lists_column_view const& lists_stri */ auto const offsets = lists_strings.offsets(); auto const strings_children = lists_strings.get_sliced_child(stream); - auto const null_count = lists_strings.null_count(); auto const num_lists = lists_strings.size(); auto const num_strings = strings_children.size(); auto const num_offsets = offsets.size(); @@ -410,7 +407,16 @@ struct column_to_strings_fn { explicit column_to_strings_fn(json_writer_options const& options, rmm::cuda_stream_view stream, rmm::mr::device_memory_resource* mr) - : options_(options), stream_(stream), mr_(mr), narep(options.get_na_rep()) + : options_(options), + stream_(stream), + mr_(mr), + narep(options.get_na_rep(), true, stream), + struct_value_separator(",", true, stream), + struct_row_begin_wrap("{", true, stream), + struct_row_end_wrap("}", true, stream), + list_value_separator(",", true, stream), + list_row_begin_wrap("[", true, stream), + list_row_end_wrap("]", true, stream) { } @@ -503,11 +509,12 @@ struct column_to_strings_fn { column_view const& column) const { auto duration_string = cudf::io::detail::csv::pandas_format_durations(column, stream_, mr_); - auto quotes = make_column_from_scalar(string_scalar{"\""}, column.size(), stream_, mr_); + auto quotes = + make_column_from_scalar(string_scalar{"\"", true, stream_}, column.size(), stream_, mr_); return cudf::strings::detail::concatenate( table_view{{quotes->view(), duration_string->view(), quotes->view()}}, - string_scalar(""), - string_scalar("", false), + string_scalar("", true, stream_), + string_scalar("", false, stream_), strings::separator_on_nulls::YES, stream_, mr_); @@ -545,13 +552,11 @@ struct column_to_strings_fn { column.null_count(), cudf::detail::copy_bitmask(column, stream_, rmm::mr::get_current_device_resource()), stream_); - auto l_pre = string_scalar{"["}, l_post = string_scalar{"]"}, sep = string_scalar{","}, - elem_narep = string_scalar{"null"}; return join_list_of_strings(lists_column_view(*list_child_string), - l_pre.value(stream_), - l_post.value(stream_), - sep.value(stream_), - elem_narep.value(stream_), + list_row_begin_wrap.value(stream_), + list_row_end_wrap.value(stream_), + list_value_separator.value(stream_), + narep.value(stream_), stream_, mr_); } @@ -565,8 +570,10 @@ struct column_to_strings_fn { 0, [&stream = stream_, structs_view = structs_column_view{column}](auto const child_idx) { return structs_view.get_sliced_child(child_idx, stream); }); - auto col_string = operator()( - child_it, child_it + column.num_children(), children_names, row_end_wrap.value(stream_)); + auto col_string = operator()(child_it, + child_it + column.num_children(), + children_names, + struct_row_end_wrap.value(stream_)); col_string->set_null_mask(cudf::detail::copy_bitmask(column, stream_, mr_), column.null_count()); return col_string; @@ -620,10 +627,9 @@ struct column_to_strings_fn { // return struct_to_strings(str_table_view, column_names_view, - row_begin_wrap.value(stream_), + struct_row_begin_wrap.value(stream_), row_end_wrap_value, - column_seperator.value(stream_), - value_seperator.value(stream_), + struct_value_separator.value(stream_), narep, options_.is_enabled_include_nulls(), stream_, @@ -634,11 +640,15 @@ struct column_to_strings_fn { json_writer_options const& options_; rmm::cuda_stream_view stream_; rmm::mr::device_memory_resource* mr_; - string_scalar const column_seperator{":"}; - string_scalar const value_seperator{","}; - string_scalar const row_begin_wrap{"{"}; - string_scalar const row_end_wrap{"}"}; - string_scalar const narep; + string_scalar const narep; // "null" + // struct convert constants + string_scalar const struct_value_separator; // "," + string_scalar const struct_row_begin_wrap; // "{" + string_scalar const struct_row_end_wrap; // "}" + // list converter constants + string_scalar const list_value_separator; // "," + string_scalar const list_row_begin_wrap; // "[" + string_scalar const list_row_end_wrap; // "]" }; } // namespace @@ -730,15 +740,15 @@ void write_json(data_sink* out_sink, } }(); auto const line_terminator = std::string(options.is_enabled_lines() ? "\n" : ","); - string_scalar d_line_terminator_with_row_end{"}" + line_terminator}; - string_scalar d_line_terminator{line_terminator}; + string_scalar const d_line_terminator_with_row_end{"}" + line_terminator, true, stream}; + string_scalar const d_line_terminator{line_terminator, true, stream}; // write header: required for non-record oriented output // header varies depending on orient. // write_chunked_begin(out_sink, table, user_column_names, options, stream, mr); // TODO This should go into the write_chunked_begin function std::string const list_braces{"[]"}; - string_scalar d_list_braces{list_braces}; + string_scalar const d_list_braces{list_braces, true, stream}; if (!options.is_enabled_lines()) { if (out_sink->is_device_write_preferred(1)) { out_sink->device_write(d_list_braces.data(), 1, stream);