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.column_types = (self.number_type, self.number_type, self.text_type) self.left = Table(self.left_rows, self.column_types, ('one', 'two', 'three')) self.right = Table(self.right_rows, self.column_types, ('four', 'five', 'six')) 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.column_types = (self.number_type, self.number_type, self.text_type) self.left = Table(self.left_rows, self.column_types, ('one', 'two', 'three')) self.right = Table(self.right_rows, self.column_types, ('four', 'five', 'six')) 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'))