Cleaning code

This commit is contained in:
Dmitry Krylov 2021-03-14 20:07:19 +10:00
parent 21941bffc8
commit 9446df026b
2 changed files with 8 additions and 89 deletions

View File

@ -148,10 +148,6 @@ public:
ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override
{
std::cerr << " *** FOLDING" << std::endl;
std::cerr << " isFolding(): " << (Impl::isFolding() ? "yes" : "no-") << std::endl;
std::cerr << " arguments.size() = " << arguments.size() << std::endl;
if (arguments.size() == 1)
{
ColumnPtr column_array_ptr = arguments[0].column;
@ -238,102 +234,47 @@ public:
}
if (Impl::isFolding())
arrays.emplace_back(arguments[arguments.size() - 1]); // TODO .last()
std::cerr << " arrays.size() = " << arrays.size() << std::endl;
std::cerr << " column_first_array->size() = " << column_first_array->size() << std::endl;
std::cerr << " column_first_array->getOffsets().size() = " << column_first_array->getOffsets().size() << std::endl;
std::cerr << " column_first_array->getData().size() = " << column_first_array->getData().size() << std::endl;
if (Impl::isFolding() && (column_first_array->getData().size() > 0)) // TODO .size() -> .empty()
{
size_t arr_cursor = 0;
MutableColumnPtr result = arguments.back().column->convertToFullColumnIfConst()->cloneEmpty();
for(size_t irow = 0; irow < column_first_array->size(); ++irow) // for each row of result
for (size_t irow = 0; irow < column_first_array->size(); ++irow) // for each row of result
{
std::cerr << " --- row " << irow << " ---" << std::endl;
// Make accumulator column for this row
// TODO проверить с константой
ColumnWithTypeAndName accumulator_column = arguments.back(); // TODO тут нужно ещё и позицию в аргументе извлекать
ColumnPtr acc(accumulator_column.column->cut(irow, 1));
std::cerr << " * accumulator.type " << accumulator_column.type->getName() << std::endl;
std::cerr << " * accumulator.column " << accumulator_column.column->dumpStructure() << std::endl;
std::cerr << " * acc " << acc->dumpStructure() << std::endl;
std::cerr << " * acc[0] " << (*acc)[0].dump() << std::endl;
auto accumulator = ColumnWithTypeAndName(acc,
accumulator_column.type,
accumulator_column.name);
ColumnPtr res(acc);
size_t const arr_next = column_first_array->getOffsets()[irow]; // when we do folding
for(size_t iter = 0; arr_cursor < arr_next; ++iter, ++arr_cursor)
for (size_t iter = 0; arr_cursor < arr_next; ++iter, ++arr_cursor)
{
std::cerr << " ----- iteration " << iter << " ------" << std::endl;
// Make slice of input arrays and accumulator for lambda
ColumnsWithTypeAndName iter_arrays;
std::cerr << " arrays.size() = " << arrays.size() << std::endl;
iter_arrays.reserve(arrays.size() + 1);
//size_t arr_from = (iter == 0) ? 0 : column_first_array->getOffsets()[iter - 1];
//size_t arr_len = column_first_array->getOffsets()[iter] - arr_from;
//std::cerr << " arr_from = " << arr_from << std::endl;
//std::cerr << " arr_len = " << arr_len << std::endl;
std::cerr << " arr_cursor = " << arr_cursor << std::endl;
std::cerr << " arr_next = " << arr_next << std::endl;
for(size_t icolumn = 0; icolumn < arrays.size() - 1; ++icolumn)
for (size_t icolumn = 0; icolumn < arrays.size() - 1; ++icolumn)
{
auto const & arr = arrays[icolumn];
std::cerr << " @ " << icolumn << ") 1 :: " << arr_cursor << std::endl;
/*
const ColumnArray * arr_array = checkAndGetColumn<ColumnArray>(arr.column.get());
std::cerr << " " << icolumn << ") " << 1 << " " << arr_array << std::endl;
std::cerr << " " << icolumn << ") " << 2 << std::endl;
const ColumnPtr & nested_column_x = arr_array->getData().cut(iter, 1);
std::cerr << " " << icolumn << ") " << 3 << std::endl;
const ColumnPtr & offsets_column_x = ColumnArray::ColumnOffsets::create(1, 1);
std::cerr << " " << icolumn << ") " << 4 << std::endl;
auto new_arr_array = ColumnArray::create(nested_column_x, offsets_column_x);
std::cerr << " " << icolumn << ") " << 5 << std::endl;
*/
iter_arrays.emplace_back(ColumnWithTypeAndName(arr.column->cut(arr_cursor, 1),
arr.type,
arr.name));
std::cerr << " @ " << icolumn << ") 2 :: " << iter_arrays.back().column->dumpStructure() << std::endl;
}
iter_arrays.emplace_back(accumulator);
// ----
std::cerr << " formed" << std::endl;
// Calculate function on arguments
auto replicated_column_function_ptr = IColumn::mutate(column_function->replicate(column_first_array->getOffsets()));
auto * replicated_column_function = typeid_cast<ColumnFunction *>(replicated_column_function_ptr.get());
std::cerr << " pre append" << std::endl;
replicated_column_function->appendArguments(iter_arrays);
std::cerr << " post append" << std::endl;
auto lambda_result = replicated_column_function->reduce().column;
if (lambda_result->lowCardinality())
lambda_result = lambda_result->convertToFullColumnIfLowCardinality();
std::cerr << " pre execute" << std::endl;
res = Impl::execute(*column_first_array, lambda_result); // TODO column_first_array
std::cerr << " post execute : res " << res->dumpStructure() << std::endl;
std::cerr << " post execute : res[0] " << (*res)[0].dump() << std::endl;
// ~~~
// ~~~
// ~~~
res = Impl::execute(*column_first_array, lambda_result);
accumulator.column = res;
}
std::cerr << " pre result " << result->dumpStructure() << std::endl;
//result->insertFrom(*res, 0);
result->insert((*res)[0]);
std::cerr << " post result " << result->dumpStructure() << std::endl;
std::cerr << " post res[0] " << (*res)[0].dump() << std::endl;
std::cerr << " post result[0] " << (*result)[0].dump() << std::endl;
//return res;
}
return result;
@ -349,10 +290,7 @@ public:
if (lambda_result->lowCardinality())
lambda_result = lambda_result->convertToFullColumnIfLowCardinality();
ColumnPtr res = Impl::execute(*column_first_array, lambda_result);
std::cerr << " ^^^ FOLDING" << std::endl;
return res;
//return Impl::execute(*column_first_array, lambda_result);
return Impl::execute(*column_first_array, lambda_result);
}
}
}

View File

@ -19,28 +19,9 @@ struct ArrayFoldImpl
return accum_type;
}
static ColumnPtr execute(const ColumnArray & array, ColumnPtr mapped)
static ColumnPtr execute(const ColumnArray & /*array*/, ColumnPtr mapped)
{
std::cerr << " **** ArrayFoldImpl **** " << std::endl;
std::cerr << " array: " << array.dumpStructure() << std::endl;
std::cerr << " mapped: " << mapped->dumpStructure() << std::endl;
ColumnPtr res;
if (mapped->size() == 0)
{
res = mapped;
}
else
{
std::cerr << " mapped[0]: " << (*mapped)[0].dump() << std::endl;
// std::cerr << " mapped[1]: " << (*mapped)[1].dump() << std::endl;
res = mapped->cut(0, 1);
}
std::cerr << " ^^^^ ArrayFoldImpl ^^^^" << std::endl;
return res;
// return ColumnArray::create(mapped->convertToFullColumnIfConst(), array.getOffsetsPtr());
// return ColumnArray::create(mapped->convertToFullColumnIfConst(), array.getOffsetsPtr());
return (mapped->size() == 0) ? mapped : mapped->cut(0, 1);
}
};