[Mulgara-svn] r1569 - branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa
andrae at mulgara.org
andrae at mulgara.org
Mon Mar 2 06:48:42 UTC 2009
Author: andrae
Date: 2009-03-01 22:48:40 -0800 (Sun, 01 Mar 2009)
New Revision: 1569
Modified:
branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa/TripleAVLFile.java
branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa/XAStatementStoreImpl.java
Log:
refs #183
Added a phaseId to TripleAVLFile.Phase, to allow us to track which index a phase is being used for.
Added bind[1-4] methods to ensure findTuples parameters are matched up with the correct columns for the
relevant index.
Modified: branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa/TripleAVLFile.java
===================================================================
--- branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa/TripleAVLFile.java 2009-02-28 07:07:40 UTC (rev 1568)
+++ branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa/TripleAVLFile.java 2009-03-02 06:48:40 UTC (rev 1569)
@@ -552,15 +552,18 @@
private Block cachedBlock = null;
+ private int phaseId = -1;
+
/**
* CONSTRUCTOR Phase TO DO
*
* @throws IOException EXCEPTION TO DO
*/
- public Phase() throws IOException {
+ public Phase(int phaseId) throws IOException {
if (tripleWriteThread != null) tripleWriteThread.drain();
+ this.phaseId = phaseId;
if (currentPhase == null) {
nrFileTriples = 0;
} else {
@@ -587,6 +590,7 @@
else tripleWriteThread.abort();
}
+ phaseId = p.phaseId;
nrFileTriples = p.nrFileTriples;
avlFilePhase = avlFile.new Phase(p.avlFilePhase);
blockFilePhase = blockFile.new Phase(p.blockFilePhase);
@@ -603,9 +607,10 @@
* @param offset PARAMETER TO DO
* @throws IOException EXCEPTION TO DO
*/
- public Phase(Block b, int offset) throws IOException {
+ public Phase(int phaseId, Block b, int offset) throws IOException {
if (tripleWriteThread != null) tripleWriteThread.drain();
+ this.phaseId = phaseId;
nrFileTriples = b.getLong(offset++);
avlFilePhase = avlFile.new Phase(b, offset);
offset += AVLFile.Phase.RECORD_SIZE;
@@ -616,6 +621,10 @@
}
+ public int getPhaseId() {
+ return phaseId;
+ }
+
public long getNrTriples() {
if (this == currentPhase && tripleWriteThread != null)
tripleWriteThread.drain();
Modified: branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa/XAStatementStoreImpl.java
===================================================================
--- branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa/XAStatementStoreImpl.java 2009-02-28 07:07:40 UTC (rev 1568)
+++ branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa/XAStatementStoreImpl.java 2009-03-02 06:48:40 UTC (rev 1569)
@@ -1778,7 +1778,7 @@
*/
Phase() throws IOException {
for (int i = 0; i < NR_INDEXES; ++i) {
- tripleAVLFilePhases[i] = tripleAVLFiles[i].new Phase();
+ tripleAVLFilePhases[i] = tripleAVLFiles[i].new Phase(i);
}
currentPhase = this;
dirty = true;
@@ -1794,9 +1794,7 @@
assert p != null;
for (int i = 0; i < NR_INDEXES; ++i) {
- tripleAVLFilePhases[i] = tripleAVLFiles[i].new Phase(
- p.tripleAVLFilePhases[i]
- );
+ tripleAVLFilePhases[i] = tripleAVLFiles[i].new Phase(p.tripleAVLFilePhases[i]);
}
currentPhase = this;
dirty = true;
@@ -1812,7 +1810,7 @@
*/
Phase(Block b, int offset) throws IOException {
for (int i = 0; i < NR_INDEXES; ++i) {
- tripleAVLFilePhases[i] = tripleAVLFiles[i].new Phase(b, offset);
+ tripleAVLFilePhases[i] = tripleAVLFiles[i].new Phase(i, b, offset);
offset += TripleAVLFile.Phase.RECORD_SIZE;
}
currentPhase = this;
@@ -2074,51 +2072,129 @@
(node2 != NONE ? MASK2 : 0) |
(node3 != NONE ? MASK3 : 0);
+ switch (variableMask) {
+ case 0:
+ return phase.allTuples();
+ case MASK0:
+ case MASK1:
+ case MASK2:
+ case MASK3:
+ return bind1(phase, node0, node1, node2, node3);
+ case MASK0 | MASK1:
+ case MASK0 | MASK2:
+ case MASK0 | MASK3:
+ case MASK1 | MASK2:
+ case MASK1 | MASK3:
+ case MASK2 | MASK3:
+ return bind2(phase, node0, node1, node2, node3);
+ case MASK0 | MASK1 | MASK2:
+ case MASK0 | MASK1 | MASK3:
+ case MASK0 | MASK2 | MASK3:
+ case MASK1 | MASK2 | MASK3:
+ return bind3(phase, node0, node1, node2, node3);
+ case MASK0 | MASK1 | MASK2 | MASK3:
+ if (bind4(phase, node0, node1, node2, node3)) {
+ return TuplesOperations.unconstrained();
+ }
+ return TuplesOperations.empty();
+ default:
+ throw new AssertionError();
+ }
+ }
+
+ private StoreTuples bind1(TripleAVLFile.Phase phase, long node0, long node1, long node2, long node3)
+ throws StatementStoreException {
try {
- switch (variableMask) {
- case 0:
- return phase.allTuples();
- case MASK0:
+ switch (phase.getPhaseId()) {
+ case TI_0123:
return phase.findTuples(node0);
- case MASK1:
+ case TI_1203:
return phase.findTuples(node1);
- case MASK0 | MASK1:
+ case TI_2013:
+ return phase.findTuples(node2);
+ case TI_3012:
+ case TI_3120:
+ case TI_3201:
+ return phase.findTuples(node3);
+ default:
+ throw new StatementStoreException("Phase has invalid phaseid: " + phase.getPhaseId());
+ }
+ } catch (IOException ex) {
+ throw new StatementStoreException("I/O error", ex);
+ }
+ }
+
+ private StoreTuples bind2(TripleAVLFile.Phase phase, long node0, long node1, long node2, long node3)
+ throws StatementStoreException {
+ try {
+ switch (phase.getPhaseId()) {
+ case TI_0123:
return phase.findTuples(node0, node1);
- case MASK2:
- return phase.findTuples(node2);
- case MASK0 | MASK2:
+ case TI_1203:
+ return phase.findTuples(node1, node2);
+ case TI_2013:
return phase.findTuples(node2, node0);
- case MASK1 | MASK2:
- return phase.findTuples(node1, node2);
- case MASK0 | MASK1 | MASK2:
- return phase.findTuples(node0, node1, node2);
- case MASK3:
- return phase.findTuples(node3);
- case MASK0 | MASK3:
+ case TI_3012:
return phase.findTuples(node3, node0);
- case MASK1 | MASK3:
+ case TI_3120:
return phase.findTuples(node3, node1);
- case MASK0 | MASK1 | MASK3:
+ case TI_3201:
+ return phase.findTuples(node3, node2);
+ default:
+ throw new StatementStoreException("Phase has invalid phaseid: " + phase.getPhaseId());
+ }
+ } catch (IOException ex) {
+ throw new StatementStoreException("I/O error", ex);
+ }
+ }
+
+ private StoreTuples bind3(TripleAVLFile.Phase phase, long node0, long node1, long node2, long node3)
+ throws StatementStoreException {
+ try {
+ switch (phase.getPhaseId()) {
+ case TI_0123:
+ return phase.findTuples(node0, node1, node2);
+ case TI_1203:
+ return phase.findTuples(node1, node2, node0);
+ case TI_2013:
+ return phase.findTuples(node2, node0, node1);
+ case TI_3012:
return phase.findTuples(node3, node0, node1);
- case MASK2 | MASK3:
- return phase.findTuples(node3, node2);
- case MASK0 | MASK2 | MASK3:
+ case TI_3120:
+ return phase.findTuples(node3, node1, node2);
+ case TI_3201:
return phase.findTuples(node3, node2, node0);
- case MASK1 | MASK2 | MASK3:
- return phase.findTuples(node3, node1, node2);
- case MASK0 | MASK1 | MASK2 | MASK3:
- if (phase.existsTriple(node0, node1, node2, node3)) {
- return TuplesOperations.unconstrained();
- }
- return TuplesOperations.empty();
default:
- throw new AssertionError();
+ throw new StatementStoreException("Phase has invalid phaseid: " + phase.getPhaseId());
}
} catch (IOException ex) {
throw new StatementStoreException("I/O error", ex);
}
}
+ private boolean bind4(TripleAVLFile.Phase phase, long node0, long node1, long node2, long node3)
+ throws StatementStoreException {
+ try {
+ switch (phase.getPhaseId()) {
+ case TI_0123:
+ return phase.existsTriple(node0, node1, node2, node3);
+ case TI_1203:
+ return phase.existsTriple(node1, node2, node0, node3);
+ case TI_2013:
+ return phase.existsTriple(node2, node0, node1, node3);
+ case TI_3012:
+ return phase.existsTriple(node3, node0, node1, node2);
+ case TI_3120:
+ return phase.existsTriple(node3, node1, node2, node0);
+ case TI_3201:
+ return phase.existsTriple(node3, node2, node0, node1);
+ default:
+ throw new StatementStoreException("Phase has invalid phaseid: " + phase.getPhaseId());
+ }
+ } catch (IOException ex) {
+ throw new StatementStoreException("I/O error", ex);
+ }
+ }
StoreTuples findTuples(
boolean node0Bound, boolean node1Bound,
More information about the Mulgara-svn
mailing list