[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