TEST_F(RuleTests, SimpleRuleApplyTest) { // Build op plan node to match rule auto left_get = std::make_shared<OpExpression>(LogicalGet::make(0, {})); auto right_get = std::make_shared<OpExpression>(LogicalGet::make(0, {})); auto val = common::BooleanValue(1); auto pred = std::make_shared<OpExpression>(ExprConstant::make(& val)); auto join = std::make_shared<OpExpression>(LogicalInnerJoin::make()); join->PushChild(left_get); join->PushChild(right_get); join->PushChild(pred); // Setup rule InnerJoinCommutativity rule; EXPECT_TRUE(rule.Check(join)); std::vector<std::shared_ptr<OpExpression>> outputs; rule.Transform(join, outputs); EXPECT_EQ(outputs.size(), 1); }
TEST_F(OptimizerRuleTests, SimpleCommutativeRuleTest) { // Build op plan node to match rule auto left_get = std::make_shared<OperatorExpression>(LogicalGet::make()); auto right_get = std::make_shared<OperatorExpression>(LogicalGet::make()); auto join = std::make_shared<OperatorExpression>(LogicalInnerJoin::make()); join->PushChild(left_get); join->PushChild(right_get); // Setup rule InnerJoinCommutativity rule; EXPECT_TRUE(rule.Check(join, nullptr)); std::vector<std::shared_ptr<OperatorExpression>> outputs; rule.Transform(join, outputs, nullptr); EXPECT_EQ(outputs.size(), 1); auto output_join = outputs[0]; EXPECT_EQ(output_join->Children()[0], right_get); EXPECT_EQ(output_join->Children()[1], left_get); }