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'))
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'))