Author: srowen
Date: Thu Jan 27 11:14:51 2011
New Revision: 1064081

URL: http://svn.apache.org/viewvc?rev=1064081&view=rev
Log:
Fix a few errors in getting diffs from JDBC

Modified:
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/MySQLJDBCDiffStorage.java

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java?rev=1064081&r1=1064080&r2=1064081&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java
 Thu Jan 27 11:14:51 2011
@@ -144,6 +144,14 @@ public abstract class AbstractJDBCDiffSt
   
   @Override
   public RunningAverage getDiff(long itemID1, long itemID2) throws 
TasteException {
+
+    boolean flipped = itemID1 > itemID2;
+    if (flipped) {
+      long temp = itemID1;
+      itemID1 = itemID2;
+      itemID2 = temp;
+    }
+
     Connection conn = null;
     PreparedStatement stmt = null;
     ResultSet rs = null;
@@ -154,11 +162,17 @@ public abstract class AbstractJDBCDiffSt
       stmt.setFetchSize(getFetchSize());
       stmt.setLong(1, itemID1);
       stmt.setLong(2, itemID2);
-      stmt.setLong(3, itemID2);
-      stmt.setLong(4, itemID1);
       log.debug("Executing SQL query: {}", getDiffSQL);
       rs = stmt.executeQuery();
-      return rs.next() ? new FixedRunningAverageAndStdDev(rs.getDouble(2), 
rs.getDouble(3), rs.getInt(1)) : null;
+      if (rs.next()) {
+        double average = rs.getDouble(2);
+        if (flipped) {
+          average = -average;
+        }
+        return new FixedRunningAverageAndStdDev(average, rs.getDouble(3), 
rs.getInt(1));
+      } else {
+        return null;
+      }
     } catch (SQLException sqle) {
       log.warn("Exception while retrieving diff", sqle);
       throw new TasteException(sqle);

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/MySQLJDBCDiffStorage.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/MySQLJDBCDiffStorage.java?rev=1064081&r1=1064080&r2=1064081&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/MySQLJDBCDiffStorage.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/MySQLJDBCDiffStorage.java
 Thu Jan 27 11:14:51 2011
@@ -113,15 +113,18 @@ public final class MySQLJDBCDiffStorage 
     super(dataModel,
         // getDiffSQL
         "SELECT " + countColumn + ", " + avgColumn + ", " + stdevColumn + " 
FROM "
-            + diffsTable + " WHERE " + itemIDAColumn
-            + "=? AND " + itemIDBColumn + "=? UNION " + "SELECT " + 
countColumn + ", " + avgColumn + " FROM "
             + diffsTable + " WHERE " + itemIDAColumn + "=? AND " + 
itemIDBColumn + "=?",
         // getDiffsSQL
-        "SELECT " + countColumn + ", " + avgColumn + ", " + stdevColumn + ", " 
+ itemIDAColumn 
+        "SELECT " + countColumn + ", " + avgColumn + ", " + stdevColumn + ", " 
+ itemIDAColumn
             + " FROM " + diffsTable + ", "
             + dataModel.getPreferenceTable() + " WHERE " + itemIDBColumn + "=? 
AND " + itemIDAColumn + " = "
             + dataModel.getItemIDColumn() + " AND " + 
dataModel.getUserIDColumn() + "=? ORDER BY "
-            + itemIDAColumn,
+            + itemIDAColumn + " UNION "
+            + "SELECT " + countColumn + ", -" + avgColumn + ", " + stdevColumn 
+ ", " + itemIDBColumn
+            + " FROM " + diffsTable + ", "
+            + dataModel.getPreferenceTable() + " WHERE " + itemIDAColumn + "=? 
AND " + itemIDBColumn + " = "
+            + dataModel.getItemIDColumn() + " AND " + 
dataModel.getUserIDColumn() + "=? ORDER BY "
+            + itemIDBColumn,
         // getAverageItemPrefSQL
         "SELECT COUNT(1), AVG(" + dataModel.getPreferenceColumn() + ") FROM "
             + dataModel.getPreferenceTable() + " WHERE " + 
dataModel.getItemIDColumn() + "=?",


Reply via email to