/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.tdb.transaction; import static org.apache.jena.query.ReadWrite.READ ; import static org.apache.jena.query.ReadWrite.WRITE ; import org.apache.jena.atlas.junit.BaseTest ; import org.apache.jena.atlas.lib.StrUtils ; import org.apache.jena.query.* ; import org.apache.jena.sparql.core.Quad ; import org.apache.jena.sparql.sse.SSE ; import org.apache.jena.tdb.TDB ; import org.apache.jena.tdb.TDBFactory ; import org.apache.jena.update.* ; import org.junit.* ; /** Tests of transactions and the TDB union graph */ public class TestTransactionUnionGraph extends BaseTest { private Dataset ds ; @Before public void before() { ds = TDBFactory.createDataset() ; ds.asDatasetGraph().add(SSE.parseQuad("(<g> <s> <p> 1)")) ; } @After public void after() { } @Test public void uniontxn_global_r() { ARQ.getContext().setTrue(TDB.symUnionDefaultGraph) ; test(ReadWrite.READ) ; ARQ.getContext().unset(TDB.symUnionDefaultGraph) ; } @Test public void uniontxn_global_w() { ARQ.getContext().setTrue(TDB.symUnionDefaultGraph) ; test(ReadWrite.WRITE) ; ARQ.getContext().unset(TDB.symUnionDefaultGraph) ; } @Test public void uniontxn_ds_r_1() { ds.getContext().setTrue(TDB.symUnionDefaultGraph) ; test(ReadWrite.READ) ; ds.getContext().unset(TDB.symUnionDefaultGraph) ; } @Test public void uniontxn_ds_w_1() { ds.getContext().setTrue(TDB.symUnionDefaultGraph) ; test(ReadWrite.WRITE) ; ds.getContext().unset(TDB.symUnionDefaultGraph) ; } // Set after a transaction. @Test public void uniontxn_ds_rr() { ds.begin(READ) ; ds.commit(); ds.end() ; ds.getContext().setTrue(TDB.symUnionDefaultGraph) ; test(ReadWrite.READ) ; //ds.getContext().unset(TDB.symUnionDefaultGraph) ; } @Test public void uniontxn_ds_wr() { ds.begin(WRITE) ; ds.commit(); ds.end() ; ds.getContext().setTrue(TDB.symUnionDefaultGraph) ; test(ReadWrite.READ) ; //ds.getContext().unset(TDB.symUnionDefaultGraph) ; } @Test public void uniontxn_ds_ww() { ds.begin(WRITE) ; ds.commit(); ds.end() ; ds.getContext().setTrue(TDB.symUnionDefaultGraph) ; test(ReadWrite.WRITE) ; //ds.getContext().unset(TDB.symUnionDefaultGraph) ; } @Test public void uniontxn_ds_rw() { ds.begin(READ) ; ds.commit(); ds.end() ; ds.getContext().setTrue(TDB.symUnionDefaultGraph) ; test(ReadWrite.WRITE) ; //ds.getContext().unset(TDB.symUnionDefaultGraph) ; } @Test public void uniontxn_update() { String x = StrUtils.strjoinNL("BASE <http://example/>", "CLEAR ALL ; ", "INSERT DATA { GRAPH <urn:g> { <s> <p> 1}} ; ", "INSERT { GRAPH <urn:g99> { ?s ?p 99} } WHERE { ?s ?p 1 }" ) ; Dataset ds = TDBFactory.createDataset() ; ds.getContext().setTrue(TDB.symUnionDefaultGraph) ; ds.begin(WRITE) ; UpdateRequest req = UpdateFactory.create(x) ; UpdateAction.execute(req, ds) ; ds.commit() ; ds.end() ; ds.begin(READ) ; assertEquals(1, ds.getNamedModel("urn:g99").size()) ; assertEquals(1, ds.getNamedModel("urn:g").size()) ; assertEquals(2, ds.getNamedModel(Quad.unionGraph.getURI()).size()) ; ds.end() ; } private void test(ReadWrite mode) { ds.begin(mode) ; Query q = QueryFactory.create("SELECT * { { ?s ?p ?o } UNION { GRAPH ?g { ?s ?p ?o }}}") ; QueryExecution qExec = QueryExecutionFactory.create(q, ds) ; long count = ResultSetFormatter.consume(qExec.execSelect()) ; ds.commit() ; ds.end() ; assertEquals(2, count) ; } @Test public void uniontxn05() { test2(READ) ; } @Test public void uniontxn06() { test2(WRITE) ; } // Sets the context of the execution private void test2(ReadWrite mode) { ds.begin(mode) ; Query q = QueryFactory.create("SELECT * { { ?s ?p ?o } UNION { GRAPH ?g { ?s ?p ?o }}}") ; QueryExecution qExec = QueryExecutionFactory.create(q, ds) ; qExec.getContext().setTrue(TDB.symUnionDefaultGraph) ; long count = ResultSetFormatter.consume(qExec.execSelect()) ; ds.commit() ; ds.end() ; assertEquals(2, count) ; } }