Beispiel #1
0
def evalModify(ctx, u):

    originalctx = ctx

    # Using replaces the dataset for evaluating the where-clause
    if u.using:
        otherDefault = False
        for d in u.using:
            if d.default:

                if not otherDefault:
                    # replace current default graph
                    dg = Graph()
                    ctx = ctx.pushGraph(dg)
                    otherDefault = True

                ctx.load(d.default, default=True)

            elif d.named:
                g = d.named
                ctx.load(g, default=False)

    # "The WITH clause provides a convenience for when an operation
    # primarily refers to a single graph. If a graph name is specified
    # in a WITH clause, then - for the purposes of evaluating the
    # WHERE clause - this will define an RDF Dataset containing a
    # default graph with the specified name, but only in the absence
    # of USING or USING NAMED clauses. In the presence of one or more
    # graphs referred to in USING clauses and/or USING NAMED clauses,
    # the WITH clause will be ignored while evaluating the WHERE
    # clause."
    if not u.using and u.withClause:
        g = ctx.dataset.get_context(u.withClause)
        ctx = ctx.pushGraph(g)

    res = evalPart(ctx, u.where)

    if u.using:
        if otherDefault:
            ctx = originalctx  # restore original default graph
        if u.withClause:
            g = ctx.dataset.get_context(u.withClause)
            ctx = ctx.pushGraph(g)

    for c in res:
        dg = ctx.graph
        if u.delete:
            dg -= _fillTemplate(u.delete.triples, c)

            for g, q in u.delete.quads.items():
                cg = ctx.dataset.get_context(c.get(g))
                cg -= _fillTemplate(q, c)

        if u.insert:
            dg += _fillTemplate(u.insert.triples, c)

            for g, q in u.insert.quads.items():
                cg = ctx.dataset.get_context(c.get(g))
                cg += _fillTemplate(q, c)
Beispiel #2
0
def evalModify(ctx, u):

    originalctx = ctx

    # Using replaces the dataset for evaluating the where-clause
    if u.using:
        otherDefault = False
        for d in u.using:
            if d.default:

                if not otherDefault:
                    # replace current default graph
                    dg = Graph()
                    ctx = ctx.pushGraph(dg)
                    otherDefault = True

                ctx.load(d.default, default=True)

            elif d.named:
                g = d.named
                ctx.load(g, default=False)

    # "The WITH clause provides a convenience for when an operation
    # primarily refers to a single graph. If a graph name is specified
    # in a WITH clause, then - for the purposes of evaluating the
    # WHERE clause - this will define an RDF Dataset containing a
    # default graph with the specified name, but only in the absence
    # of USING or USING NAMED clauses. In the presence of one or more
    # graphs referred to in USING clauses and/or USING NAMED clauses,
    # the WITH clause will be ignored while evaluating the WHERE
    # clause."
    if not u.using and u.withClause:
        g = ctx.dataset.get_context(u.withClause)
        ctx = ctx.pushGraph(g)

    res = evalPart(ctx, u.where)

    if u.using:
        if otherDefault:
            ctx = originalctx  # restore original default graph
        if u.withClause:
            g = ctx.dataset.get_context(u.withClause)
            ctx = ctx.pushGraph(g)

    for c in res:
        dg = ctx.graph
        if u.delete:
            dg -= _fillTemplate(u.delete.triples, c)

            for g, q in iteritems(u.delete.quads):
                cg = ctx.dataset.get_context(c.get(g))
                cg -= _fillTemplate(q, c)

        if u.insert:
            dg += _fillTemplate(u.insert.triples, c)

            for g, q in iteritems(u.insert.quads):
                cg = ctx.dataset.get_context(c.get(g))
                cg += _fillTemplate(q, c)
Beispiel #3
0
def Builtin_EXISTS(e, ctx):
    # damn...
    from rdflib.plugins.sparql.evaluate import evalPart

    exists = e.name == "Builtin_EXISTS"

    ctx = ctx.ctx.thaw(ctx)  # hmm
    for x in evalPart(ctx, e.graph):
        return Literal(exists)
    return Literal(not exists)
Beispiel #4
0
def Builtin_EXISTS(e, ctx):
    # damn...
    from rdflib.plugins.sparql.evaluate import evalPart

    exists = e.name == 'Builtin_EXISTS'

    ctx = ctx.ctx.thaw(ctx)  # hmm
    for x in evalPart(ctx, e.graph):
        return Literal(exists)
    return Literal(not exists)
Beispiel #5
0
def evalModify(ctx, u):
    originalctx = ctx

    res = {}
    res["type_"] = "MODIFY"
    res["delta"] = {}

    # Using replaces the dataset for evaluating the where-clause
    if u.using:
        otherDefault = False
        for d in u.using:
            if d.default:

                if not otherDefault:
                    # replace current default graph
                    dg = Graph()
                    ctx = ctx.pushGraph(dg)
                    otherDefault = True

                ctx.load(d.default, default=True)

            elif d.named:
                g = d.named
                ctx.load(g, default=False)

    # "The WITH clause provides a convenience for when an operation
    # primarily refers to a single graph. If a graph name is specified
    # in a WITH clause, then - for the purposes of evaluating the
    # WHERE clause - this will define an RDF Dataset containing a
    # default graph with the specified name, but only in the absence
    # of USING or USING NAMED clauses. In the presence of one or more
    # graphs referred to in USING clauses and/or USING NAMED clauses,
    # the WITH clause will be ignored while evaluating the WHERE
    # clause."
    graphName = 'default'
    if not u.using and u.withClause:
        g = ctx.dataset.get_context(u.withClause)
        graphName = str(g.identifier)
        ctx = ctx.pushGraph(g)

    _res = evalPart(ctx, u.where)

    if u.using:
        if otherDefault:
            ctx = originalctx  # restore original default graph
        if u.withClause:
            g = ctx.dataset.get_context(u.withClause)
            graphName = str(g.identifier)
            ctx = ctx.pushGraph(g)

    for c in _res:
        dg = ctx.graph
        if u.delete:
            filled, filled_delta = tee(_fillTemplate(u.delete.triples, c))
            _append(res["delta"], graphName, 'removals', list(filled_delta))
            dg -= filled

            for g, q in u.delete.quads.items():
                cg = ctx.dataset.get_context(c.get(g))
                filledq, filledq_delta = tee(_fillTemplate(q, c))
                _append(res["delta"], cg.identifier, 'removals', list(filledq_delta))
                cg -= filledq

        if u.insert:
            filled, filled_delta = tee(_fillTemplate(u.insert.triples, c))
            _append(res["delta"], graphName, 'additions', list(filled_delta))
            dg += filled

            for g, q in u.insert.quads.items():
                cg = ctx.dataset.get_context(c.get(g))
                filledq, filledq_delta = tee(_fillTemplate(q, c))
                _append(res["delta"], cg.identifier, 'additions', list(filledq_delta))
                cg += filledq

    return res
Beispiel #6
0
 def patchedEvalUnion(ctx, union):
     for x in evaluate.evalPart(ctx, union.p1):
         yield x
     for x in evaluate.evalPart(ctx, union.p2):
         yield x
Beispiel #7
0
 def patchedEvalUnion(ctx, union):
     for x in evaluate.evalPart(ctx, union.p1):
         yield x
     for x in evaluate.evalPart(ctx, union.p2):
         yield x
Beispiel #8
0
def evalModify(ctx, u):
    originalctx = ctx

    res = {}
    res["type"] = "MODIFY"
    res["delta"] = {}

    # Using replaces the dataset for evaluating the where-clause
    if u.using:
        otherDefault = False

        for d in u.using:
            if d.default:

                if not otherDefault:
                    # replace current default graph
                    dg = Graph()
                    ctx = ctx.pushGraph(dg)
                    otherDefault = True

                ctx.load(d.default, default=True)

            # TODO re-enable original behaviour if USING NAMED works with named graphs
            # https://github.com/AKSW/QuitStore/issues/144
            elif d.named:
                if otherDefault:
                    ctx = originalctx  # restore original default graph
                raise UnSupportedQuery
            #     g = d.named
            #     ctx.load(g, default=False)

    # "The WITH clause provides a convenience for when an operation
    # primarily refers to a single graph. If a graph name is specified
    # in a WITH clause, then - for the purposes of evaluating the
    # WHERE clause - this will define an RDF Dataset containing a
    # default graph with the specified name, but only in the absence
    # of USING or USING NAMED clauses. In the presence of one or more
    # graphs referred to in USING clauses and/or USING NAMED clauses,
    # the WITH clause will be ignored while evaluating the WHERE
    # clause."
    graphName = 'default'
    if not u.using and u.withClause:
        g = ctx.dataset.get_context(u.withClause)
        graphName = str(g.identifier)
        ctx = ctx.pushGraph(g)

    _res = evalPart(ctx, u.where)

    if u.using:
        if otherDefault:
            ctx = originalctx  # restore original default graph
        if u.withClause:
            g = ctx.dataset.get_context(u.withClause)
            graphName = str(g.identifier)
            ctx = ctx.pushGraph(g)

    for c in _res:
        dg = ctx.graph
        if u.delete:
            filled, filled_delta = tee(_fillTemplate(u.delete.triples, c))
            _append(res["delta"], graphName, 'removals', list(filled_delta))
            dg -= filled

            for g, q in u.delete.quads.items():
                cg = ctx.dataset.get_context(c.get(g))
                filledq, filledq_delta = tee(_fillTemplate(q, c))
                _append(res["delta"], cg.identifier, 'removals', list(filledq_delta))
                cg -= filledq

        if u.insert:
            filled, filled_delta = tee(_fillTemplate(u.insert.triples, c))
            _append(res["delta"], graphName, 'additions', list(filled_delta))
            dg += filled

            for g, q in u.insert.quads.items():
                cg = ctx.dataset.get_context(c.get(g))
                filledq, filledq_delta = tee(_fillTemplate(q, c))
                _append(res["delta"], cg.identifier, 'additions', list(filledq_delta))
                cg += filledq

    return res