You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2018/01/30 11:18:39 UTC
[1/5] jena git commit: JENA-1468: Writing vars when table empty
Repository: jena
Updated Branches:
refs/heads/master e2194a631 -> 6228bbc16
JENA-1468: Writing vars when table empty
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/30eb9314
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/30eb9314
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/30eb9314
Branch: refs/heads/master
Commit: 30eb9314a4076c6adc06b348556650297b2b9283
Parents: 94eb3fc
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Jan 26 13:53:05 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Jan 26 13:53:05 2018 +0000
----------------------------------------------------------------------
.../org/apache/jena/sparql/algebra/table/TableBase.java | 2 ++
.../org/apache/jena/sparql/algebra/table/TableEmpty.java | 4 ++++
.../org/apache/jena/sparql/algebra/table/TableUnit.java | 9 ++++-----
.../java/org/apache/jena/sparql/sse/writers/WriterOp.java | 9 ++++++---
4 files changed, 16 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/30eb9314/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableBase.java
index 1dfdc29..739fa95 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableBase.java
@@ -106,6 +106,8 @@ public abstract class TableBase implements Table {
Table table = (Table)other ;
if ( table.size() != this.size() )
return false ;
+ if ( !table.getVars().equals(getVars()) )
+ return false ;
QueryIterator qIter1 = iterator(null) ;
QueryIterator qIter2 = table.iterator(null) ;
try {
http://git-wip-us.apache.org/repos/asf/jena/blob/30eb9314/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableEmpty.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableEmpty.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableEmpty.java
index eaf6336..2640db0 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableEmpty.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableEmpty.java
@@ -23,6 +23,7 @@ import java.util.Iterator ;
import java.util.List ;
import org.apache.jena.atlas.iterator.Iter ;
+import org.apache.jena.sparql.algebra.Table;
import org.apache.jena.sparql.core.Var ;
import org.apache.jena.sparql.engine.ExecutionContext ;
import org.apache.jena.sparql.engine.QueryIterator ;
@@ -31,6 +32,9 @@ import org.apache.jena.sparql.engine.iterator.QueryIterNullIterator ;
public class TableEmpty extends TableBase
{
+ static public boolean isTableEmpty(Table table)
+ { return (table instanceof TableEmpty) ; }
+
public TableEmpty()
{ }
http://git-wip-us.apache.org/repos/asf/jena/blob/30eb9314/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableUnit.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableUnit.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableUnit.java
index 5eb139d..1eb6f37 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableUnit.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/table/TableUnit.java
@@ -18,7 +18,7 @@
package org.apache.jena.sparql.algebra.table;
-import java.util.ArrayList ;
+import java.util.Collections;
import java.util.Iterator ;
import java.util.List ;
@@ -35,7 +35,7 @@ public class TableUnit extends TableBase
{
static public boolean isTableUnit(Table table)
{ return (table instanceof TableUnit) ; }
-
+
public TableUnit() {}
@Override
@@ -61,10 +61,9 @@ public class TableUnit extends TableBase
public boolean isEmpty() { return false ; }
@Override
- public List<String> getVarNames() { return new ArrayList<>() ; }
-
+ public List<String> getVarNames() { return Collections.emptyList(); }
@Override
- public List<Var> getVars() { return new ArrayList<>() ; }
+ public List<Var> getVars() { return Collections.emptyList(); }
@Override
public String toString() { return "TableUnit" ; }
http://git-wip-us.apache.org/repos/asf/jena/blob/30eb9314/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterOp.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterOp.java b/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterOp.java
index f78f277..c8ff308 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterOp.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/sse/writers/WriterOp.java
@@ -32,6 +32,7 @@ import org.apache.jena.sparql.algebra.Op ;
import org.apache.jena.sparql.algebra.OpPrefixesUsed ;
import org.apache.jena.sparql.algebra.OpVisitor ;
import org.apache.jena.sparql.algebra.op.* ;
+import org.apache.jena.sparql.algebra.table.TableEmpty;
import org.apache.jena.sparql.algebra.table.TableUnit ;
import org.apache.jena.sparql.core.* ;
import org.apache.jena.sparql.expr.Expr ;
@@ -349,7 +350,7 @@ public class WriterOp
return ;
}
- if ( opTable.getTable().isEmpty() ) {
+ if ( TableEmpty.isTableEmpty(opTable.getTable()) ) {
start(opTable, NoNL) ;
out.print("empty") ;
finish(opTable) ;
@@ -358,8 +359,10 @@ public class WriterOp
start(opTable, NoNL) ;
WriterNode.outputVars(out, opTable.getTable().getVars(), sContext) ;
- out.println() ;
- WriterTable.outputPlain(out, opTable.getTable(), sContext) ;
+ if ( ! opTable.getTable().isEmpty() ) {
+ out.println();
+ WriterTable.outputPlain(out, opTable.getTable(), sContext) ;
+ }
finish(opTable) ;
}
[4/5] jena git commit: JENA-1468: Merge commit 'refs/pull/345/head'
of github.com:apache/jena
Posted by an...@apache.org.
JENA-1468: Merge commit 'refs/pull/345/head' of github.com:apache/jena
This closes #345.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/ebb10888
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/ebb10888
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/ebb10888
Branch: refs/heads/master
Commit: ebb10888c430686fa79a15900c9e4869aa2c41d4
Parents: e2194a6 2586abf
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Jan 30 10:56:39 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Jan 30 10:56:39 2018 +0000
----------------------------------------------------------------------
.../jena/sparql/algebra/table/TableBase.java | 2 +
.../jena/sparql/algebra/table/TableEmpty.java | 4 ++
.../jena/sparql/algebra/table/TableUnit.java | 9 ++-
.../jena/sparql/sse/writers/WriterOp.java | 9 ++-
.../apache/jena/sparql/algebra/TS_Algebra.java | 3 +-
.../jena/sparql/algebra/TestOpAsQuery.java | 26 +++++++-
.../apache/jena/sparql/algebra/TestTable.java | 68 ++++++++++++++++++++
.../algebra/optimize/TestTransformFilters.java | 2 +-
8 files changed, 110 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
[5/5] jena git commit: JENA-1469: Merge commit 'refs/pull/346/head'
of github.com:apache/jena
Posted by an...@apache.org.
JENA-1469: Merge commit 'refs/pull/346/head' of github.com:apache/jena
This closes #346.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/6228bbc1
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/6228bbc1
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/6228bbc1
Branch: refs/heads/master
Commit: 6228bbc166f6a353dbe135e41686a15f56218508
Parents: ebb1088 fb17239
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Jan 30 10:57:36 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Jan 30 10:57:36 2018 +0000
----------------------------------------------------------------------
.../transaction/AbstractTestTransPromote.java | 26 ++++-----
.../AbstractTestTransactionLifecycle.java | 24 +++++++-
.../tdb/transaction/TransactionManager.java | 59 ++++++++++++--------
3 files changed, 72 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
[3/5] jena git commit: JENA-1469: Adjust internal tracking state
across promotion
Posted by an...@apache.org.
JENA-1469: Adjust internal tracking state across promotion
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/fb172399
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/fb172399
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/fb172399
Branch: refs/heads/master
Commit: fb172399ff2181a8f5f82e5988424defdf38da67
Parents: 3ac175b
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Jan 27 17:11:22 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat Jan 27 17:11:22 2018 +0000
----------------------------------------------------------------------
.../transaction/AbstractTestTransPromote.java | 26 ++++-----
.../AbstractTestTransactionLifecycle.java | 24 +++++++-
.../tdb/transaction/TransactionManager.java | 59 ++++++++++++--------
3 files changed, 72 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/fb172399/jena-arq/src/test/java/org/apache/jena/sparql/transaction/AbstractTestTransPromote.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/transaction/AbstractTestTransPromote.java b/jena-arq/src/test/java/org/apache/jena/sparql/transaction/AbstractTestTransPromote.java
index 9134668..1ca1379 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/transaction/AbstractTestTransPromote.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/transaction/AbstractTestTransPromote.java
@@ -244,18 +244,6 @@ public abstract class AbstractTestTransPromote {
}) ;
}
- @Test
- public void promote_10() { promote_readCommit_txnCommit(TxnType.READ_COMMITTED_PROMOTE, true) ; }
-
- @Test
- public void promote_11() { promote_readCommit_txnCommit(TxnType.READ_COMMITTED_PROMOTE, false) ; }
-
- @Test
- public void promote_12() {
- expect(()->promote_readCommit_txnCommit(TxnType.READ_PROMOTE, true) ,
- getTransactionExceptionClass()) ;
- }
-
@SafeVarargs
private final void expect(Runnable runnable, Class<? extends Exception>...classes) {
try {
@@ -271,6 +259,18 @@ public abstract class AbstractTestTransPromote {
}
@Test
+ public void promote_10() { promote_readCommit_txnCommit(TxnType.READ_COMMITTED_PROMOTE, true) ; }
+
+ @Test
+ public void promote_11() { promote_readCommit_txnCommit(TxnType.READ_COMMITTED_PROMOTE, false) ; }
+
+ @Test
+ public void promote_12() {
+ expect(()->promote_readCommit_txnCommit(TxnType.READ_PROMOTE, true) ,
+ getTransactionExceptionClass()) ;
+ }
+
+ @Test
public void promote_13() { promote_readCommit_txnCommit(TxnType.READ_PROMOTE, false) ; }
private void promote_readCommit_txnCommit(TxnType txnType, boolean asyncCommit) {
@@ -388,7 +388,7 @@ public abstract class AbstractTestTransPromote {
} catch (InterruptedException | ExecutionException e1) { throw new RuntimeException(e1) ; }
}
- // This would locks up because of a WRITE-WRITE deadly embrace.
+ // This would lock up because of a WRITE-WRITE deadly embrace.
// @Test(expected=JenaTransactionException.class)
// public void promote11() { test2(TxnMode.WRITE); }
http://git-wip-us.apache.org/repos/asf/jena/blob/fb172399/jena-arq/src/test/java/org/apache/jena/sparql/transaction/AbstractTestTransactionLifecycle.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/transaction/AbstractTestTransactionLifecycle.java b/jena-arq/src/test/java/org/apache/jena/sparql/transaction/AbstractTestTransactionLifecycle.java
index c1043b8..ec80425 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/transaction/AbstractTestTransactionLifecycle.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/transaction/AbstractTestTransactionLifecycle.java
@@ -235,6 +235,17 @@ public abstract class AbstractTestTransactionLifecycle extends BaseTest
ds.end();
}
+ // JENA-1469
+ @Test
+ public void transaction_p06() {
+ transaction_promote_write(TxnType.READ_COMMITTED_PROMOTE);
+ }
+
+ @Test
+ public void transaction_p07() {
+ transaction_promote_write(TxnType.READ_PROMOTE);
+ }
+
@Test(expected=JenaException.class)
public void transaction_err_read_promote() {
assumeTrue(supportsPromote()) ;
@@ -245,9 +256,18 @@ public abstract class AbstractTestTransactionLifecycle extends BaseTest
ds.commit();
ds.end();
}
-
- // XXX READ_PROMOTE -> update -> fail promote/boolean.
+ private void transaction_promote_write(TxnType txnType) {
+ Dataset ds = create() ;
+ ds.begin(txnType);
+ ds.promote();
+ ds.commit();
+ ds.end();
+ ds.begin(TxnType.WRITE);
+ ds.commit();
+ ds.end();
+ }
+
// Patterns.
@Test
public void transaction_pattern_01() {
http://git-wip-us.apache.org/repos/asf/jena/blob/fb172399/jena-tdb/src/main/java/org/apache/jena/tdb/transaction/TransactionManager.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/transaction/TransactionManager.java b/jena-tdb/src/main/java/org/apache/jena/tdb/transaction/TransactionManager.java
index 10e8b44..e9c4797 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/transaction/TransactionManager.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/transaction/TransactionManager.java
@@ -163,7 +163,7 @@ public class TransactionManager
void transactionCloses(Transaction txn) ;
void readerStarts(Transaction txn) ;
void readerFinishes(Transaction txn) ;
- void transactionPromotes(Transaction txn) ;
+ void transactionPromotes(Transaction txnOld, Transaction txnNew) ;
void writerStarts(Transaction txn) ;
void writerCommits(Transaction txn) ;
void writerAborts(Transaction txn) ;
@@ -175,7 +175,7 @@ public class TransactionManager
@Override public void transactionCloses(Transaction txn) {}
@Override public void readerStarts(Transaction txn) {}
@Override public void readerFinishes(Transaction txn) {}
- @Override public void transactionPromotes(Transaction txn) {}
+ @Override public void transactionPromotes(Transaction txnOld, Transaction txnNew) {}
@Override public void writerStarts(Transaction txn) {}
@Override public void writerCommits(Transaction txn) {}
@Override public void writerAborts(Transaction txn) {}
@@ -185,7 +185,8 @@ public class TransactionManager
TSM_Logger() {}
@Override public void readerStarts(Transaction txn) { log("start", txn) ; }
@Override public void readerFinishes(Transaction txn) { log("finish", txn) ; }
- @Override public void transactionPromotes(Transaction txn) { log("promote", txn) ; }
+ @Override public void transactionPromotes(Transaction txnOld, Transaction txnNew)
+ { log("promote(old)", txnOld) ; log("promote(new)", txnNew) ; }
@Override public void writerStarts(Transaction txn) { log("begin", txn) ; }
@Override public void writerCommits(Transaction txn) { log("commit", txn) ; }
@Override public void writerAborts(Transaction txn) { log("abort", txn) ; }
@@ -196,7 +197,8 @@ public class TransactionManager
TSM_LoggerDebug() {}
@Override public void readerStarts(Transaction txn) { logInternal("start", txn) ; }
@Override public void readerFinishes(Transaction txn) { logInternal("finish", txn) ; }
- @Override public void transactionPromotes(Transaction txn) { logInternal("promote", txn) ; }
+ @Override public void transactionPromotes(Transaction txnOld, Transaction txnNew)
+ { logInternal("promote(old)", txnOld) ; logInternal("promote(new)", txnNew) ; }
@Override public void writerStarts(Transaction txn) { logInternal("begin", txn) ; }
@Override public void writerCommits(Transaction txn) { logInternal("commit", txn) ; }
@Override public void writerAborts(Transaction txn) { logInternal("abort", txn) ; }
@@ -209,7 +211,10 @@ public class TransactionManager
@Override public void transactionCloses(Transaction txn) { }
@Override public void readerStarts(Transaction txn) { inc(activeReaders) ; }
@Override public void readerFinishes(Transaction txn) { dec(activeReaders) ; inc(finishedReaders); }
- @Override public void transactionPromotes(Transaction txn) { dec(activeReaders) ; inc(finishedReaders); inc(activeWriters); }
+
+ @Override public void transactionPromotes(Transaction txnOld, Transaction txnNew)
+ { dec(activeReaders) ; inc(finishedReaders); inc(activeWriters); }
+
@Override public void writerStarts(Transaction txn) { inc(activeWriters) ; }
@Override public void writerCommits(Transaction txn) { dec(activeWriters) ; inc(committedWriters) ; }
@Override public void writerAborts(Transaction txn) { dec(activeWriters) ; inc(abortedWriters) ; }
@@ -236,6 +241,12 @@ public class TransactionManager
// Currently, the writer semaphore is managed explicitly in the main code.
+ @Override public void transactionPromotes(Transaction txnOld, Transaction txnNew) {
+ // Switch locks.
+ txnOld.getBaseDataset().getLock().leaveCriticalSection() ;
+ txnNew.getBaseDataset().getLock().enterCriticalSection(Lock.READ) ;
+ }
+
@Override
public void readerFinishes(Transaction txn) {
txn.getBaseDataset().getLock().leaveCriticalSection() ;
@@ -342,7 +353,9 @@ public class TransactionManager
acquireWriterLock(true) ;
}
// entry synchronized part
- return begin$(txnType, originalTxnType, label) ;
+ DatasetGraphTxn dsgtxn = begin$(txnType, originalTxnType, label) ;
+ noteTxnStart(dsgtxn.getTransaction()) ;
+ return dsgtxn;
}
/** Ensure a DatasetGraphTxn is for a write transaction.
@@ -377,11 +390,9 @@ public class TransactionManager
// Can also promote - may need to wait for active writers.
// Go through begin for the writers lock.
if ( txnType == TxnType.READ_COMMITTED_PROMOTE ) {
- // Full begin cycle.
- DatasetGraphTxn dsgtxn2 = beginInternal(TxnType.WRITE, txnType, txn.getLabel()) ;
- // Junk the old one.
- noteTxnPromote(txn, dsgtxn2.getTransaction());
- return dsgtxn2 ;
+ acquireWriterLock(true);
+ // No need to sync - we just queue as a writer.
+ return promoteExec$(dsgtxn, txnType);
}
// First check, without the writer lock. Fast fail.
@@ -402,25 +413,31 @@ public class TransactionManager
// Potentially blocking - must be outside 'synchronized' so that any active writer
// can commit/abort. Otherwise, we have deadlock.
acquireWriterLock(true) ;
-
// Do the synchronized stuff.
- return promote2$(dsgtxn, txnType) ;
+ return promoteSync$(dsgtxn, txnType) ;
}
synchronized
- private DatasetGraphTxn promote2$(DatasetGraphTxn dsgtxn, TxnType originalTxnType) {
+ private DatasetGraphTxn promoteSync$(DatasetGraphTxn dsgtxn, TxnType originalTxnType) {
Transaction txn = dsgtxn.getTransaction() ;
// Writers may have happened between the first check of the active writers may have committed.
if ( txn.getVersion() != version.get() ) {
releaseWriterLock();
return null;
}
- // Use begin$ (not beginInternal) - we have the writers lock.
+ return promoteExec$(dsgtxn, originalTxnType);
+ }
+
+ private DatasetGraphTxn promoteExec$(DatasetGraphTxn dsgtxn, TxnType originalTxnType) {
+ // Use begin$ (not beginInternal)
+ // We have the writers lock.
+ // We keep the exclusivity lock.
+ Transaction txn = dsgtxn.getTransaction() ;
DatasetGraphTxn dsgtxn2 = begin$(TxnType.WRITE, originalTxnType, txn.getLabel()) ;
noteTxnPromote(txn, dsgtxn2.getTransaction());
return dsgtxn2 ;
}
-
+
// If DatasetGraphTransaction has a sync lock on sConn, this
// does not need to be sync'ed. But it's possible to use some
// of the low level objects directly so we'll play safe.
@@ -450,6 +467,7 @@ public class TransactionManager
txn.setActiveDataset(dsgTxn) ;
// Empty for READ ; only WRITE transactions have components that need notifying.
+ // Promote is a WRITE transaction starting.
List<TransactionLifecycle> components = dsgTxn.getTransaction().lifecycleComponents() ;
if ( mode == ReadWrite.READ ) {
@@ -460,8 +478,6 @@ public class TransactionManager
for ( TransactionLifecycle component : components )
component.begin(dsgTxn.getTransaction()) ;
-
- noteTxnStart(txn) ;
return dsgTxn ;
}
@@ -870,10 +886,9 @@ public class TransactionManager
private void noteTxnPromote(Transaction transaction, Transaction transaction2) {
activeTransactions.remove(transaction);
activeTransactions.add(transaction2);
- transactionPromotes(transaction) ;
+ transactionPromotes(transaction, transaction2) ;
}
-
private void noteTxnCommit(Transaction transaction) {
switch (transaction.getTxnMode())
{
@@ -1011,10 +1026,10 @@ public class TransactionManager
tsm.readerFinishes(txn) ;
}
- private void transactionPromotes(Transaction txn) {
+ private void transactionPromotes(Transaction txnOld, Transaction txnNew) {
for ( TSM tsm : actions )
if ( tsm != null )
- tsm.transactionPromotes(txn);
+ tsm.transactionPromotes(txnOld, txnNew);
}
private void writerStarts(Transaction txn) {
[2/5] jena git commit: JENA-1468: Tests
Posted by an...@apache.org.
JENA-1468: Tests
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/2586abf0
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/2586abf0
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/2586abf0
Branch: refs/heads/master
Commit: 2586abf09751fd962ca7afe25d4ab3d9431ce716
Parents: 30eb931
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Jan 26 13:53:17 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat Jan 27 13:49:43 2018 +0000
----------------------------------------------------------------------
.../apache/jena/sparql/algebra/TS_Algebra.java | 3 +-
.../jena/sparql/algebra/TestOpAsQuery.java | 26 +++++++-
.../apache/jena/sparql/algebra/TestTable.java | 68 ++++++++++++++++++++
.../algebra/optimize/TestTransformFilters.java | 2 +-
4 files changed, 94 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/2586abf0/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TS_Algebra.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TS_Algebra.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TS_Algebra.java
index eaa9fe4..0e34dba 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TS_Algebra.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TS_Algebra.java
@@ -24,7 +24,8 @@ import org.junit.runners.Suite ;
@RunWith(Suite.class)
@Suite.SuiteClasses( {
// This package
- TestAlgebraTranslate.class
+ TestTable.class
+ , TestAlgebraTranslate.class
, TestClassify.class
, TestOpAsQuery.class
, TestOpVars.class
http://git-wip-us.apache.org/repos/asf/jena/blob/2586abf0/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestOpAsQuery.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestOpAsQuery.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestOpAsQuery.java
index 24169d5..2033ba8 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestOpAsQuery.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestOpAsQuery.java
@@ -390,6 +390,25 @@ public class TestOpAsQuery {
}
@Test
+ public void testTable1() {
+ String query = "SELECT * WHERE { ?x ?p ?z . VALUES ?y { } }" ;
+ roundTripQuery(query);
+ }
+
+ @Test
+ public void testTable2() {
+ // JENA-1468 : op to string and back.
+ String qs = "SELECT * WHERE { ?x ?p ?z . VALUES ?y { } }" ;
+ Query query = QueryFactory.create(qs);
+ Op op = Algebra.compile(query);
+ String x = op.toString();
+ Op op1 = SSE.parseOp(x);
+ Query query2 = OpAsQuery.asQuery(op1);
+ assertEquals(query, query2);
+ }
+
+
+ @Test
public void testValues1() {
String query = "SELECT * { VALUES ?x {1 2} ?s ?p ?x }" ;
test_roundTripQuery(query) ;
@@ -443,6 +462,7 @@ public class TestOpAsQuery {
// Test for queries that do query->algebra->OpAsQuery->query
// to produce an output that is .equals the input.
+ /** query->algebra->OpAsQuery->query */
public static Query[] test_roundTripQuery(String query) {
Query[] r = roundTripQuery(query) ;
stripNamespacesAndBase(r[0]) ;
@@ -471,7 +491,7 @@ public class TestOpAsQuery {
Assert.assertEquals(a1, a2);
}
- // algebra->OpAsQuery->query
+ /** algebra->OpAsQuery->query */
public static void test_AlgebraToQuery(String input, String expected) {
Op op = SSE.parseOp(input) ;
Query orig = QueryFactory.create(expected, Syntax.syntaxSPARQL_11);
@@ -480,7 +500,7 @@ public class TestOpAsQuery {
Assert.assertEquals(orig, got) ;
}
- // query->algebra->OpAsQuery->query
+ /** query->algebra->OpAsQuery->query **/
private static Query[] roundTripQuery(String query) {
Query orig = QueryFactory.create(query, Syntax.syntaxSPARQL_11);
Op toReconstruct = Algebra.compile(orig);
@@ -489,7 +509,7 @@ public class TestOpAsQuery {
return r;
}
- // query->algebra/quads->OpAsQuery->query
+ /** query->algebra/quads->OpAsQuery->query */
private static Query[] roundTripQueryQuad(String query) {
Query orig = QueryFactory.create(query, Syntax.syntaxSPARQL_11);
Op toReconstruct = Algebra.compile(orig);
http://git-wip-us.apache.org/repos/asf/jena/blob/2586abf0/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTable.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTable.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTable.java
new file mode 100644
index 0000000..5f647ce
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTable.java
@@ -0,0 +1,68 @@
+/*
+ * 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.sparql.algebra;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.jena.atlas.io.IndentedLineBuffer;
+import org.apache.jena.sparql.algebra.op.OpTable;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.engine.binding.Binding;
+import org.apache.jena.sparql.engine.binding.BindingFactory;
+import org.apache.jena.sparql.serializer.SerializationContext;
+import org.apache.jena.sparql.sse.writers.WriterOp;
+import org.junit.Test ;
+
+public class TestTable {
+ @Test public void table_01() {
+ Table table = TableFactory.createEmpty();
+ Op opTable = OpTable.create(table);
+ String x = str(opTable);
+ assertEquals("(table empty)", x);
+ }
+
+ // JENA-1468: Table, no rows , with declared variables.
+ @Test public void table_02() {
+ Table table = TableFactory.create();
+ table.getVars().add(Var.alloc("a"));
+ Op opTable = OpTable.create(table);
+ String x = str(opTable);
+ assertEquals("(table (vars ?a))", x);
+ }
+
+ @Test public void table_03() {
+ Table table = TableFactory.create();
+ Binding b = BindingFactory.binding();
+ table.addBinding(b);
+ Op opTable = OpTable.create(table);
+ String x = str(opTable);
+ assertEquals("(table (vars) (row) )", x);
+ }
+
+ // String, no adornment
+ private static String str(Op op) {
+ SerializationContext sCxt = new SerializationContext();
+ IndentedLineBuffer out = new IndentedLineBuffer();
+ out.setFlatMode(true);
+ WriterOp.output(out, op, sCxt);
+ String x = out.asString();
+ return x.trim();
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/jena/blob/2586abf0/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformFilters.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformFilters.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformFilters.java
index a970f8e..41de9ee 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformFilters.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformFilters.java
@@ -907,7 +907,7 @@ public class TestTransformFilters extends AbstractTestTransform
// Tests use of multiple != conditions on same variable
testOp("(filter ((!= ?x <x>) (!= ?x <y>)) (bgp ( ?s ?p ?x)) )",
t_inequality,
- "(minus (bgp (?s ?p ?x)) (table (vars ?p ?x) (row [?x <y>]) (row [?x <x>])))") ;
+ "(minus (bgp (?s ?p ?x)) (table (vars ?x) (row [?x <y>]) (row [?x <x>])))") ;
}
@Test public void inequality09() {