[Mulgara-svn] r2091 - in trunk/src/jar: query/java/org/mulgara/query resolver/java/org/mulgara/resolver server-rmi/java/org/mulgara/server/rmi

pag at mulgara.org pag at mulgara.org
Tue Jan 10 16:57:44 UTC 2012


Author: pag
Date: 2012-01-10 16:57:43 +0000 (Tue, 10 Jan 2012)
New Revision: 2091

Modified:
   trunk/src/jar/query/java/org/mulgara/query/AbstractAnswer.java
   trunk/src/jar/query/java/org/mulgara/query/AnswerImpl.java
   trunk/src/jar/query/java/org/mulgara/query/AnswerOperations.java
   trunk/src/jar/query/java/org/mulgara/query/ArrayAnswer.java
   trunk/src/jar/query/java/org/mulgara/query/BooleanAnswer.java
   trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java
   trunk/src/jar/query/java/org/mulgara/query/UnconstrainedAnswer.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/GlobalizedAnswer.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java
   trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/BlankNodeWrapperAnswer.java
Log:
All Answer implementations now consistently implement hashCode wherever equals is defined. TransactionalAnswer uses identity hashCode due to state being affected during a clone

Modified: trunk/src/jar/query/java/org/mulgara/query/AbstractAnswer.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/AbstractAnswer.java	2012-01-10 16:56:11 UTC (rev 2090)
+++ trunk/src/jar/query/java/org/mulgara/query/AbstractAnswer.java	2012-01-10 16:57:43 UTC (rev 2091)
@@ -47,4 +47,10 @@
     return false;
   }
 
+  /**
+   * Added to match {@link #equals(Object)}.
+   */
+  public int hashCode() {
+    return AnswerOperations.hashCode(this);
+  }
 }

Modified: trunk/src/jar/query/java/org/mulgara/query/AnswerImpl.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/AnswerImpl.java	2012-01-10 16:56:11 UTC (rev 2090)
+++ trunk/src/jar/query/java/org/mulgara/query/AnswerImpl.java	2012-01-10 16:57:43 UTC (rev 2091)
@@ -434,6 +434,13 @@
   }
 
   /**
+   * Added to match {@link #equals(Object)}.
+   */
+  public int hashCode() {
+    return super.hashCode();
+  }
+
+  /**
    * Generate a legible representation of the answer.
    *
    * @return a string representation of the results.

Modified: trunk/src/jar/query/java/org/mulgara/query/AnswerOperations.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/AnswerOperations.java	2012-01-10 16:56:11 UTC (rev 2090)
+++ trunk/src/jar/query/java/org/mulgara/query/AnswerOperations.java	2012-01-10 16:57:43 UTC (rev 2091)
@@ -152,28 +152,32 @@
     }
   }
   
-  public static int hashCode(Answer a) throws TuplesException {
-    // Clone the arguments to avoid interfering with their cursors
-    a = (Answer)a.clone();
-
-    // Check that columns match
-    int numberOfVariables = a.getNumberOfVariables();
-    int result = numberOfVariables;
-
+  public static int hashCode(Answer ans) {
     try {
-      // Check that all row values match
-      a.beforeFirst();
-      while (a.next()) {
-        // Verify that the rows match
-        for (int i = 0; i < numberOfVariables; i++) {
-          Object o = a.getObject(i);
-          if (o != null) result ^= o.hashCode();
+      // Clone the arguments to avoid interfering with their cursors
+      Answer a = (Answer)ans.clone();
+  
+      // Check that columns match
+      int numberOfVariables = a.getNumberOfVariables();
+      int result = numberOfVariables;
+  
+      try {
+        // Iterate over the rows
+        a.beforeFirst();
+        while (a.next()) {
+          // add in all of the row
+          for (int i = 0; i < numberOfVariables; i++) {
+            Object o = a.getObject(i);
+            if (o != null) result ^= o.hashCode();
+          }
         }
+      } finally {
+        // Close the clone
+        a.close();
       }
-    } finally {
-      // Close our clones
-      a.close();
+      return result;
+    } catch (TuplesException e) {
+      throw new RuntimeException("Unable to generate hashCode for answer", e);
     }
-    return result;
   }
 }

Modified: trunk/src/jar/query/java/org/mulgara/query/ArrayAnswer.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/ArrayAnswer.java	2012-01-10 16:56:11 UTC (rev 2090)
+++ trunk/src/jar/query/java/org/mulgara/query/ArrayAnswer.java	2012-01-10 16:57:43 UTC (rev 2091)
@@ -378,6 +378,13 @@
   }
 
   /**
+   * Added to match {@link #equals(Object)}.
+   */
+  public int hashCode() {
+    return super.hashCode();
+  }
+
+  /**
    * @return a formatted representation of this instance
    */
   public String toString() {

Modified: trunk/src/jar/query/java/org/mulgara/query/BooleanAnswer.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/BooleanAnswer.java	2012-01-10 16:56:11 UTC (rev 2090)
+++ trunk/src/jar/query/java/org/mulgara/query/BooleanAnswer.java	2012-01-10 16:57:43 UTC (rev 2091)
@@ -173,5 +173,4 @@
   public Object clone() {
     return super.clone();
   }
-
 }

Modified: trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java	2012-01-10 16:56:11 UTC (rev 2090)
+++ trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java	2012-01-10 16:57:43 UTC (rev 2091)
@@ -275,7 +275,9 @@
 
   /** @see java.lang.Object#clone() */
   public Object clone() {
-    return new GraphAnswer((Answer)rawAnswer.clone());
+    GraphAnswer a = (GraphAnswer)super.clone();
+    a.rawAnswer = (Answer)rawAnswer.clone();
+    return a;
   }
 
 
@@ -291,6 +293,13 @@
   }
 
   /**
+   * Added to match {@link #equals(Object)}.
+   */
+  public int hashCode() {
+    return super.hashCode();
+  }
+
+  /**
    * An internal method for moving on to the next row, without testing validity.
    * @return <code>true</code> if this call has not exhausted the rows.
    * @throws TuplesException Due to an error in the underlying rawAnswer.

Modified: trunk/src/jar/query/java/org/mulgara/query/UnconstrainedAnswer.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/UnconstrainedAnswer.java	2012-01-10 16:56:11 UTC (rev 2090)
+++ trunk/src/jar/query/java/org/mulgara/query/UnconstrainedAnswer.java	2012-01-10 16:57:43 UTC (rev 2091)
@@ -234,7 +234,7 @@
     // Gotta be non-null and of matching type
     if ((object != null) && (object instanceof Answer)) {
       try {
-        return AnswerOperations.equal(this, (Answer) object);
+        return AnswerOperations.equal(this, (Answer)object);
       } catch (TuplesException e) {
         logger.fatal("Couldn't test equality of answers", e);
       }
@@ -244,6 +244,13 @@
   }
 
   /**
+   * Added to match {@link #equals(Object)}.
+   */
+  public int hashCode() {
+    return super.hashCode();
+  }
+
+  /**
    * This currently tries to mimic the
    * {@link org.mulgara.util.MemoryResultSet#toString} method.
    *

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/GlobalizedAnswer.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/GlobalizedAnswer.java	2012-01-10 16:56:11 UTC (rev 2090)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/GlobalizedAnswer.java	2012-01-10 16:57:43 UTC (rev 2091)
@@ -221,4 +221,11 @@
     }
     return false;
   }
+
+  /**
+   * Added to match {@link #equals(Object)}.
+   */
+  public int hashCode() {
+    return super.hashCode();
+  }
 }

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java	2012-01-10 16:56:11 UTC (rev 2090)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java	2012-01-10 16:57:43 UTC (rev 2091)
@@ -248,6 +248,14 @@
     }
   }
 
+  public boolean equals(Object o) {
+    return super.equals(o);
+  }
+
+  public int hashCode() {
+    return System.identityHashCode(this);
+  }
+
   private void report(String desc) {
     if (logger.isDebugEnabled()) {
       logger.debug(desc + ": " + System.identityHashCode(this) + ", xa=" + System.identityHashCode(transaction));

Modified: trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/BlankNodeWrapperAnswer.java
===================================================================
--- trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/BlankNodeWrapperAnswer.java	2012-01-10 16:56:11 UTC (rev 2090)
+++ trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/BlankNodeWrapperAnswer.java	2012-01-10 16:57:43 UTC (rev 2091)
@@ -189,5 +189,4 @@
   public boolean next() throws TuplesException {
     return answer.next();
   }
-  
 }



More information about the Mulgara-svn mailing list