@@ -130,9 +130,32 @@ ColumnarResults::ColumnarResults(std::shared_ptr<RowSetMemoryOwner> row_set_mem_
130
130
const auto buf_size = num_rows * target_type->size ();
131
131
column_buffers_[0 ] =
132
132
reinterpret_cast <int8_t *>(row_set_mem_owner->allocate (buf_size, thread_idx_));
133
+
134
+ // HERE!!!
135
+ LOG (ERROR) << " HERE!!!" ;
133
136
memcpy (((void *)column_buffers_[0 ]), one_col_buffer, buf_size);
134
137
}
135
138
139
+ ColumnarResults::ColumnarResults (std::shared_ptr<RowSetMemoryOwner> row_set_mem_owner,
140
+ const int8_t * one_col_buffer,
141
+ const size_t num_rows,
142
+ const hdk::ir::Type* target_type,
143
+ const size_t thread_idx,
144
+ bool just_set)
145
+ : column_buffers_(1 )
146
+ , num_rows_(num_rows)
147
+ , target_types_{target_type}
148
+ , parallel_conversion_(false )
149
+ , direct_columnar_conversion_(false )
150
+ , thread_idx_(thread_idx) {
151
+ auto timer = DEBUG_TIMER (__func__);
152
+ const bool is_varlen = target_type->isArray () || target_type->isString ();
153
+ if (is_varlen) {
154
+ throw ColumnarConversionNotSupported ();
155
+ }
156
+ column_buffers_[0 ] = const_cast <int8_t *>(one_col_buffer);
157
+ }
158
+
136
159
std::unique_ptr<ColumnarResults> ColumnarResults::mergeResults (
137
160
std::shared_ptr<RowSetMemoryOwner> row_set_mem_owner,
138
161
const std::vector<std::unique_ptr<ColumnarResults>>& sub_results) {
@@ -159,6 +182,7 @@ std::unique_ptr<ColumnarResults> ColumnarResults::mergeResults(
159
182
if (nonempty_it == sub_results.end ()) {
160
183
return nullptr ;
161
184
}
185
+ LOG (ERROR) << " col_count: " << col_count;
162
186
for (size_t col_idx = 0 ; col_idx < col_count; ++col_idx) {
163
187
const auto byte_width = (*nonempty_it)->columnType (col_idx)->size ();
164
188
auto write_ptr = row_set_mem_owner->allocate (byte_width * total_row_count);
@@ -169,13 +193,63 @@ std::unique_ptr<ColumnarResults> ColumnarResults::mergeResults(
169
193
continue ;
170
194
}
171
195
CHECK_EQ (byte_width, rs->columnType (col_idx)->size ());
196
+ // HERE!!!
197
+ LOG (ERROR) << " HERE!!!" ;
172
198
memcpy (write_ptr, rs->column_buffers_ [col_idx], rs->size () * byte_width);
173
199
write_ptr += rs->size () * byte_width;
174
200
}
175
201
}
176
202
return merged_results;
177
203
}
178
204
205
+ std::unique_ptr<ColumnarResults> ColumnarResults::mergeResults (
206
+ std::shared_ptr<RowSetMemoryOwner> row_set_mem_owner,
207
+ const std::vector<ColumnarDataRefence>& sub_results) {
208
+ auto timer = DEBUG_TIMER (__func__);
209
+ INJECT_TIMER (mergeResults);
210
+
211
+ if (sub_results.empty ()) {
212
+ return nullptr ;
213
+ }
214
+ const auto total_row_count =
215
+ std::accumulate (sub_results.begin (),
216
+ sub_results.end (),
217
+ size_t (0 ),
218
+ [](const size_t init, const ColumnarDataRefence& result) {
219
+ return init + result.num_rows ;
220
+ });
221
+
222
+ // std::unique_ptr<ColumnarResults> merged_results(
223
+ // new ColumnarResults(row_set_mem_owner, total_row_count,
224
+ // sub_results[0].target_type));
225
+ const auto nonempty_it = std::find_if (
226
+ sub_results.begin (), sub_results.end (), [](const ColumnarDataRefence& needle) {
227
+ return needle.num_rows ;
228
+ });
229
+ if (nonempty_it == sub_results.end ()) {
230
+ return nullptr ;
231
+ }
232
+ const auto byte_width = (*nonempty_it).target_type ->size ();
233
+ auto write_ptr = row_set_mem_owner->allocate (byte_width * total_row_count);
234
+ // merged_results->column_buffers_.push_back(write_ptr);
235
+ for (auto & rs : sub_results) {
236
+ if (!rs.num_rows ) {
237
+ continue ;
238
+ }
239
+ CHECK_EQ (byte_width, rs.target_type ->size ());
240
+ // HERE!!!
241
+ LOG (ERROR) << " HERE!!!" ;
242
+ memcpy (write_ptr, rs.one_col_buffer , rs.num_rows * byte_width);
243
+ write_ptr += rs.num_rows * byte_width;
244
+ }
245
+ return std::unique_ptr<ColumnarResults>(new ColumnarResults (row_set_mem_owner,
246
+ write_ptr,
247
+ total_row_count,
248
+ (*nonempty_it).target_type ,
249
+ 0 ,
250
+ false ));
251
+ }
252
+
179
253
void ColumnarResults::materializeAllGroupbyColumnsThroughIteration (
180
254
const ResultSet& rows,
181
255
const size_t num_columns) {
0 commit comments