@@ -45,11 +45,10 @@ using namespace optimizer;
45
45
46
46
class OptimizerRuleTests : public PelotonTest {};
47
47
48
- TEST_F (OptimizerRuleTests, SimpleRuleApplyTest ) {
48
+ TEST_F (OptimizerRuleTests, SimpleCommutativeRuleTest ) {
49
49
// Build op plan node to match rule
50
50
auto left_get = std::make_shared<OperatorExpression>(LogicalGet::make ());
51
51
auto right_get = std::make_shared<OperatorExpression>(LogicalGet::make ());
52
- auto val = type::ValueFactory::GetBooleanValue (true );
53
52
auto join = std::make_shared<OperatorExpression>(LogicalInnerJoin::make ());
54
53
join->PushChild (left_get);
55
54
join->PushChild (right_get);
@@ -62,6 +61,45 @@ TEST_F(OptimizerRuleTests, SimpleRuleApplyTest) {
62
61
std::vector<std::shared_ptr<OperatorExpression>> outputs;
63
62
rule.Transform (join, outputs, nullptr );
64
63
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
+
65
103
}
66
104
67
105
} // namespace test
0 commit comments