diff --git a/be/src/olap/rowset/beta_rowset_reader.cpp b/be/src/olap/rowset/beta_rowset_reader.cpp index d663a77c03..261593e38a 100644 --- a/be/src/olap/rowset/beta_rowset_reader.cpp +++ b/be/src/olap/rowset/beta_rowset_reader.cpp @@ -93,10 +93,12 @@ OLAPStatus BetaRowsetReader::init(RowsetReaderContext* read_context) { RowBlockInfo output_block_info; output_block_info.row_num = 1024; output_block_info.null_supported = true; - output_block_info.column_ids = schema.column_ids(); + // the output block's schema should be seek_columns to comform to v1 + // TODO(hkp): this should be optimized to use return_columns + output_block_info.column_ids = *(_context->seek_columns); RETURN_NOT_OK(_output_block->init(output_block_info)); _row.reset(new RowCursor()); - RETURN_NOT_OK(_row->init(*(read_context->tablet_schema), schema.column_ids())); + RETURN_NOT_OK(_row->init(*(read_context->tablet_schema), *(_context->seek_columns))); return OLAP_SUCCESS; } @@ -118,6 +120,7 @@ OLAPStatus BetaRowsetReader::next_block(RowBlock** block) { for (size_t row_idx = 0; row_idx < _input_block->num_rows(); ++row_idx) { // shallow copy row from input block to output block _output_block->get_row(row_idx, _row.get()); + // this copy function will copy return_columns' row to seek_columns's row_cursor s = _input_block->copy_to_row_cursor(row_idx, _row.get()); if (!s.ok()) { LOG(WARNING) << "failed to copy row: " << s.to_string(); diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp index e1589fb1a8..269b706c71 100644 --- a/be/src/olap/schema_change.cpp +++ b/be/src/olap/schema_change.cpp @@ -1310,6 +1310,8 @@ OLAPStatus SchemaChangeHandler::_do_process_alter_tablet_v2(const TAlterTabletRe _reader_context.need_ordered_result = true; _reader_context.delete_handler = &delete_handler; _reader_context.return_columns = &return_columns; + // for schema change, seek_columns is the same to return_columns + _reader_context.seek_columns = &return_columns; for (auto& rs_reader : rs_readers) { rs_reader->init(&_reader_context); @@ -1589,6 +1591,7 @@ OLAPStatus SchemaChangeHandler::process_alter_tablet(AlterTabletType type, _reader_context.need_ordered_result = true; _reader_context.delete_handler = &delete_handler; _reader_context.return_columns = &return_columns; + _reader_context.seek_columns = &return_columns; for (auto& rs_reader : rs_readers) { rs_reader->init(&_reader_context); @@ -1696,6 +1699,7 @@ OLAPStatus SchemaChangeHandler::schema_version_convert( _reader_context.need_ordered_result = true; _reader_context.delete_handler = &delete_handler; _reader_context.return_columns = &return_columns; + _reader_context.seek_columns = &return_columns; RowsetReaderSharedPtr rowset_reader; RETURN_NOT_OK((*base_rowset)->create_reader(&rowset_reader)); diff --git a/be/test/olap/rowset/beta_rowset_test.cpp b/be/test/olap/rowset/beta_rowset_test.cpp index 4d694d89a3..48239483f3 100644 --- a/be/test/olap/rowset/beta_rowset_test.cpp +++ b/be/test/olap/rowset/beta_rowset_test.cpp @@ -180,6 +180,7 @@ TEST_F(BetaRowsetTest, BasicFunctionTest) { reader_context.need_ordered_result = true; std::vector return_columns = {0, 1}; reader_context.return_columns = &return_columns; + reader_context.seek_columns = &return_columns; RowsetReaderSharedPtr rowset_reader; create_and_init_rowset_reader(rowset.get(), reader_context, &rowset_reader); @@ -220,6 +221,7 @@ TEST_F(BetaRowsetTest, BasicFunctionTest) { reader_context.need_ordered_result = false; std::vector return_columns = {2}; reader_context.return_columns = &return_columns; + reader_context.seek_columns = &return_columns; RowsetReaderSharedPtr rowset_reader; create_and_init_rowset_reader(rowset.get(), reader_context, &rowset_reader);