def test_should_just_get_plan_with_storage_if_no_predicate_and_tlist(self): logical_plan = LogicalGet("video", 1) plan = ScanGenerator().build(logical_plan) self.assertTrue(isinstance(plan, SeqScanPlan)) self.assertEqual(None, plan.predicate) self.assertEqual(None, plan.columns) self.assertEqual(PlanNodeType.STORAGE_PLAN, plan.children[0].node_type) self.assertEqual(1, plan.children[0].video)
def build(self, logical_plan: Operator): if logical_plan.type in self._SCAN_NODE_TYPES: return ScanGenerator().build(logical_plan) if logical_plan.type is self._INSERT_NODE_TYPE: return InsertGenerator().build(logical_plan) if logical_plan.type is self._CREATE_NODE_TYPE: return CreateGenerator().build(logical_plan) if logical_plan.type is self._CREATE_UDF_NODE_TYPE: return CreateUDFGenerator().build(logical_plan)
def test_should_return_correct_plan_tree_for_input_logical_tree(self): logical_plan = LogicalProject( [1, 2], [LogicalFilter("a", [LogicalGet("video", 1)])]) plan = ScanGenerator().build(logical_plan) self.assertTrue(isinstance(plan, SeqScanPlan)) self.assertEqual("a", plan.predicate) self.assertEqual([1, 2], plan.columns) self.assertEqual(PlanNodeType.STORAGE_PLAN, plan.children[0].node_type) self.assertEqual(1, plan.children[0].video)
def test_should_return_correct_plan_tree_for_limit_logical_tree(self): # SELECT data, id FROM video limit 5; logical_plan = LogicalLimit(ConstantValueExpression(5)) plan = ScanGenerator().build(logical_plan) self.assertTrue(isinstance(plan, LimitPlan)) self.assertTrue( isinstance(plan.limit_expression, ConstantValueExpression)) self.assertEqual(plan.limit_value, 5)
def test_should_return_correct_plan_tree_for_orderby_logical_tree(self): # SELECT data, id FROM video ORDER BY data, id DESC; logical_plan = LogicalOrderBy([ (TupleValueExpression('data'), ParserOrderBySortType.ASC), (TupleValueExpression('id'), ParserOrderBySortType.DESC) ]) plan = ScanGenerator().build(logical_plan) self.assertTrue(isinstance(plan, OrderByPlan)) self.assertEqual(TupleValueExpression('data'), plan.orderby_list[0][0]) self.assertEqual(ParserOrderBySortType.ASC, plan.orderby_list[0][1]) self.assertEqual(TupleValueExpression('id'), plan.orderby_list[1][0]) self.assertEqual(ParserOrderBySortType.DESC, plan.orderby_list[1][1])
def test_should_just_get_plan_with_storage_if_no_predicate_and_tlist(self): logical_plan = LogicalGet("video", 1) plan = ScanGenerator().build(logical_plan) self.assertTrue(isinstance(plan, StoragePlan)) self.assertEqual(1, plan.video)