[Mulgara-svn] r1542 - branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa

andrae at mulgara.org andrae at mulgara.org
Wed Feb 25 01:31:33 UTC 2009


Author: andrae
Date: 2009-02-24 17:31:30 -0800 (Tue, 24 Feb 2009)
New Revision: 1542

Modified:
   branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa/XAStatementStoreImpl.java
Log:
refs #183

This double array allows us to identify which index will satisfy a desired ordering of the unbound variables,
or if we don't have the appropriate index available.  Should we find an appropriate index we can avoid sorting
the resulting tuples.  If the table returns -1, the sort is unavoidable, so we should default to the default
index selection to improve cache efficiency.



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-24 22:37:52 UTC (rev 1541)
+++ branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/store/statement/xa/XAStatementStoreImpl.java	2009-02-25 01:31:30 UTC (rev 1542)
@@ -148,6 +148,304 @@
     /* 3210 */ TI_0123
   };
 
+  /*
+   * Primary index = Mask of bound or committed vars.
+   * Secondary index = Mask of preferred vars.
+   * -1 indicates that the preferred vars cannot be satisfied.
+   * Query should then use selectIndex[] and perform a sort to obtain preferred vars.
+   */
+  private final static int[][] selectIndexSet = {
+    /* XXXX */ {
+      /* XXXX */ TI_0123,
+      /* XXX0 */ TI_0123,
+      /* XX1X */ TI_1203,
+      /* XX10 */ TI_0123,
+      /* X2XX */ TI_2013,
+      /* X2X0 */ TI_2013,
+      /* X21X */ TI_1203,
+      /* X210 */ TI_0123,
+      /* 3XXX */ TI_3012,
+      /* 3XX0 */ TI_3012,
+      /* 3X1X */ TI_3120,
+      /* 3X10 */ TI_3012,
+      /* 32XX */ TI_3201,
+      /* 32X0 */ TI_3201,
+      /* 321X */ TI_3120,
+      /* 3210 */ TI_3012
+    },
+    /* XXX0 */ {
+      /* XXXX */ TI_0123,
+      /* XXX0 */ TI_0123,
+      /* XX1X */ TI_0123,
+      /* XX10 */ TI_0123,
+      /* X2XX */ -1,
+      /* X2X0 */ -1,
+      /* X21X */ TI_0123,
+      /* X210 */ TI_0123,
+      /* 3XXX */ -1,
+      /* 3XX0 */ -1,
+      /* 3X1X */ -1,
+      /* 3X10 */ -1,
+      /* 32XX */ -1,
+      /* 32X0 */ -1,
+      /* 321X */ TI_0123,
+      /* 3210 */ TI_0123
+    },
+    /* XX1X */ {
+      /* XXXX */ TI_1203,
+      /* XXX0 */ -1,
+      /* XX1X */ TI_1203,
+      /* XX10 */ TI_1203,
+      /* X2XX */ TI_1203,
+      /* X2X0 */ TI_1203,
+      /* X21X */ TI_1203,
+      /* X210 */ TI_1203,
+      /* 3XXX */ -1,
+      /* 3XX0 */ -1,
+      /* 3X1X */ -1,
+      /* 3X10 */ -1,
+      /* 32XX */ -1,
+      /* 32X0 */ TI_1203,
+      /* 321X */ TI_1203,
+      /* 3210 */ TI_1203
+    },
+    /* XX10 */ {
+      /* XXXX */ TI_0123,
+      /* XXX0 */ TI_0123,
+      /* XX1X */ TI_0123,
+      /* XX10 */ TI_0123,
+      /* X2XX */ TI_0123,
+      /* X2X0 */ TI_0123,
+      /* X21X */ TI_0123,
+      /* X210 */ TI_0123,
+      /* 3XXX */ -1,
+      /* 3XX0 */ -1,
+      /* 3X1X */ -1,
+      /* 3X10 */ -1,
+      /* 32XX */ TI_0123,
+      /* 32X0 */ TI_0123,
+      /* 321X */ TI_0123,
+      /* 3210 */ TI_0123
+    },
+    /* X2XX */ {
+      /* XXXX */ TI_2013,
+      /* XXX0 */ TI_2013,
+      /* XX1X */ -1,
+      /* XX10 */ TI_2013,
+      /* X2XX */ TI_2013,
+      /* X2X0 */ TI_2013,
+      /* X21X */ -1,
+      /* X210 */ TI_2013,
+      /* 3XXX */ -1,
+      /* 3XX0 */ -1,
+      /* 3X1X */ -1,
+      /* 3X10 */ TI_2013,
+      /* 32XX */ -1,
+      /* 32X0 */ -1,
+      /* 321X */ -1,
+      /* 3210 */ TI_2013
+    },
+    /* X2X0 */ {
+      /* XXXX */ TI_2013,
+      /* XXX0 */ TI_2013,
+      /* XX1X */ TI_2013,
+      /* XX10 */ TI_2013,
+      /* X2XX */ TI_2013,
+      /* X2X0 */ TI_2013,
+      /* X21X */ TI_2013,
+      /* X210 */ TI_2013,
+      /* 3XXX */ -1,
+      /* 3XX0 */ -1,
+      /* 3X1X */ TI_2013,
+      /* 3X10 */ TI_2013,
+      /* 32XX */ -1,
+      /* 32X0 */ -1,
+      /* 321X */ TI_2013,
+      /* 3210 */ TI_2013
+    },
+    /* X21X */ {
+      /* XXXX */ TI_1203,
+      /* XXX0 */ TI_1203,
+      /* XX1X */ TI_1203,
+      /* XX10 */ TI_1203,
+      /* X2XX */ TI_1203,
+      /* X2X0 */ TI_1203,
+      /* X21X */ TI_1203,
+      /* X210 */ TI_1203,
+      /* 3XXX */ -1,
+      /* 3XX0 */ -1,
+      /* 3X1X */ -1,
+      /* 3X10 */ TI_1203,
+      /* 32XX */ -1,
+      /* 32X0 */ TI_1203,
+      /* 321X */ -1,
+      /* 3210 */ TI_1203
+    },
+    /* X210 */ {
+      /* XXXX */ TI_0123,
+      /* XXX0 */ TI_0123,
+      /* XX1X */ TI_0123,
+      /* XX10 */ TI_0123,
+      /* X2XX */ TI_0123,
+      /* X2X0 */ TI_0123,
+      /* X21X */ TI_0123,
+      /* X210 */ TI_0123,
+      /* 3XXX */ TI_0123,
+      /* 3XX0 */ TI_0123,
+      /* 3X1X */ TI_0123,
+      /* 3X10 */ TI_0123,
+      /* 32XX */ TI_0123,
+      /* 32X0 */ TI_0123,
+      /* 321X */ TI_0123,
+      /* 3210 */ TI_0123
+    },
+    /* 3XXX */ {
+      /* XXXX */ TI_3012,
+      /* XXX0 */ TI_3012,
+      /* XX1X */ TI_3120,
+      /* XX10 */ TI_3012,
+      /* X2XX */ TI_3201,
+      /* X2X0 */ TI_3201,
+      /* X21X */ TI_3120,
+      /* X210 */ TI_3012,
+      /* 3XXX */ TI_3012,
+      /* 3XX0 */ TI_3012,
+      /* 3X1X */ TI_3120,
+      /* 3X10 */ TI_3012,
+      /* 32XX */ TI_3201,
+      /* 32X0 */ TI_3201,
+      /* 321X */ TI_3120,
+      /* 3210 */ TI_3012
+    },
+    /* 3XX0 */ {
+      /* XXXX */ TI_3012,
+      /* XXX0 */ TI_3012,
+      /* XX1X */ -1,
+      /* XX10 */ TI_3012,
+      /* X2XX */ -1,
+      /* X2X0 */ -1,
+      /* X21X */ TI_3012,
+      /* X210 */ TI_3012,
+      /* 3XXX */ TI_3012,
+      /* 3XX0 */ TI_3012,
+      /* 3X1X */ TI_3012,
+      /* 3X10 */ TI_3012,
+      /* 32XX */ -1,
+      /* 32X0 */ -1,
+      /* 321X */ TI_3012,
+      /* 3210 */ TI_3012
+    },
+    /* 3X1X */ {
+      /* XXXX */ TI_3120,
+      /* XXX0 */ -1,
+      /* XX1X */ TI_3120,
+      /* XX10 */ -1,
+      /* X2XX */ TI_3120,
+      /* X2X0 */ TI_3120,
+      /* X21X */ TI_3120,
+      /* X210 */ TI_3120,
+      /* 3XXX */ TI_3120,
+      /* 3XX0 */ -1,
+      /* 3X1X */ TI_3120,
+      /* 3X10 */ -1,
+      /* 32XX */ TI_3120,
+      /* 32X0 */ TI_3120,
+      /* 321X */ TI_3120,
+      /* 3210 */ TI_3120
+    },
+    /* 3X10 */ {
+      /* XXXX */ TI_3012,
+      /* XXX0 */ TI_3012,
+      /* XX1X */ TI_3012,
+      /* XX10 */ TI_3012,
+      /* X2XX */ TI_3012,
+      /* X2X0 */ TI_3012,
+      /* X21X */ TI_3012,
+      /* X210 */ TI_3012,
+      /* 3XXX */ TI_3012,
+      /* 3XX0 */ TI_3012,
+      /* 3X1X */ TI_3012,
+      /* 3X10 */ TI_3012,
+      /* 32XX */ TI_3012,
+      /* 32X0 */ TI_3012,
+      /* 321X */ TI_3012,
+      /* 3210 */ TI_3012
+    },
+    /* 32XX */ {
+      /* XXXX */ TI_3201,
+      /* XXX0 */ TI_3201,
+      /* XX1X */ -1,
+      /* XX10 */ TI_3201,
+      /* X2XX */ TI_3201,
+      /* X2X0 */ TI_3201,
+      /* X21X */ -1,
+      /* X210 */ TI_3201,
+      /* 3XXX */ TI_3201,
+      /* 3XX0 */ TI_3201,
+      /* 3X1X */ -1,
+      /* 3X10 */ TI_3201,
+      /* 32XX */ TI_3201,
+      /* 32X0 */ TI_3201,
+      /* 321X */ -1,
+      /* 3210 */ TI_3201
+    },
+    /* 32X0 */ {
+      /* XXXX */ TI_3201,
+      /* XXX0 */ TI_3201,
+      /* XX1X */ TI_3201,
+      /* XX10 */ TI_3201,
+      /* X2XX */ TI_3201,
+      /* X2X0 */ TI_3201,
+      /* X21X */ TI_3201,
+      /* X210 */ TI_3201,
+      /* 3XXX */ TI_3201,
+      /* 3XX0 */ TI_3201,
+      /* 3X1X */ TI_3201,
+      /* 3X10 */ TI_3201,
+      /* 32XX */ TI_3201,
+      /* 32X0 */ TI_3201,
+      /* 321X */ TI_3201,
+      /* 3210 */ TI_3201
+    },
+    /* 321X */ {
+      /* XXXX */ TI_3120,
+      /* XXX0 */ TI_3120,
+      /* XX1X */ TI_3120,
+      /* XX10 */ TI_3120,
+      /* X2XX */ TI_3120,
+      /* X2X0 */ TI_3120,
+      /* X21X */ TI_3120,
+      /* X210 */ TI_3120,
+      /* 3XXX */ TI_3120,
+      /* 3XX0 */ TI_3120,
+      /* 3X1X */ TI_3120,
+      /* 3X10 */ TI_3120,
+      /* 32XX */ TI_3120,
+      /* 32X0 */ TI_3120,
+      /* 321X */ TI_3120,
+      /* 3210 */ TI_3120
+    },
+    /* 3210 */ {
+      /* XXXX */ TI_3012,  // I picked this index because it corresponds to <s> $p $o in <g>
+      /* XXX0 */ TI_3012,  // Sharing exists() with this constraint may improve caching behaviour. (AWM)
+      /* XX1X */ TI_3012,
+      /* XX10 */ TI_3012,
+      /* X2XX */ TI_3012,
+      /* X2X0 */ TI_3012,
+      /* X21X */ TI_3012,
+      /* X210 */ TI_3012,
+      /* 3XXX */ TI_3012,
+      /* 3XX0 */ TI_3012,
+      /* 3X1X */ TI_3012,
+      /* 3X10 */ TI_3012,
+      /* 32XX */ TI_3012,
+      /* 32X0 */ TI_3012,
+      /* 321X */ TI_3012,
+      /* 3210 */ TI_3012
+    },
+  };
+
+
   /**
    * Description of the Field
    */
@@ -580,10 +878,8 @@
    * @return the {@link StoreTuples}
    * @throws StatementStoreException if something exceptional happens
    */
-  public synchronized StoreTuples findTuples(
-      boolean node0Bound, boolean node1Bound, boolean node2Bound,
-      boolean node3Bound
-  ) throws StatementStoreException {
+  public synchronized StoreTuples findTuples(boolean node0Bound, boolean node1Bound, boolean node2Bound, boolean node3Bound)
+      throws StatementStoreException {
     checkInitialized();
     dirty = false;
     return currentPhase.findTuples(node0Bound, node1Bound, node2Bound, node3Bound);
@@ -1335,10 +1631,8 @@
      * @return the {@link StoreTuples}
      * @throws StatementStoreException if something exceptional happens
      */
-    public synchronized StoreTuples findTuples(
-        boolean node0Bound, boolean node1Bound, boolean node2Bound,
-        boolean node3Bound
-    ) throws StatementStoreException {
+    public synchronized StoreTuples findTuples(boolean node0Bound, boolean node1Bound, boolean node2Bound, boolean node3Bound)
+        throws StatementStoreException {
       return phase.findTuples(node0Bound, node1Bound, node2Bound, node3Bound);
     }
 
@@ -1840,10 +2134,8 @@
     }
 
 
-    StoreTuples findTuples(
-        boolean node0Bound, boolean node1Bound,
-        boolean node2Bound, boolean node3Bound
-    ) throws StatementStoreException {
+    StoreTuples findTuples(boolean node0Bound, boolean node1Bound, boolean node2Bound, boolean node3Bound)
+        throws StatementStoreException {
       int variableMask =
           (node0Bound ? MASK0 : 0) |
           (node1Bound ? MASK1 : 0) |




More information about the Mulgara-svn mailing list