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

Commit b01590e

Browse files
author
GustavoAngulo
committed
Simple test case
1 parent cbbcca0 commit b01590e

File tree

2 files changed

+43
-5
lines changed

2 files changed

+43
-5
lines changed

src/optimizer/rule_impls.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,12 @@ void InnerJoinAssociativity::Transform(
115115

116116
// Get Alias sets
117117
auto &memo = context->metadata->memo;
118-
auto left_group_id = children[0]->Children()[0]->Op().As<LeafOperator>()->origin_group;
118+
// auto left_group_id = children[0]->Children()[0]->Op().As<LeafOperator>()->origin_group;
119119
auto middle_group_id = children[0]->Children()[1]->Op().As<LeafOperator>()->origin_group;
120120
auto right_group_id = children[1]->Op().As<LeafOperator>()->origin_group;
121121

122-
const auto &left_group_aliases_set =
123-
memo.GetGroupByID(left_group_id)->GetTableAliases();
122+
// const auto &left_group_aliases_set =
123+
// memo.GetGroupByID(left_group_id)->GetTableAliases();
124124
const auto &middle_group_aliases_set =
125125
memo.GetGroupByID(middle_group_id)->GetTableAliases();
126126
const auto &right_group_aliases_set =

test/optimizer/optimizer_rule_test.cpp

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,10 @@ using namespace optimizer;
4545

4646
class OptimizerRuleTests : public PelotonTest {};
4747

48-
TEST_F(OptimizerRuleTests, SimpleRuleApplyTest) {
48+
TEST_F(OptimizerRuleTests, SimpleCommutativeRuleTest) {
4949
// Build op plan node to match rule
5050
auto left_get = std::make_shared<OperatorExpression>(LogicalGet::make());
5151
auto right_get = std::make_shared<OperatorExpression>(LogicalGet::make());
52-
auto val = type::ValueFactory::GetBooleanValue(true);
5352
auto join = std::make_shared<OperatorExpression>(LogicalInnerJoin::make());
5453
join->PushChild(left_get);
5554
join->PushChild(right_get);
@@ -62,6 +61,45 @@ TEST_F(OptimizerRuleTests, SimpleRuleApplyTest) {
6261
std::vector<std::shared_ptr<OperatorExpression>> outputs;
6362
rule.Transform(join, outputs, nullptr);
6463
EXPECT_EQ(outputs.size(), 1);
64+
65+
auto output_join = outputs[0];
66+
67+
EXPECT_EQ(output_join->Children()[0], right_get);
68+
EXPECT_EQ(output_join->Children()[1], left_get);
69+
70+
}
71+
72+
TEST_F(OptimizerRuleTests, SimpleAssociativeRuleTest) {
73+
// Build op plan node to match rule
74+
// (left JOIN middle) JOIN right
75+
auto left_get = std::make_shared<OperatorExpression>(LogicalGet::make());
76+
auto middle_get = std::make_shared<OperatorExpression>(LogicalGet::make());
77+
auto right_get = std::make_shared<OperatorExpression>(LogicalGet::make());
78+
auto child_join = std::make_shared<OperatorExpression>(LogicalInnerJoin::make());
79+
child_join->PushChild(left_get);
80+
child_join->PushChild(middle_get);
81+
82+
auto parent_join = std::make_shared<OperatorExpression>(LogicalInnerJoin::make());
83+
parent_join->PushChild(child_join);
84+
parent_join->PushChild(right_get);
85+
86+
87+
// Setup rule
88+
InnerJoinAssociativity rule;
89+
90+
EXPECT_TRUE(rule.Check(parent_join, nullptr));
91+
92+
std::vector<std::shared_ptr<OperatorExpression>> outputs;
93+
rule.Transform(parent_join, outputs, nullptr);
94+
EXPECT_EQ(outputs.size(), 1);
95+
96+
auto output_join = outputs[0];
97+
98+
EXPECT_EQ(output_join->Children()[0], left_get);
99+
EXPECT_EQ(output_join->Children()[1]->Children()[0], middle_get);
100+
EXPECT_EQ(output_join->Children()[1]->Children()[1], right_get);
101+
102+
65103
}
66104

67105
} // namespace test

0 commit comments

Comments
 (0)