Пример #1
0
    def test_visit_SelectQuery(self):
        st2 = Triple(Variable("d"), Variable("e"), Variable("f"))
        helper = SelectQueryHelper()
        expected = "SELECT WHERE{}"
        result = self.v.visit(helper.query)
        self.assertEqual(expected, result) 

        helper.set_limit("50")
        expected = "SELECT WHERE{}LIMIT 50"
        result = self.v.visit(helper.query)
        self.assertEqual(expected, result) 

        helper.add_triple_variables(st2)
        helper.add_filter(FunCall("regex", Variable("var"), '"regex"'))
        expected = "SELECT?e?f?d WHERE{?d ?e ?f.FILTER(regex(?var,\"regex\"))}LIMIT 50"
        result = self.v.visit(helper.query)
        self.assertEqual(expected, result) 
        self.assertNotEqual(None, Parse(result))

        helper.set_offset("2")
        expected = "SELECT?e?f?d WHERE{?d ?e ?f.FILTER(regex(?var,\"regex\"))}LIMIT 50 OFFSET 2"
        result = self.v.visit(helper.query)
        self.assertEqual(expected, result) 
        self.assertNotEqual(None, Parse(result))

        helper.add_optional(st2, st2)
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))

        helper.add_union([st2, st2], [st2], [st2])
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))

        helper.set_orderby("e")
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))

        helper.set_orderby("e")
        helper.query.modifiers = []
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))

        helper.add_filter_notbound(Variable("e")) 
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))

        helper.add_or_filter_regex({Variable("a"): "r1", Variable("b"): "r2"})
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))
Пример #2
0
    def test_visit_SelectQuery(self):
        st2 = Triple(Variable("d"), Variable("e"), Variable("f"))
        helper = SelectQueryHelper()
        expected = "SELECT WHERE{}"
        result = self.v.visit(helper.query)
        self.assertEqual(expected, result)

        helper.set_limit("50")
        expected = "SELECT WHERE{}LIMIT 50"
        result = self.v.visit(helper.query)
        self.assertEqual(expected, result)

        helper.add_triple_variables(st2)
        helper.add_filter(FunCall("regex", Variable("var"), '"regex"'))
        expected = "SELECT?e?f?d WHERE{?d ?e ?f.FILTER(regex(?var,\"regex\"))}LIMIT 50"
        result = self.v.visit(helper.query)
        self.assertEqual(expected, result)
        self.assertNotEqual(None, Parse(result))

        helper.set_offset("2")
        expected = "SELECT?e?f?d WHERE{?d ?e ?f.FILTER(regex(?var,\"regex\"))}LIMIT 50 OFFSET 2"
        result = self.v.visit(helper.query)
        self.assertEqual(expected, result)
        self.assertNotEqual(None, Parse(result))

        helper.add_optional(st2, st2)
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))

        helper.add_union([st2, st2], [st2], [st2])
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))

        helper.set_orderby("e")
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))

        helper.set_orderby("e")
        helper.query.modifiers = []
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))

        helper.add_filter_notbound(Variable("e"))
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))

        helper.add_or_filter_regex({Variable("a"): "r1", Variable("b"): "r2"})
        result = self.v.visit(helper.query, True)
        self.assertNotEqual(None, Parse(result))
Пример #3
0
class SelectQueryHelperTest(unittest.TestCase):
    def setUp(self):
        self.s = SelectQueryHelper()
        self.triple1 = Triple()
        self.triple1.subject = Variable("var1")
        self.triple1.property = RDFS.type
        self.triple1.object = DEB.Source
        self.triple2 = Triple()
        self.triple2.subject = Variable("var2")
        self.triple2.property = RDFS.type
        self.triple2.object = DEB.Binary
        self.triple3 = Triple()
        self.triple3.subject = Variable("var3")
        self.triple3.property = RDFS.type
        self.triple3.object = Variable("var4")

    def test_add_variable(self):
        self.s.add_variable("varname")
        self.s.add_variable("varname")
        self.assertEqual([Variable("varname")], self.s.query.variables)

    def test_add_triple(self):
        self.s.add_triple(self.triple1)
        self.s.add_triple(self.triple1)
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(self.triple1, self.s.query.whereclause.stmts[0])
        self.s.add_triple(self.triple2)
        self.assertEqual(2, len(self.s.query.whereclause.stmts))
        self.assertEqual(self.triple2, self.s.query.whereclause.stmts[1])

    def test_add_triple_variables(self):
        self.s.add_triple(self.triple3)
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(self.triple3, self.s.query.whereclause.stmts[0])
        varlist = [Variable("var3"), Variable("var4")]
        self.assertEqual(varlist.sort(), self.s.query.variables.sort())

    def test_push_triple(self):
        self.s.push_triple(\
            Variable("var1"), RDFS.type, DEB.Source)
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(self.triple1, self.s.query.whereclause.stmts[0])

    def test_push_triple_variables(self):
        self.s.push_triple_variables(\
            Variable("var3"), RDFS.type, Variable("var4"))
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(self.triple3, self.s.query.whereclause.stmts[0])
        varlist = [Variable("var3"), Variable("var4")]
        self.assertEqual(varlist.sort(), self.s.query.variables.sort())

    def test_add_optional(self):
        self.s.add_optional(self.triple1)
        opt1 = Optional(self.triple1)
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(opt1, self.s.query.whereclause.stmts[0])

        self.s.add_optional(self.triple1, self.triple2)
        opt2 = Optional(self.triple1, self.triple2)
        self.assertEqual(2, len(self.s.query.whereclause.stmts))
        self.assertEqual(opt2, self.s.query.whereclause.stmts[1])

    def test_add_filter(self):
        f1 = FunCall("regex", "arg1", "arg2")
        f2 = FunCall("regex", "arg3", "arg4")
        binexp = BinaryExpression(f1, "||", f2)
        self.s.add_filter(binexp)

    def test_add_union(self):
        st1 = Triple(Variable("a"), Variable("b"), Variable("c"))
        st2 = Triple(Variable("d"), Variable("e"), Variable("f"))
        gp1 = [st1, st2]
        gp2 = [st1]
        self.s.add_union(gp1, gp2)
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(2, len(self.s.query.whereclause.stmts[0].graphpatterns))
        self.assertEqual(2, len(self.s.query.whereclause.stmts[0].graphpatterns[0]))
        self.assertEqual(1, len(self.s.query.whereclause.stmts[0].graphpatterns[1]))
        self.assertRaises(Exception, self.s.add_union, gp1)

    def test_add_triple_variables(self):
        st1 = Triple(Variable("a"), Variable("b"), Variable("c"))
        self.s.add_triple_variables(st1)
        self.assertEqual(3, len(self.s.query.variables))

    def test_set_limit_and_offset(self):
        self.s.set_limit("2")
        self.s.set_offset("2")
        self.assertEqual(["2", "2"], [limit.value for limit in self.s.query.modifiers])

    def test_set_orderby(self):
        self.s.set_orderby("var")
        self.assertEqual(Variable("var"), self.s.query.orderby.variable)

    def test_set_from(self):
        uri = "http://some.where/graphs/graph"
        self.s.set_from(uri)
        self.assertEqual(URIRef(uri), self.s.query.fromgraph)
    
    def test_set_distinct(self):
        self.s.set_distinct()
        self.assertEqual(True, self.s.query.distinct)

    def test_str(self):
        expected = "SELECT WHERE{}"
        self.assertEqual(expected, str(self.s))

    def test_add_or_filter_regex(self):
        self.s.add_or_filter_regex({"a": "a1", "b": "b1", "c": "c1"})
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        b2 = BinaryExpression(FunCall("regex", "c", '"c1"', '"i"'), "||",\
                              FunCall("regex", "a", '"a1"', '"i"'))
        b1 = BinaryExpression(FunCall("regex", "b", '"b1"', '"i"'), "||", b2)
        f1 = Filter(b1)
        self.assertEqual(f1, self.s.query.whereclause.stmts[0])

        self.s.add_or_filter_regex({"a": "a1"})
        fc1 = FunCall("regex", "a", '"a1"', "\"i\"")
        f2 = Filter(fc1)
        self.assertEqual(2, len(self.s.query.whereclause.stmts))
        self.assertEqual(f2, self.s.query.whereclause.stmts[1])

    def test_add_filter_notbound(self):
        self.s.add_filter_notbound(Variable("a")) 
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        u1 = UnaryExpression(FunCall("bound", Variable("a")), "!")
        f1 = Filter(u1)
        self.assertEqual(f1, self.s.query.whereclause.stmts[0])

    def test_add_filter_regex_str_var(self):
        self.s.add_filter_regex_str_var(Variable("var"), "regex")
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        str = FunCall("str", Variable("var"))
        regex = FunCall("regex", str, '"regex"')
        f1 = Filter(regex)
        self.assertEqual(f1, self.s.query.whereclause.stmts[0])
Пример #4
0
class SelectQueryHelperTest(unittest.TestCase):
    def setUp(self):
        self.s = SelectQueryHelper()
        self.triple1 = Triple()
        self.triple1.subject = Variable("var1")
        self.triple1.property = RDFS.type
        self.triple1.object = DEB.Source
        self.triple2 = Triple()
        self.triple2.subject = Variable("var2")
        self.triple2.property = RDFS.type
        self.triple2.object = DEB.Binary
        self.triple3 = Triple()
        self.triple3.subject = Variable("var3")
        self.triple3.property = RDFS.type
        self.triple3.object = Variable("var4")

    def test_add_variable(self):
        self.s.add_variable("varname")
        self.s.add_variable("varname")
        self.assertEqual([Variable("varname")], self.s.query.variables)

    def test_add_triple(self):
        self.s.add_triple(self.triple1)
        self.s.add_triple(self.triple1)
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(self.triple1, self.s.query.whereclause.stmts[0])
        self.s.add_triple(self.triple2)
        self.assertEqual(2, len(self.s.query.whereclause.stmts))
        self.assertEqual(self.triple2, self.s.query.whereclause.stmts[1])

    def test_add_triple_variables(self):
        self.s.add_triple(self.triple3)
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(self.triple3, self.s.query.whereclause.stmts[0])
        varlist = [Variable("var3"), Variable("var4")]
        self.assertEqual(varlist.sort(), self.s.query.variables.sort())

    def test_push_triple(self):
        self.s.push_triple(\
            Variable("var1"), RDFS.type, DEB.Source)
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(self.triple1, self.s.query.whereclause.stmts[0])

    def test_push_triple_variables(self):
        self.s.push_triple_variables(\
            Variable("var3"), RDFS.type, Variable("var4"))
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(self.triple3, self.s.query.whereclause.stmts[0])
        varlist = [Variable("var3"), Variable("var4")]
        self.assertEqual(varlist.sort(), self.s.query.variables.sort())

    def test_add_optional(self):
        self.s.add_optional(self.triple1)
        opt1 = Optional(self.triple1)
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(opt1, self.s.query.whereclause.stmts[0])

        self.s.add_optional(self.triple1, self.triple2)
        opt2 = Optional(self.triple1, self.triple2)
        self.assertEqual(2, len(self.s.query.whereclause.stmts))
        self.assertEqual(opt2, self.s.query.whereclause.stmts[1])

    def test_add_filter(self):
        f1 = FunCall("regex", "arg1", "arg2")
        f2 = FunCall("regex", "arg3", "arg4")
        binexp = BinaryExpression(f1, "||", f2)
        self.s.add_filter(binexp)

    def test_add_union(self):
        st1 = Triple(Variable("a"), Variable("b"), Variable("c"))
        st2 = Triple(Variable("d"), Variable("e"), Variable("f"))
        gp1 = [st1, st2]
        gp2 = [st1]
        self.s.add_union(gp1, gp2)
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        self.assertEqual(2,
                         len(self.s.query.whereclause.stmts[0].graphpatterns))
        self.assertEqual(
            2, len(self.s.query.whereclause.stmts[0].graphpatterns[0]))
        self.assertEqual(
            1, len(self.s.query.whereclause.stmts[0].graphpatterns[1]))
        self.assertRaises(Exception, self.s.add_union, gp1)

    def test_add_triple_variables(self):
        st1 = Triple(Variable("a"), Variable("b"), Variable("c"))
        self.s.add_triple_variables(st1)
        self.assertEqual(3, len(self.s.query.variables))

    def test_set_limit_and_offset(self):
        self.s.set_limit("2")
        self.s.set_offset("2")
        self.assertEqual(["2", "2"],
                         [limit.value for limit in self.s.query.modifiers])

    def test_set_orderby(self):
        self.s.set_orderby("var")
        self.assertEqual(Variable("var"), self.s.query.orderby.variable)

    def test_set_from(self):
        uri = "http://some.where/graphs/graph"
        self.s.set_from(uri)
        self.assertEqual(URIRef(uri), self.s.query.fromgraph)

    def test_set_distinct(self):
        self.s.set_distinct()
        self.assertEqual(True, self.s.query.distinct)

    def test_str(self):
        expected = "SELECT WHERE{}"
        self.assertEqual(expected, str(self.s))

    def test_add_or_filter_regex(self):
        self.s.add_or_filter_regex({"a": "a1", "b": "b1", "c": "c1"})
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        b2 = BinaryExpression(FunCall("regex", "c", '"c1"', '"i"'), "||",\
                              FunCall("regex", "a", '"a1"', '"i"'))
        b1 = BinaryExpression(FunCall("regex", "b", '"b1"', '"i"'), "||", b2)
        f1 = Filter(b1)
        self.assertEqual(f1, self.s.query.whereclause.stmts[0])

        self.s.add_or_filter_regex({"a": "a1"})
        fc1 = FunCall("regex", "a", '"a1"', "\"i\"")
        f2 = Filter(fc1)
        self.assertEqual(2, len(self.s.query.whereclause.stmts))
        self.assertEqual(f2, self.s.query.whereclause.stmts[1])

    def test_add_filter_notbound(self):
        self.s.add_filter_notbound(Variable("a"))
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        u1 = UnaryExpression(FunCall("bound", Variable("a")), "!")
        f1 = Filter(u1)
        self.assertEqual(f1, self.s.query.whereclause.stmts[0])

    def test_add_filter_regex_str_var(self):
        self.s.add_filter_regex_str_var(Variable("var"), "regex")
        self.assertEqual(1, len(self.s.query.whereclause.stmts))
        str = FunCall("str", Variable("var"))
        regex = FunCall("regex", str, '"regex"')
        f1 = Filter(regex)
        self.assertEqual(f1, self.s.query.whereclause.stmts[0])