Fix tile scanner with groupby pushdown

This commit is contained in:
obdev
2024-02-08 22:55:38 +00:00
committed by ob-robot
parent 9544106c49
commit 437a6a5c00
4 changed files with 12 additions and 3 deletions

View File

@ -256,7 +256,7 @@ int ObCGTileScanner::get_next_rows(uint64_t &count, const uint64_t capacity)
if (OB_ISNULL(cg_scanner = cg_scanners_.at(i))) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("Unexpected null cg scanner", K(ret), K(i));
} else if (OB_CG_ROW_SCANNER == cg_scanner->get_type()) {
} else if (is_valid_cg_row_scanner(cg_scanner->get_type())) {
ret = get_next_aligned_rows(static_cast<ObCGRowScanner*>(cg_scanner), count);
} else {
ret = cg_scanner->get_next_rows(count, capacity);

View File

@ -1138,7 +1138,7 @@ int ObCOSSTableRowScanner::push_group_by_processor(ObICGIterator *cg_iterator)
if (OB_ISNULL(cg_iterator)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("Invalid argument", K(ret));
} else if (cg_iterator->get_type() != ObICGIterator::OB_CG_GROUP_BY_SCANNER) {
} else if (OB_UNLIKELY(!ObICGIterator::is_valid_group_by_cg_scanner(cg_iterator->get_type()))) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("Unexpected cg scanner", K(ret), K(cg_iterator->get_type()));
} else {

View File

@ -36,6 +36,7 @@ public:
OB_CG_SINGLE_ROW_SCANNER,
OB_CG_AGGREGATED_SCANNER,
OB_CG_GROUP_BY_SCANNER,
OB_CG_GROUP_BY_DEFAULT_SCANNER,
OB_CG_VIRTUAL_SCANNER,
OB_CG_DEFAULT_SCANNER,
OB_CG_TILE_SCANNER,
@ -50,6 +51,14 @@ public:
{
return project_single_row ? (OB_CG_SINGLE_ROW_SCANNER || OB_CG_DEFAULT_SCANNER) : (OB_CG_ROW_SCANNER <= cg_iter_type && cg_iter_type < OB_CG_TILE_SCANNER);
}
static bool is_valid_cg_row_scanner(const int cg_iter_type)
{
return OB_CG_ROW_SCANNER == cg_iter_type || OB_CG_GROUP_BY_SCANNER == cg_iter_type;
}
static bool is_valid_group_by_cg_scanner(const int cg_iter_type)
{
return OB_CG_GROUP_BY_SCANNER == cg_iter_type || OB_CG_GROUP_BY_DEFAULT_SCANNER == cg_iter_type;
}
ObICGIterator() : cg_idx_(OB_CS_INVALID_CG_IDX) {};
virtual ~ObICGIterator() {};
virtual void reset() = 0;

View File

@ -136,7 +136,7 @@ public:
ObSSTableWrapper &wrapper) override;
virtual int init_group_by_info() override;
virtual ObCGIterType get_type() override
{ return OB_CG_GROUP_BY_SCANNER; }
{ return OB_CG_GROUP_BY_DEFAULT_SCANNER; }
virtual int decide_group_size(int64_t &group_size) override;
virtual int decide_can_group_by(
const int32_t group_by_col,