1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

MDEV-34888 Implement SEMIJOIN() and SUBQUERY() hints

This commit is contained in:
Oleg Smirnov
2024-09-11 19:53:57 +07:00
parent e3bf4c826c
commit 2c8f6058c1
28 changed files with 3712 additions and 164 deletions

View File

@@ -805,6 +805,12 @@ public:
virtual void mark_used() = 0;
/*
Returns TRUE if the strategy is disabled by either optimizer switch
setting or an optimizer hint
*/
virtual bool is_disabled() const { return false; }
virtual ~Semi_join_strategy_picker() = default;
};
@@ -825,12 +831,15 @@ class Duplicate_weedout_picker : public Semi_join_strategy_picker
table_map dupsweedout_tables;
bool is_used;
bool disabled; // See comment for Semi_join_strategy_picker::is_disabled()
public:
void set_empty() override
{
dupsweedout_tables= 0;
first_dupsweedout_table= MAX_TABLES;
is_used= FALSE;
disabled= FALSE;
}
void set_from_prev(POSITION *prev) override;
@@ -845,6 +854,9 @@ public:
POSITION *loose_scan_pos) override;
void mark_used() override { is_used= TRUE; }
bool is_disabled() const override { return disabled; }
friend void fix_semijoin_strategies_for_picked_join_order(JOIN *join);
};