예제 #1
0
 def test_visit_should_call_drop(self):
     stmt = MagicMock(spec=DropTableStatement)
     convertor = StatementToPlanConvertor()
     mock = MagicMock()
     convertor.visit_drop = mock
     convertor.visit(stmt)
     mock.assert_called_once()
     mock.assert_called_with(stmt)
예제 #2
0
    def test_visit_projection_should_add_logical_predicate(
            self, mock_lproject):
        converter = StatementToPlanConvertor()
        projects = MagicMock()

        converter._visit_projection(projects)
        mock_lproject.assert_called_with(projects)
        mock_lproject.return_value.append_child.assert_called()
        self.assertEqual(mock_lproject.return_value, converter._plan)
예제 #3
0
    def test_visit_select_predicate_should_add_logical_filter(
            self, mock_lfilter):
        converter = StatementToPlanConvertor()
        select_predicate = MagicMock()
        converter._visit_select_predicate(select_predicate)

        mock_lfilter.assert_called_with(select_predicate)
        mock_lfilter.return_value.append_child.assert_called()
        self.assertEqual(mock_lfilter.return_value, converter._plan)
예제 #4
0
 def test_visit_table_ref_should_create_logical_get_opr(self, mock_lget):
     converter = StatementToPlanConvertor()
     table_ref = MagicMock(spec=TableRef, alias="alias")
     table_ref.is_select.return_value = False
     table_ref.sample_freq = None
     converter.visit_table_ref(table_ref)
     mock_lget.assert_called_with(table_ref, table_ref.table.table_obj,
                                  "alias")
     self.assertEqual(mock_lget.return_value, converter._plan)
예제 #5
0
    def test_visit_should_call_create_udf(self):
        stmt = MagicMock(spec=CreateUDFStatement)
        convertor = StatementToPlanConvertor()
        mock = MagicMock()
        convertor.visit_create_udf = mock

        convertor.visit(stmt)
        mock.assert_called_once()
        mock.assert_called_with(stmt)
예제 #6
0
def execute_query(query) -> Iterator[Batch]:
    """
    Execute the query and return a result generator.
    """
    stmt = Parser().parse(query)[0]
    try:
        StatementBinder(StatementBinderContext()).bind(stmt)
    except Exception as error:
        raise RuntimeError(f'Binder failed: {error}')
    l_plan = StatementToPlanConvertor().visit(stmt)
    p_plan = PlanGenerator().build(l_plan)
    return PlanExecutor(p_plan).execute_plan()
예제 #7
0
    def test_visit_select_should_not_call_visits_for_null_values(self):
        converter = StatementToPlanConvertor()
        converter.visit_table_ref = MagicMock()
        converter._visit_projection = MagicMock()
        converter._visit_select_predicate = MagicMock()
        converter._visit_union = MagicMock()

        statement = SelectStatement()

        converter.visit_select(statement)

        converter.visit_table_ref.assert_not_called()
        converter._visit_projection.assert_not_called()
        converter._visit_select_predicate.assert_not_called()
예제 #8
0
 def test_visit_create_udf(self, mock, l_create_udf_mock):
     convertor = StatementToPlanConvertor()
     stmt = MagicMock()
     stmt.name = "name"
     stmt.if_not_exists = True
     stmt.inputs = ["inp"]
     stmt.outputs = ["out"]
     stmt.impl_path = "tmp.py"
     stmt.udf_type = "classification"
     mock.side_effect = ["inp", "out"]
     convertor.visit_create_udf(stmt)
     mock.assert_any_call(stmt.inputs, True)
     mock.assert_any_call(stmt.outputs, False)
     l_create_udf_mock.assert_called_once()
     l_create_udf_mock.assert_called_with(
         stmt.name,
         stmt.if_not_exists,
         "inp",
         "out",
         stmt.impl_path,
         stmt.udf_type,
     )
예제 #9
0
    def test_visit_select_should_call_appropriate_visit_methods(self):
        converter = StatementToPlanConvertor()
        converter.visit_table_ref = MagicMock()
        converter._visit_projection = MagicMock()
        converter._visit_select_predicate = MagicMock()
        converter._visit_union = MagicMock()

        statement = MagicMock()
        statement.from_table = MagicMock(spec=TableRef)
        converter.visit_select(statement)

        converter.visit_table_ref.assert_called_with(statement.from_table)
        converter._visit_projection.assert_called_with(statement.target_list)
        converter._visit_select_predicate.assert_called_with(
            statement.where_clause)