Skip to content
This repository was archived by the owner on Sep 27, 2019. It is now read-only.

Commit aa739fd

Browse files
committed
* remove Logical operator related to "Inner" and "Outer" since we use one operator with a JoinType to represent them all.
* Clang-format. * Update the optimizer_rule_test and optimizer_test to use new operators.
1 parent 968bc86 commit aa739fd

15 files changed

+118
-662
lines changed

src/include/common/internal_types.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ extern int TEST_TUPLES_PER_TILEGROUP;
7777
enum class CmpBool {
7878
CmpFalse = 0,
7979
CmpTrue = 1,
80-
NULL_ = 2 // Note the underscore suffix
80+
NULL_ = 2 // Note the underscore suffix
8181
};
8282

8383
//===--------------------------------------------------------------------===//
@@ -1210,7 +1210,8 @@ std::ostream &operator<<(std::ostream &os, const RWType &type);
12101210
typedef CuckooMap<ItemPointer, RWType, ItemPointerHasher, ItemPointerComparator>
12111211
ReadWriteSet;
12121212

1213-
typedef tbb::concurrent_unordered_set<ItemPointer, ItemPointerHasher, ItemPointerComparator> WriteSet;
1213+
typedef tbb::concurrent_unordered_set<ItemPointer, ItemPointerHasher,
1214+
ItemPointerComparator> WriteSet;
12141215

12151216
// this enum is to identify why the version should be GC'd.
12161217
enum class GCVersionType {
@@ -1236,7 +1237,8 @@ enum class DDLType {
12361237
CREATE,
12371238
DROP,
12381239
};
1239-
typedef tbb::concurrent_vector<std::tuple<oid_t, oid_t, oid_t, DDLType>> CreateDropSet;
1240+
typedef tbb::concurrent_vector<std::tuple<oid_t, oid_t, oid_t, DDLType>>
1241+
CreateDropSet;
12401242
typedef std::vector<std::tuple<oid_t, oid_t, oid_t>> GCObjectSet;
12411243

12421244
//===--------------------------------------------------------------------===//
@@ -1318,8 +1320,6 @@ enum class RuleType : uint32_t {
13181320
// Transformation rules (logical -> logical)
13191321
JOIN_COMMUTE = 0,
13201322
JOIN_ASSOCIATE,
1321-
INNER_JOIN_COMMUTE,
1322-
INNER_JOIN_ASSOCIATE,
13231323

13241324
// Don't move this one
13251325
LogicalPhysicalDelimiter,

src/include/optimizer/child_stats_deriver.h

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,17 @@ class Memo;
2727
// expression
2828
class ChildStatsDeriver : public OperatorVisitor {
2929
public:
30-
std::vector<ExprSet> DeriveInputStats(
31-
GroupExpression *gexpr,
32-
ExprSet required_cols, Memo *memo);
30+
std::vector<ExprSet> DeriveInputStats(GroupExpression *gexpr,
31+
ExprSet required_cols, Memo *memo);
3332

3433
void Visit(const LogicalQueryDerivedGet *) override;
3534
void Visit(const LogicalJoin *) override;
36-
void Visit(const LogicalInnerJoin *) override;
37-
void Visit(const LogicalLeftJoin *) override;
38-
void Visit(const LogicalRightJoin *) override;
39-
void Visit(const LogicalOuterJoin *) override;
4035
void Visit(const LogicalSemiJoin *) override;
4136
void Visit(const LogicalAggregateAndGroupBy *) override;
4237

4338
private:
4439
void PassDownRequiredCols();
45-
void PassDownColumn(expression::AbstractExpression* col);
40+
void PassDownColumn(expression::AbstractExpression *col);
4641
ExprSet required_cols_;
4742
GroupExpression *gexpr_;
4843
Memo *memo_;

src/include/optimizer/operator_node.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,6 @@ enum class OpType {
3434
LogicalDependentJoin,
3535
LogicalSingleJoin,
3636
LogicalJoin,
37-
InnerJoin,
38-
LeftJoin,
39-
RightJoin,
40-
OuterJoin,
4137
SemiJoin,
4238
LogicalAggregateAndGroupBy,
4339
LogicalInsert,

src/include/optimizer/operator_visitor.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,6 @@ class OperatorVisitor {
6161
virtual void Visit(const LogicalSingleJoin *) {}
6262
virtual void Visit(const LogicalDependentJoin *) {}
6363
virtual void Visit(const LogicalJoin *) {}
64-
virtual void Visit(const LogicalInnerJoin *) {}
65-
virtual void Visit(const LogicalLeftJoin *) {}
66-
virtual void Visit(const LogicalRightJoin *) {}
67-
virtual void Visit(const LogicalOuterJoin *) {}
6864
virtual void Visit(const LogicalSemiJoin *) {}
6965
virtual void Visit(const LogicalAggregateAndGroupBy *) {}
7066
virtual void Visit(const LogicalInsert *) {}

src/include/optimizer/operators.h

Lines changed: 25 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class UpdateClause;
3131
}
3232

3333
namespace catalog {
34-
class TableCatalogObject;
34+
class TableCatalogObject;
3535
}
3636

3737
namespace optimizer {
@@ -51,10 +51,10 @@ class LeafOperator : OperatorNode<LeafOperator> {
5151
//===--------------------------------------------------------------------===//
5252
class LogicalGet : public OperatorNode<LogicalGet> {
5353
public:
54-
static Operator make(oid_t get_id = 0,
55-
std::vector<AnnotatedExpression> predicates = {},
56-
std::shared_ptr<catalog::TableCatalogObject> table = nullptr,
57-
std::string alias = "", bool update = false);
54+
static Operator make(
55+
oid_t get_id = 0, std::vector<AnnotatedExpression> predicates = {},
56+
std::shared_ptr<catalog::TableCatalogObject> table = nullptr,
57+
std::string alias = "", bool update = false);
5858

5959
bool operator==(const BaseOperatorNode &r) override;
6060

@@ -169,7 +169,8 @@ class LogicalJoin : public OperatorNode<LogicalJoin> {
169169
public:
170170
static Operator make(JoinType _type);
171171

172-
static Operator make(JoinType _type, std::vector<AnnotatedExpression> &conditions);
172+
static Operator make(JoinType _type,
173+
std::vector<AnnotatedExpression> &conditions);
173174

174175
bool operator==(const BaseOperatorNode &r) override;
175176

@@ -179,52 +180,6 @@ class LogicalJoin : public OperatorNode<LogicalJoin> {
179180
JoinType type;
180181
};
181182

182-
//===--------------------------------------------------------------------===//
183-
// InnerJoin
184-
//===--------------------------------------------------------------------===//
185-
class LogicalInnerJoin : public OperatorNode<LogicalInnerJoin> {
186-
public:
187-
static Operator make();
188-
189-
static Operator make(std::vector<AnnotatedExpression> &conditions);
190-
191-
bool operator==(const BaseOperatorNode &r) override;
192-
193-
hash_t Hash() const override;
194-
195-
std::vector<AnnotatedExpression> join_predicates;
196-
};
197-
198-
//===--------------------------------------------------------------------===//
199-
// LeftJoin
200-
//===--------------------------------------------------------------------===//
201-
class LogicalLeftJoin : public OperatorNode<LogicalLeftJoin> {
202-
public:
203-
static Operator make(expression::AbstractExpression *condition = nullptr);
204-
205-
std::shared_ptr<expression::AbstractExpression> join_predicate;
206-
};
207-
208-
//===--------------------------------------------------------------------===//
209-
// RightJoin
210-
//===--------------------------------------------------------------------===//
211-
class LogicalRightJoin : public OperatorNode<LogicalRightJoin> {
212-
public:
213-
static Operator make(expression::AbstractExpression *condition = nullptr);
214-
215-
std::shared_ptr<expression::AbstractExpression> join_predicate;
216-
};
217-
218-
//===--------------------------------------------------------------------===//
219-
// OuterJoin
220-
//===--------------------------------------------------------------------===//
221-
class LogicalOuterJoin : public OperatorNode<LogicalOuterJoin> {
222-
public:
223-
static Operator make(expression::AbstractExpression *condition = nullptr);
224-
225-
std::shared_ptr<expression::AbstractExpression> join_predicate;
226-
};
227-
228183
//===--------------------------------------------------------------------===//
229184
// SemiJoin
230185
//===--------------------------------------------------------------------===//
@@ -263,7 +218,8 @@ class LogicalAggregateAndGroupBy
263218
class LogicalInsert : public OperatorNode<LogicalInsert> {
264219
public:
265220
static Operator make(
266-
std::shared_ptr<catalog::TableCatalogObject> target_table, const std::vector<std::string> *columns,
221+
std::shared_ptr<catalog::TableCatalogObject> target_table,
222+
const std::vector<std::string> *columns,
267223
const std::vector<std::vector<
268224
std::unique_ptr<expression::AbstractExpression>>> *values);
269225

@@ -275,7 +231,8 @@ class LogicalInsert : public OperatorNode<LogicalInsert> {
275231

276232
class LogicalInsertSelect : public OperatorNode<LogicalInsertSelect> {
277233
public:
278-
static Operator make(std::shared_ptr<catalog::TableCatalogObject> target_table);
234+
static Operator make(
235+
std::shared_ptr<catalog::TableCatalogObject> target_table);
279236

280237
std::shared_ptr<catalog::TableCatalogObject> target_table;
281238
};
@@ -303,7 +260,8 @@ class LogicalLimit : public OperatorNode<LogicalLimit> {
303260
//===--------------------------------------------------------------------===//
304261
class LogicalDelete : public OperatorNode<LogicalDelete> {
305262
public:
306-
static Operator make(std::shared_ptr<catalog::TableCatalogObject> target_table);
263+
static Operator make(
264+
std::shared_ptr<catalog::TableCatalogObject> target_table);
307265

308266
std::shared_ptr<catalog::TableCatalogObject> target_table;
309267
};
@@ -334,7 +292,8 @@ class DummyScan : public OperatorNode<DummyScan> {
334292
//===--------------------------------------------------------------------===//
335293
class PhysicalSeqScan : public OperatorNode<PhysicalSeqScan> {
336294
public:
337-
static Operator make(oid_t get_id, std::shared_ptr<catalog::TableCatalogObject> table,
295+
static Operator make(oid_t get_id,
296+
std::shared_ptr<catalog::TableCatalogObject> table,
338297
std::string alias,
339298
std::vector<AnnotatedExpression> predicates,
340299
bool update);
@@ -356,7 +315,8 @@ class PhysicalSeqScan : public OperatorNode<PhysicalSeqScan> {
356315
//===--------------------------------------------------------------------===//
357316
class PhysicalIndexScan : public OperatorNode<PhysicalIndexScan> {
358317
public:
359-
static Operator make(oid_t get_id, std::shared_ptr<catalog::TableCatalogObject> table,
318+
static Operator make(oid_t get_id,
319+
std::shared_ptr<catalog::TableCatalogObject> table,
360320
std::string alias,
361321
std::vector<AnnotatedExpression> predicates, bool update,
362322
oid_t index_id, std::vector<oid_t> key_column_id_list,
@@ -430,8 +390,7 @@ class PhysicalLimit : public OperatorNode<PhysicalLimit> {
430390
class PhysicalNLJoin : public OperatorNode<PhysicalNLJoin> {
431391
public:
432392
static Operator make(
433-
JoinType _type,
434-
std::vector<AnnotatedExpression> conditions,
393+
JoinType _type, std::vector<AnnotatedExpression> conditions,
435394
std::vector<std::unique_ptr<expression::AbstractExpression>> &left_keys,
436395
std::vector<std::unique_ptr<expression::AbstractExpression>> &right_keys);
437396

@@ -452,8 +411,7 @@ class PhysicalNLJoin : public OperatorNode<PhysicalNLJoin> {
452411
class PhysicalHashJoin : public OperatorNode<PhysicalHashJoin> {
453412
public:
454413
static Operator make(
455-
JoinType _type,
456-
std::vector<AnnotatedExpression> conditions,
414+
JoinType _type, std::vector<AnnotatedExpression> conditions,
457415
std::vector<std::unique_ptr<expression::AbstractExpression>> &left_keys,
458416
std::vector<std::unique_ptr<expression::AbstractExpression>> &right_keys);
459417

@@ -574,7 +532,8 @@ class PhysicalOuterHashJoin : public OperatorNode<PhysicalOuterHashJoin> {
574532
class PhysicalInsert : public OperatorNode<PhysicalInsert> {
575533
public:
576534
static Operator make(
577-
std::shared_ptr<catalog::TableCatalogObject> target_table, const std::vector<std::string> *columns,
535+
std::shared_ptr<catalog::TableCatalogObject> target_table,
536+
const std::vector<std::string> *columns,
578537
const std::vector<std::vector<
579538
std::unique_ptr<expression::AbstractExpression>>> *values);
580539

@@ -586,7 +545,8 @@ class PhysicalInsert : public OperatorNode<PhysicalInsert> {
586545

587546
class PhysicalInsertSelect : public OperatorNode<PhysicalInsertSelect> {
588547
public:
589-
static Operator make(std::shared_ptr<catalog::TableCatalogObject> target_table);
548+
static Operator make(
549+
std::shared_ptr<catalog::TableCatalogObject> target_table);
590550

591551
std::shared_ptr<catalog::TableCatalogObject> target_table;
592552
};
@@ -596,7 +556,8 @@ class PhysicalInsertSelect : public OperatorNode<PhysicalInsertSelect> {
596556
//===--------------------------------------------------------------------===//
597557
class PhysicalDelete : public OperatorNode<PhysicalDelete> {
598558
public:
599-
static Operator make(std::shared_ptr<catalog::TableCatalogObject> target_table);
559+
static Operator make(
560+
std::shared_ptr<catalog::TableCatalogObject> target_table);
600561
std::shared_ptr<catalog::TableCatalogObject> target_table;
601562
};
602563

src/include/optimizer/rule_impls.h

Lines changed: 2 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -53,37 +53,6 @@ class JoinAssociativity : public Rule {
5353
OptimizeContext *context) const override;
5454
};
5555

56-
/**
57-
* @brief (A join B) -> (B join A)
58-
*/
59-
class InnerJoinCommutativity : public Rule {
60-
public:
61-
InnerJoinCommutativity();
62-
63-
bool Check(std::shared_ptr<OperatorExpression> plan,
64-
OptimizeContext *context) const override;
65-
66-
void Transform(std::shared_ptr<OperatorExpression> input,
67-
std::vector<std::shared_ptr<OperatorExpression>> &transformed,
68-
OptimizeContext *context) const override;
69-
};
70-
71-
/**
72-
* @brief (A join B) join C -> A join (B join C)
73-
*/
74-
75-
class InnerJoinAssociativity : public Rule {
76-
public:
77-
InnerJoinAssociativity();
78-
79-
bool Check(std::shared_ptr<OperatorExpression> plan,
80-
OptimizeContext *context) const override;
81-
82-
void Transform(std::shared_ptr<OperatorExpression> input,
83-
std::vector<std::shared_ptr<OperatorExpression>> &transformed,
84-
OptimizeContext *context) const override;
85-
};
86-
8756
//===--------------------------------------------------------------------===//
8857
// Implementation rules
8958
//===--------------------------------------------------------------------===//
@@ -269,36 +238,6 @@ class JoinToHashJoin : public Rule {
269238
OptimizeContext *context) const override;
270239
};
271240

272-
/**
273-
* @brief (Logical Inner Join -> Inner Nested-Loop Join)
274-
*/
275-
class InnerJoinToInnerNLJoin : public Rule {
276-
public:
277-
InnerJoinToInnerNLJoin();
278-
279-
bool Check(std::shared_ptr<OperatorExpression> plan,
280-
OptimizeContext *context) const override;
281-
282-
void Transform(std::shared_ptr<OperatorExpression> input,
283-
std::vector<std::shared_ptr<OperatorExpression>> &transformed,
284-
OptimizeContext *context) const override;
285-
};
286-
287-
/**
288-
* @brief (Logical Inner Join -> Inner Hash Join)
289-
*/
290-
class InnerJoinToInnerHashJoin : public Rule {
291-
public:
292-
InnerJoinToInnerHashJoin();
293-
294-
bool Check(std::shared_ptr<OperatorExpression> plan,
295-
OptimizeContext *context) const override;
296-
297-
void Transform(std::shared_ptr<OperatorExpression> input,
298-
std::vector<std::shared_ptr<OperatorExpression>> &transformed,
299-
OptimizeContext *context) const override;
300-
};
301-
302241
/**
303242
* @brief (Logical Distinct -> Physical Distinct)
304243
*/
@@ -401,7 +340,8 @@ class EmbedFilterIntoGet : public Rule {
401340
///////////////////////////////////////////////////////////////////////////////
402341
/// Unnesting rules
403342
// We use this promise to determine which rules should be applied first if
404-
// multiple rules are applicable, we need to first pull filters up through mark-join
343+
// multiple rules are applicable, we need to first pull filters up through
344+
// mark-join
405345
// then turn mark-join into a regular join operator
406346
enum class UnnestPromise { Low = 1, High };
407347
// TODO(boweic): MarkJoin and SingleJoin should not be transformed into inner

src/include/optimizer/stats_calculator.h

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,12 @@ class TableStats;
2626
*/
2727
class StatsCalculator : public OperatorVisitor {
2828
public:
29-
void CalculateStats(GroupExpression *gexpr, ExprSet required_cols,
30-
Memo *memo, concurrency::TransactionContext* txn);
29+
void CalculateStats(GroupExpression *gexpr, ExprSet required_cols, Memo *memo,
30+
concurrency::TransactionContext *txn);
3131

3232
void Visit(const LogicalGet *) override;
3333
void Visit(const LogicalQueryDerivedGet *) override;
3434
void Visit(const LogicalJoin *) override;
35-
void Visit(const LogicalInnerJoin *) override;
36-
void Visit(const LogicalLeftJoin *) override;
37-
void Visit(const LogicalRightJoin *) override;
38-
void Visit(const LogicalOuterJoin *) override;
3935
void Visit(const LogicalSemiJoin *) override;
4036
void Visit(const LogicalAggregateAndGroupBy *) override;
4137
void Visit(const LogicalLimit *) override;
@@ -65,8 +61,8 @@ class StatsCalculator : public OperatorVisitor {
6561
*/
6662
void UpdateStatsForFilter(
6763
size_t num_rows,
68-
std::unordered_map<std::string, std::shared_ptr<ColumnStats>>
69-
&predicate_stats,
64+
std::unordered_map<std::string, std::shared_ptr<ColumnStats>> &
65+
predicate_stats,
7066
const std::vector<AnnotatedExpression> &predicates);
7167

7268
double CalculateSelectivityForPredicate(
@@ -76,7 +72,7 @@ class StatsCalculator : public OperatorVisitor {
7672
GroupExpression *gexpr_;
7773
ExprSet required_cols_;
7874
Memo *memo_;
79-
concurrency::TransactionContext* txn_;
75+
concurrency::TransactionContext *txn_;
8076
};
8177

8278
} // namespace optimizer

0 commit comments

Comments
 (0)