Rebasing to use new transaction promotion machinery
Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/0515165c Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/0515165c Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/0515165c Branch: refs/heads/master Commit: 0515165cb57d3c203c104e9c04c1ff86ba87defc Parents: 4e60b0f Author: ajs6f <[email protected]> Authored: Fri Jan 5 10:19:04 2018 -0500 Committer: ajs6f <[email protected]> Committed: Fri Jan 5 10:19:04 2018 -0500 ---------------------------------------------------------------------- .../java/org/apache/jena/query/TxnType.java | 4 +-- .../apache/jena/sparql/core/Transactional.java | 20 +++++++-------- .../jena/sparql/util/DyadicDatasetGraph.java | 26 ++++++++++++++++++++ 3 files changed, 38 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/0515165c/jena-arq/src/main/java/org/apache/jena/query/TxnType.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/query/TxnType.java b/jena-arq/src/main/java/org/apache/jena/query/TxnType.java index a315a13..56c841a 100644 --- a/jena-arq/src/main/java/org/apache/jena/query/TxnType.java +++ b/jena-arq/src/main/java/org/apache/jena/query/TxnType.java @@ -36,11 +36,11 @@ public enum TxnType { * exception. * * <li>{@code READ_COMMITTED_PROMOTE}: Use this with care. The promotion will succeed but - * changes from oher transactions become visible. + * changes from other transactions become visible. * </ul> * * Read committed: at the point transaction attempts promotion from "read" to - * "write", the sytem checks if the datset has chnage since the trsnaction started + * "write", the system checks if the dataset has changed since the transaction started * (called {@code begin}). If {@code READ_PROMOTE}, the dataset must not have * changed; if {@code READ_COMMITTED_PROMOTE} any intermediate changes are * visible but the application can not assume any data it has read in the http://git-wip-us.apache.org/repos/asf/jena/blob/0515165c/jena-arq/src/main/java/org/apache/jena/sparql/core/Transactional.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/Transactional.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/Transactional.java index 85f3b5d..271e287 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/core/Transactional.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/Transactional.java @@ -63,21 +63,21 @@ public interface Transactional { /** * Start a transaction which is READ mode and which will switch to WRITE if an update - * is attempted but only if no intermdiate transaction has performed an update. + * is attempted but only if no intermediate transaction has performed an update. * <p> * See {@link #begin(TxnType)} for more details an options. * <p> - * May not be implemented. See {@link #begin(ReadWrite)} is guaranted to be provided. + * May not be implemented. See {@link #begin(ReadWrite)} is guaranteed to be provided. */ public default void begin() { begin(TxnType.READ_PROMOTE); } /** * Start a transaction.<br/> - * READ or WRITE transactions start in that state and do not chnage for the + * READ or WRITE transactions start in that state and do not change for the * lifetime of the transaction. * <ul> * - * <li>{@code WRITE}: this gaurantees a WRITE will complete if {@code commit()} is + * <li>{@code WRITE}: this guarantees a WRITE will complete if {@code commit()} is * called. The same as {@code begin(ReadWrite.WRITE)}. * * <li>{@code READ}: the transaction can not promote to WRITE,ensuring read-only @@ -88,14 +88,14 @@ public interface Transactional * transaction. See also {@link #promote}. * * <li>{@code READ_COMMITTED_PROMOTE}: Use this with care. The promotion will - * succeed but changes from oher transactions become visible. + * succeed but changes from other transactions become visible. * * </ul> * * Read committed: at the point transaction attempts promotion from "read" to - * "write", the sytem checks if the datset has chnage since the trsnaction started + * "write", the system checks if the dataset has change since the transaction started * (called {@code begin}). If {@code READ_PROMOTE}, the dataset must not have - * changed; if {@code READ_COMMITTED_PROMOTE} anyh intermediate changes are + * changed; if {@code READ_COMMITTED_PROMOTE} any intermediate changes are * visible but the application can not assume any data it has read in the * transaction is the same as it was at the point the transaction started. * <p> @@ -113,13 +113,13 @@ public interface Transactional * Attempt to promote a transaction from "read" to "write" and the transaction * start with a "promote" mode ({@code READ_PROMOTE} or {@code READ_COMMITTED_PROMOTE}). * <p> - * Returns "true" if the transction is in write mode after the call. - * The method always succeeeds of the transaction is already + * Returns "true" if the transaction is in write mode after the call. + * The method always succeeds of the transaction is already * "write". * <p> * This method returns true if a {@code READ_PROMOTE} or {@code READ_COMMITTED_PROMOTE} is promoted. * <p> - * This method returns false if a {@code READ_PROMOTE} can't be promoted - the transaction is stil valid and in "read" mode. + * This method returns false if a {@code READ_PROMOTE} can't be promoted - the transaction is still valid and in "read" mode. * <p> * This method throws an exception if there is an attempt to promote a "READ" transaction. */ http://git-wip-us.apache.org/repos/asf/jena/blob/0515165c/jena-arq/src/main/java/org/apache/jena/sparql/util/DyadicDatasetGraph.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/DyadicDatasetGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/DyadicDatasetGraph.java index 25a9055..346ab5c 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/util/DyadicDatasetGraph.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/DyadicDatasetGraph.java @@ -34,6 +34,7 @@ import org.apache.jena.graph.Graph; import org.apache.jena.graph.Node; import org.apache.jena.graph.compose.MultiUnion; import org.apache.jena.query.ReadWrite; +import org.apache.jena.query.TxnType; import org.apache.jena.shared.Lock; import org.apache.jena.sparql.core.DatasetGraph; import org.apache.jena.sparql.core.Quad; @@ -60,6 +61,31 @@ public abstract class DyadicDatasetGraph extends PairOfSameType<DatasetGraph> im } @Override + public void begin(TxnType type) { + switch (type) { + case WRITE: + throwNoMutationAllowed(); + default: + forEach(dsg -> dsg.begin(type)); + } + } + + @Override + public boolean promote() { + return false; + } + + @Override + public ReadWrite transactionMode() { + return apply((rw1, rw2) -> rw1 == rw2 ? rw1 : null, DatasetGraph::transactionMode); + } + + @Override + public TxnType transactionType() { + return apply((t1, t2) -> t1 == t2 ? t1 : null, DatasetGraph::transactionType); + } + + @Override public synchronized void begin(ReadWrite readWrite) { switch (readWrite) { case WRITE:
