Exemple #1
0
 def test_join_two_separate_relations(self):
     instring = 'alpha \\theta_join_{a1 = b1} beta;'
     forest = self.build(instring)
     left = RelationNode('alpha', self.schema)
     right = RelationNode('beta', self.schema)
     expected = ThetaJoinNode(left, right, 'a1 = b1')
     self.assertEqual(expected, forest[0])
Exemple #2
0
 def test_join_two_separate_relations(self):
     instring = 'alpha \\natural_join beta;'
     forest = self.build(instring)
     left = RelationNode('alpha', self.schema)
     right = RelationNode('beta', self.schema)
     expected = NaturalJoinNode(left, right)
     self.assertEqual(expected, forest[0])
Exemple #3
0
 def test_build_when_instring_has_multiple_relations(self):
     instring = 'numbers; letters;'
     forest = self.build(instring)
     self.assertEqual(2, len(forest))
     first = RelationNode('numbers', self.schema)
     second = RelationNode('letters', self.schema)
     self.assertEqual(first, forest[0])
     self.assertEqual(second, forest[1])
Exemple #4
0
 def test_join_three_separate_relations(self):
     instring = 'alpha \\join beta \\join gamma;'
     forest = self.build(instring)
     left = RelationNode('alpha', self.schema)
     middle = RelationNode('beta', self.schema)
     right = RelationNode('gamma', self.schema)
     intermediate = CrossJoinNode(left, middle)
     expected = CrossJoinNode(intermediate, right)
     self.assertEqual(expected, forest[0])
Exemple #5
0
 def test_theta_join_with_join(self):
     instring = 'alpha \\theta_join_{a1 = b1} beta \\join gamma;'
     forest = self.build(instring)
     left = RelationNode('alpha', self.schema)
     middle = RelationNode('beta', self.schema)
     right = RelationNode('gamma', self.schema)
     intermediate = ThetaJoinNode(left, middle, 'a1 = b1')
     expected = CrossJoinNode(intermediate, right)
     self.assertEqual(expected, forest[0])
Exemple #6
0
 def test_natural_join_with_join(self):
     instring = 'alpha \\natural_join beta \\join gamma;'
     forest = self.build(instring)
     left = RelationNode('alpha', self.schema)
     middle = RelationNode('beta', self.schema)
     right = RelationNode('gamma', self.schema)
     intermediate = NaturalJoinNode(left, middle)
     expected = CrossJoinNode(intermediate, right)
     self.assertEqual(expected, forest[0])
Exemple #7
0
 def test_join_three_separate_relations(self):
     instring = 'alpha \\theta_join_{a1 = b1} beta ' \
                '\\theta_join_{a1 = b1} gamma;'
     forest = self.build(instring)
     left = RelationNode('alpha', self.schema)
     middle = RelationNode('beta', self.schema)
     right = RelationNode('gamma', self.schema)
     intermediate = ThetaJoinNode(left, middle, 'a1 = b1')
     expected = ThetaJoinNode(intermediate, right, 'a1 = b1')
     self.assertEqual(expected, forest[0])
Exemple #8
0
 def test_project_with_all_attr(self):
     attr = self.schema.get_attributes('magic_wand')
     instring = '\\project_{' + ', '.join(attr) + '} magic_wand;'
     forest = self.build(instring)
     child = RelationNode('magic_wand', self.schema)
     expected = ProjectNode(child, attr)
     self.assertEqual(expected, forest[0])
Exemple #9
0
 def setUp(self):
     self.schema = Schema({
         'alpha': ['a1'],
         'beta': ['b1', 'b2'],
         'gamma': ['c1', 'c2', 'c3'],
         'twin': ['t1', 't2', 't3'],
         'twin_prime': ['t1', 't2', 't3'],
         'ambiguous': ['d1', 'd1']
     })
     self.alpha = RelationNode('alpha', self.schema)
     self.beta = RelationNode('beta', self.schema)
     self.gamma = RelationNode('gamma', self.schema)
     self.twin = RelationNode('twin', self.schema)
     self.twin_prime = RelationNode('twin_prime', self.schema)
     self.ambiguous = RelationNode('ambiguous', self.schema)
Exemple #10
0
 def test_project_with_two_attr(self):
     instring = '\project_{owner, wood} magic_wand;'
     forest = self.build(instring)
     child = RelationNode('magic_wand', self.schema)
     expected = ProjectNode(child, ['owner', 'wood'])
     self.assertEqual(expected, forest[0])
Exemple #11
0
 def test_build_when_instring_is_single_relation(self):
     forest = self.build('letters;')
     self.assertEqual(1, len(forest))
     expected = RelationNode('letters', self.schema)
     self.assertEqual(expected, forest[0])
Exemple #12
0
 def test_exception_when_join_two_identical_relations(self):
     left = RelationNode('alpha', self.schema)
     right = RelationNode('alpha', self.schema)
     self.assertRaises(RelationReferenceError, NaturalJoinNode, left, right)
Exemple #13
0
 def test_attributes_when_name_is_in_schema(self):
     expected = AttributeList(self.schema.get_attributes('alpha'),
                              'alpha').to_list()
     node = RelationNode('alpha', self.schema)
     self.assertEqual(expected, node.attributes.to_list())
Exemple #14
0
 def test_operator_from_init(self):
     expected = Operator.relation
     actual = RelationNode('alpha', self.schema).operator
     self.assertEqual(expected, actual)