示例#1
0
    def test_should_insert_row_in_table(self):
        dummy_info = TableInfo('MyVideo')
        dummy_table = TableRef(dummy_info)

        columns = [
            DataFrameColumn('Frame_ID', ColumnType.INTEGER),
            DataFrameColumn('Frame_Path', ColumnType.TEXT, array_dimensions=50)
        ]
        plan_node = CreatePlan(dummy_table, columns, False)

        createExec = CreateExecutor(plan_node)
        url = createExec.exec()

        parser = Parser()
        insert_query = """INSERT INTO MyVideo (Frame_ID, Frame_Path)
                                    VALUES    (1, '/mnt/frames/1.png');
                        """

        eva_statement_list = parser.parse(insert_query)
        insert_stmt = eva_statement_list[0]
        convertor = StatementToPlanConvertor()
        convertor.visit(insert_stmt)
        logical_plan_node = convertor.plan
        print("logical", logical_plan_node)
        phy_plan_node = InsertPlan(logical_plan_node.video_catalog_id,
                                   logical_plan_node.column_list,
                                   logical_plan_node.value_list)

        insertExec = InsertExecutor(phy_plan_node)
        insertExec.exec()

        # test if we have a added the in our storage
        df = load_dataframe(url)
        self.assertEqual(df.collect()[0][0], 1)
        self.assertEqual(df.collect()[0][1], "'/mnt/frames/1.png'")
示例#2
0
    def test_visit_should_call_load_data(self):
        stmt = MagicMock(spec=LoadDataStatement)
        convertor = StatementToPlanConvertor()
        mock = MagicMock()
        convertor.visit_load_data = mock

        convertor.visit(stmt)
        mock.assert_called_once()
        mock.assert_called_with(stmt)
示例#3
0
    def test_visit_should_call_create(self):
        stmt = MagicMock(spec=CreateTableStatement)
        convertor = StatementToPlanConvertor()
        mock = MagicMock()
        convertor.visit_create = mock

        convertor.visit(stmt)
        mock.assert_called_once()
        mock.assert_called_with(stmt)
示例#4
0
    def test_should_visit_select_if_nested_query(self, mock_p, mock_c, mock_d):
        m = MagicMock()
        mock_p.return_value = mock_c.return_value = mock_d.return_value = m
        stmt = Parser().parse(""" SELECT id FROM (SELECT data, id FROM video \
            WHERE data > 2) WHERE id>3;""")[0]
        converter = StatementToPlanConvertor()
        actual_plan = converter.visit(stmt)
        plans = [LogicalProject([TupleValueExpression('id')])]
        plans.append(
            LogicalFilter(
                ComparisonExpression(ExpressionType.COMPARE_GREATER,
                                     TupleValueExpression('id'),
                                     ConstantValueExpression(3))))
        plans.append(LogicalQueryDerivedGet())
        plans.append(
            LogicalProject(
                [TupleValueExpression('data'),
                 TupleValueExpression('id')]))
        plans.append(
            LogicalFilter(
                ComparisonExpression(ExpressionType.COMPARE_GREATER,
                                     TupleValueExpression('data'),
                                     ConstantValueExpression(2))))

        plans.append(LogicalGet(TableRef(TableInfo('video')), m))
        expected_plan = None
        for plan in reversed(plans):
            if expected_plan:
                plan.append_child(expected_plan)
            expected_plan = plan
        self.assertEqual(expected_plan, actual_plan)
        wrong_plan = plans[0]
        for plan in plans[1:]:
            wrong_plan.append_child(plan)
        self.assertNotEqual(wrong_plan, actual_plan)
    def test_visit_should_call_insert(self):
        stmt = MagicMock(spec=InsertTableStatement)
        convertor = StatementToPlanConvertor()
        mock = MagicMock()
        convertor.visit_insert = mock

        actual = convertor.visit(stmt)
        mock.assert_called_once()
        mock.assert_called_with(stmt)
    def test_visit_should_call_create_udf(self):
        stmt = MagicMock(spec=CreateUDFStatement)
        convertor = StatementToPlanConvertor()
        mock = MagicMock()
        convertor.visit_create_udf = mock

        actual = convertor.visit(stmt)
        mock.assert_called_once()
        mock.assert_called_with(stmt)
示例#7
0
def handle_request(transport, query):
    """
        Reads a request from a client and processes it

        If user inputs 'quit' stops the event loop
        otherwise just echoes user input
    """
    parser = Parser()
    eva_statement = parser.parse(query)
    insert_statement = eva_statement[0]

    LoggingManager().log("Result from the parser: " + str(insert_statement))

    convertor = StatementToPlanConvertor()
    convertor.visit(insert_statement)

    convertor.plan

    eva_statement = parser.parse(query)
    response_message = ""

    for i in range(len(eva_statement)):

        LoggingManager().log("Parse Tree: " + str(eva_statement[i]))
        logical_plan = StatementToPlanConvertor().visit(eva_statement[i])
        physical_plan = PlanGenerator().build(logical_plan)
        df = PlanExecutor(physical_plan).execute_plan()
        statement_response_message = ','.join(map(str, df.collect()))
        response_message += statement_response_message

    LoggingManager().log('Response to client: --|' +
                         str(response_message) +
                         '|--')

    data = response_message.encode('ascii')
    transport.write(data)

    return response_message
    def test_visit_select_orderby(self, mock_p, mock_c, mock_d):
        m = MagicMock()
        mock_p.return_value = mock_c.return_value = mock_d.return_value = m
        stmt = Parser().parse(""" SELECT data, id FROM video \
            WHERE data > 2 ORDER BY data, id DESC;""")[0]

        converter = StatementToPlanConvertor()
        actual_plan = converter.visit(stmt)
        plans = []

        plans.append(
            LogicalOrderBy([
                (TupleValueExpression('data'), ParserOrderBySortType.ASC),
                (TupleValueExpression('id'), ParserOrderBySortType.DESC)
            ]))

        plans.append(
            LogicalProject(
                [TupleValueExpression('data'),
                 TupleValueExpression('id')]))

        plans.append(
            LogicalFilter(
                ComparisonExpression(ExpressionType.COMPARE_GREATER,
                                     TupleValueExpression('data'),
                                     ConstantValueExpression(2))))

        plans.append(LogicalGet(TableRef(TableInfo('video')), m))

        expected_plan = None
        for plan in reversed(plans):
            if expected_plan:
                plan.append_child(expected_plan)
            expected_plan = plan

        self.assertEqual(expected_plan, actual_plan)

        wrong_plan = plans[0]
        for plan in plans[1:]:
            wrong_plan.append_child(plan)
        self.assertNotEqual(wrong_plan, actual_plan)
示例#9
0
    def test_should_visit_select_union_if_union_query(self, mock_p, mock_c,
                                                      mock_d):
        m = MagicMock()
        mock_p.return_value = mock_c.return_value = mock_d.return_value = m
        stmt = Parser().parse(""" SELECT id FROM video WHERE id>3
                              UNION ALL
                              SELECT id FROM video WHERE id<=3;""")[0]
        converter = StatementToPlanConvertor()
        actual_plan = converter.visit(stmt)
        left_plans = [LogicalProject([TupleValueExpression('id')])]
        left_plans.append(
            LogicalFilter(
                ComparisonExpression(ExpressionType.COMPARE_GREATER,
                                     TupleValueExpression('id'),
                                     ConstantValueExpression(3))))
        left_plans.append(LogicalGet(TableRef(TableInfo('video')), m))

        def reverse_plan(plans):
            return_plan = None
            for plan in reversed(plans):
                if return_plan:
                    plan.append_child(return_plan)
                return_plan = plan
            return return_plan

        expect_left_plan = reverse_plan(left_plans)

        right_plans = [LogicalProject([TupleValueExpression('id')])]
        right_plans.append(
            LogicalFilter(
                ComparisonExpression(ExpressionType.COMPARE_LEQ,
                                     TupleValueExpression('id'),
                                     ConstantValueExpression(3))))
        right_plans.append(LogicalGet(TableRef(TableInfo('video')), m))
        expect_right_plan = reverse_plan(right_plans)
        expected_plan = LogicalUnion(True)
        expected_plan.append_child(expect_right_plan)
        expected_plan.append_child(expect_left_plan)

        self.assertEqual(expected_plan, actual_plan)
    def test_visit_select_sample(self, mock_p, mock_c, mock_d):
        m = MagicMock()
        mock_p.return_value = mock_c.return_value = mock_d.return_value = m
        stmt = Parser().parse(""" SELECT data, id FROM video SAMPLE 2 \
                   WHERE id > 2 LIMIT 3;""")[0]

        converter = StatementToPlanConvertor()
        actual_plan = converter.visit(stmt)
        plans = []

        plans.append(LogicalLimit(ConstantValueExpression(3)))

        plans.append(
            LogicalProject(
                [TupleValueExpression('data'),
                 TupleValueExpression('id')]))

        plans.append(
            LogicalFilter(
                ComparisonExpression(ExpressionType.COMPARE_GREATER,
                                     TupleValueExpression('id'),
                                     ConstantValueExpression(2))))

        plans.append(LogicalSample(ConstantValueExpression(2)))

        plans.append(
            LogicalGet(
                TableRef(TableInfo('video'), ConstantValueExpression(2)), m))

        expected_plan = None
        for plan in reversed(plans):
            if expected_plan:
                plan.append_child(expected_plan)
            expected_plan = plan

        self.assertEqual(expected_plan, actual_plan)