[Mulgara-svn] r796 - trunk/src/jar/resolver/java/org/mulgara/resolver

andrae at mulgara.org andrae at mulgara.org
Fri Apr 18 02:15:04 UTC 2008


Author: andrae
Date: 2008-04-17 19:15:03 -0700 (Thu, 17 Apr 2008)
New Revision: 796

Modified:
   trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java
Log:
refs #100

Adds a test for a transaction bug found by James Leigh.

setAutoCommit(true);
query() -> answer;
setAutoCommit(false);
answer.close();
commit(); // fails attempting to reserveWriteLock.
setAutoCommit(true);



Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java	2008-04-17 04:29:44 UTC (rev 795)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/AdvDatabaseSessionUnitTest.java	2008-04-18 02:15:03 UTC (rev 796)
@@ -117,6 +117,7 @@
     suite.addTest(new AdvDatabaseSessionUnitTest("testConcurrentSubqueryQuery"));
     suite.addTest(new AdvDatabaseSessionUnitTest("testConcurrentReadWrite"));
     suite.addTest(new AdvDatabaseSessionUnitTest("testExplicitBasicQuery"));
+    suite.addTest(new AdvDatabaseSessionUnitTest("testAnswerWriteCloseIsolation"));
     suite.addTest(new AdvDatabaseSessionUnitTest("testExplicitIsolationQuery"));
     suite.addTest(new AdvDatabaseSessionUnitTest("testExplicitRollbackIsolationQuery"));
     suite.addTest(new AdvDatabaseSessionUnitTest("testExplicitCommitIsolationQuery"));
@@ -672,6 +673,69 @@
   }
 
   
+  public void testAnswerWriteCloseIsolation() throws URISyntaxException {
+    logger.info("Testing AnswerWriteCloseIsolation");
+
+    try {
+      Session session = database.newSession();
+      try {
+        Variable subjectVariable   = new Variable("subject");
+        Variable predicateVariable = new Variable("predicate");
+        Variable objectVariable    = new Variable("object");
+
+        List<SelectElement> selectList = new ArrayList<SelectElement>(3);
+        selectList.add(subjectVariable);
+        selectList.add(predicateVariable);
+        selectList.add(objectVariable);
+
+        // Evaluate the query
+        Answer answer = session.query(new Query(
+          selectList,                                       // SELECT
+          new ModelResource(modelURI),                      // FROM
+          new ConstraintImpl(subjectVariable,               // WHERE
+                         predicateVariable,
+                         objectVariable),
+          null,                                             // HAVING
+          Arrays.asList(new Order[] {                       // ORDER BY
+            new Order(subjectVariable, true),
+            new Order(predicateVariable, true),
+            new Order(objectVariable, true)
+          }),
+          null,                                             // LIMIT
+          0,                                                // OFFSET
+          new UnconstrainedAnswer()                         // GIVEN
+        ));
+        String[][] results = {
+          { "test:s01", "test:p01", "test:o01" },
+          { "test:s01", "test:p02", "test:o01" },
+          { "test:s01", "test:p02", "test:o02" },
+          { "test:s01", "test:p03", "test:o02" },
+          { "test:s02", "test:p03", "test:o02" },
+          { "test:s02", "test:p04", "test:o02" },
+          { "test:s02", "test:p04", "test:o03" },
+          { "test:s02", "test:p05", "test:o03" },
+          { "test:s03", "test:p01", "test:o01" },
+          { "test:s03", "test:p05", "test:o03" },
+          { "test:s03", "test:p06", "test:o01" },
+          { "test:s03", "test:p06", "test:o03" },
+        };
+        compareResults(results, answer);
+
+        session.setAutoCommit(false);
+
+        answer.close();
+
+        session.commit();
+        session.setAutoCommit(true);
+      } finally {
+        session.close();
+      }
+    } catch (Exception e) {
+      fail(e);
+    }
+  }
+
+  
   public void testExplicitIsolationQuery() throws URISyntaxException {
     logger.info("testExplicitIsolationQuery");
     URI fileURI  = new File("data/xatest-model1.rdf").toURI();




More information about the Mulgara-svn mailing list