Exemplo n.º 1
0
class TestTableJoin(unittest.TestCase):
    def setUp(self):
        self.left_rows = (
            (1, 4, 'a'),
            (2, 3, 'b'),
            (None, 2, 'c')
        )

        self.right_rows = (
            (1, 4, 'a'),
            (2, 3, 'b'),
            (None, 2, 'c')
        )

        self.number_type = Number()
        self.text_type = Text()

        self.left_columns = (
            ('one', self.number_type),
            ('two', self.number_type),
            ('three', self.text_type)
        )

        self.right_columns = (
            ('four', self.number_type),
            ('five', self.number_type),
            ('six', self.text_type)
        )

        self.left = Table(self.left_rows, self.left_columns)
        self.right = Table(self.right_rows, self.right_columns)

    def test_inner_join(self):
        new_table = self.left.inner_join('one', self.right, 'four')

        self.assertEqual(len(new_table.rows), 3)
        self.assertEqual(len(new_table.columns), 6)

        self.assertSequenceEqual(new_table.rows[0], (1, 4, 'a', 1, 4, 'a'))
        self.assertSequenceEqual(new_table.rows[1], (2, 3, 'b', 2, 3, 'b'))
        self.assertSequenceEqual(new_table.rows[2], (None, 2, 'c', None, 2, 'c'))

    def test_inner_join2(self):
        new_table = self.left.inner_join('one', self.right, 'five')

        self.assertEqual(len(new_table.rows), 1)
        self.assertEqual(len(new_table.columns), 6)

        self.assertSequenceEqual(new_table.rows[0], (2, 3, 'b', None, 2, 'c'))

    def test_inner_join_func(self):
        new_table = self.left.inner_join(
            lambda left: '%i%s' % (left['two'], left['three']),
            self.right,
            lambda right: '%i%s' % (right['five'], right['six'])
        )

        self.assertEqual(len(new_table.rows), 3)
        self.assertEqual(len(new_table.columns), 6)

    def test_left_outer_join(self):
        new_table = self.left.left_outer_join('one', self.right, 'four')

        self.assertEqual(len(new_table.rows), 3)
        self.assertEqual(len(new_table.columns), 6)

        self.assertSequenceEqual(new_table.rows[0], (1, 4, 'a', 1, 4, 'a'))
        self.assertSequenceEqual(new_table.rows[1], (2, 3, 'b', 2, 3, 'b'))
        self.assertSequenceEqual(new_table.rows[2], (None, 2, 'c', None, 2, 'c'))

    def test_left_outer_join2(self):
        new_table = self.left.left_outer_join('one', self.right, 'five')

        self.assertEqual(len(new_table.rows), 3)
        self.assertEqual(len(new_table.columns), 6)

        self.assertSequenceEqual(new_table.rows[0], (1, 4, 'a', None, None, None))
        self.assertSequenceEqual(new_table.rows[1], (2, 3, 'b', None, 2, 'c'))
        self.assertSequenceEqual(new_table.rows[2], (None, 2, 'c', None, None, None))

    def test_left_outer_func(self):
        new_table = self.left.left_outer_join(
            lambda left: '%i%s' % (left['two'], left['three']),
            self.right,
            lambda right: '%i%s' % (right['five'], right['six'])
        )

        self.assertEqual(len(new_table.rows), 3)
        self.assertEqual(len(new_table.columns), 6)

        self.assertSequenceEqual(new_table.rows[0], (1, 4, 'a', 1, 4, 'a'))
        self.assertSequenceEqual(new_table.rows[1], (2, 3, 'b', 2, 3, 'b'))
        self.assertSequenceEqual(new_table.rows[2], (None, 2, 'c', None, 2, 'c'))
Exemplo n.º 2
0
class TestTableJoin(unittest.TestCase):
    def setUp(self):
        self.left_rows = ((1, 4, 'a'), (2, 3, 'b'), (None, 2, 'c'))

        self.right_rows = ((1, 4, 'a'), (2, 3, 'b'), (None, 2, 'c'))

        self.number_type = NumberType()
        self.text_type = TextType()

        self.left_columns = (('one', self.number_type),
                             ('two', self.number_type), ('three',
                                                         self.text_type))

        self.right_columns = (('four', self.number_type),
                              ('five', self.number_type), ('six',
                                                           self.text_type))

        self.left = Table(self.left_rows, self.left_columns)
        self.right = Table(self.right_rows, self.right_columns)

    def test_inner_join(self):
        new_table = self.left.inner_join('one', self.right, 'four')

        self.assertEqual(len(new_table.rows), 3)
        self.assertEqual(len(new_table.columns), 6)

        self.assertSequenceEqual(new_table.rows[0], (1, 4, 'a', 1, 4, 'a'))
        self.assertSequenceEqual(new_table.rows[1], (2, 3, 'b', 2, 3, 'b'))
        self.assertSequenceEqual(new_table.rows[2],
                                 (None, 2, 'c', None, 2, 'c'))

    def test_inner_join2(self):
        new_table = self.left.inner_join('one', self.right, 'five')

        self.assertEqual(len(new_table.rows), 1)
        self.assertEqual(len(new_table.columns), 6)

        self.assertSequenceEqual(new_table.rows[0], (2, 3, 'b', None, 2, 'c'))

    def test_inner_join_func(self):
        new_table = self.left.inner_join(
            lambda left: '%i%s' % (left['two'], left['three']), self.right,
            lambda right: '%i%s' % (right['five'], right['six']))

        self.assertEqual(len(new_table.rows), 3)
        self.assertEqual(len(new_table.columns), 6)

    def test_left_outer_join(self):
        new_table = self.left.left_outer_join('one', self.right, 'four')

        self.assertEqual(len(new_table.rows), 3)
        self.assertEqual(len(new_table.columns), 6)

        self.assertSequenceEqual(new_table.rows[0], (1, 4, 'a', 1, 4, 'a'))
        self.assertSequenceEqual(new_table.rows[1], (2, 3, 'b', 2, 3, 'b'))
        self.assertSequenceEqual(new_table.rows[2],
                                 (None, 2, 'c', None, 2, 'c'))

    def test_left_outer_join2(self):
        new_table = self.left.left_outer_join('one', self.right, 'five')

        self.assertEqual(len(new_table.rows), 3)
        self.assertEqual(len(new_table.columns), 6)

        self.assertSequenceEqual(new_table.rows[0],
                                 (1, 4, 'a', None, None, None))
        self.assertSequenceEqual(new_table.rows[1], (2, 3, 'b', None, 2, 'c'))
        self.assertSequenceEqual(new_table.rows[2],
                                 (None, 2, 'c', None, None, None))

    def test_left_outer_func(self):
        new_table = self.left.left_outer_join(
            lambda left: '%i%s' % (left['two'], left['three']), self.right,
            lambda right: '%i%s' % (right['five'], right['six']))

        self.assertEqual(len(new_table.rows), 3)
        self.assertEqual(len(new_table.columns), 6)

        self.assertSequenceEqual(new_table.rows[0], (1, 4, 'a', 1, 4, 'a'))
        self.assertSequenceEqual(new_table.rows[1], (2, 3, 'b', 2, 3, 'b'))
        self.assertSequenceEqual(new_table.rows[2],
                                 (None, 2, 'c', None, 2, 'c'))