You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2010/12/11 13:38:32 UTC

svn commit: r1044641 [1/3] - in /incubator/lcf/trunk/framework: core/src/main/java/org/apache/manifoldcf/core/database/ core/src/main/java/org/apache/manifoldcf/core/interfaces/ pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/

Author: kwright
Date: Sat Dec 11 12:38:31 2010
New Revision: 1044641

URL: http://svn.apache.org/viewvc?rev=1044641&view=rev
Log:
Remove quoteSQLString from database interfaces, and all internal usages.  It has been deemed a potential security risk, should someday someone use it incorrectly.

Modified:
    incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/BaseTable.java
    incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceDerby.java
    incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java
    incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceMySQL.java
    incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfacePostgreSQL.java
    incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/interfaces/IDBInterface.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/HopCount.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/IntrinsicLink.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobQueue.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java

Modified: incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/BaseTable.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/BaseTable.java?rev=1044641&r1=1044640&r2=1044641&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/BaseTable.java (original)
+++ incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/BaseTable.java Sat Dec 11 12:38:31 2010
@@ -347,28 +347,6 @@ public class BaseTable
     return dbInterface.constructDistinctOnClause(outputParameters,baseQuery,baseParameters,distinctFields,otherFields);
   }
 
-  /** Quote a sql string.
-  * This method quotes a sql string in the proper manner for the database in question.
-  *@param string is the input string.
-  *@return the properly quoted (and escaped) output string.
-  */
-  protected String quoteSQLString(String string)
-  {
-    return dbInterface.quoteSQLString(string);
-  }
-
-  /** Prepare a sql date for use in a query.
-  * This method prepares a query constant using the sql date string passed in.
-  * The date passed in is presumed to be in "standard form", or something that might have
-  * come back from a resultset of a query.
-  *@param date is the date in standard form.
-  *@return the sql date expression to use for date comparisons.
-  */
-  protected String prepareSQLDate(String date)
-  {
-    return dbInterface.prepareSQLDate(date);
-  }
-
   /** Obtain the maximum number of individual items that should be
   * present in an IN clause.  Exceeding this amount will potentially cause the query performance
   * to drop.

Modified: incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceDerby.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceDerby.java?rev=1044641&r1=1044640&r2=1044641&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceDerby.java (original)
+++ incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceDerby.java Sat Dec 11 12:38:31 2010
@@ -954,41 +954,6 @@ public class DBInterfaceDerby extends Da
     return sb.toString();
   }
 
-  /** Quote a sql string.
-  * This method quotes a sql string in the proper manner for the database in question.
-  *@param string is the input string.
-  *@return the properly quoted (and escaped) output string.
-  */
-  public String quoteSQLString(String string)
-  {
-    StringBuffer rval = new StringBuffer();
-    char quoteChar = '\'';
-    rval.append(quoteChar);
-    int i = 0;
-    while (i < string.length())
-    {
-      char x = string.charAt(i++);
-      if (x == quoteChar)
-        rval.append(quoteChar);
-      rval.append(x);
-    }
-    rval.append(quoteChar);
-    return rval.toString();
-  }
-
-  /** Prepare a sql date for use in a query.
-  * This method prepares a query constant using the sql date string passed in.
-  * The date passed in is presumed to be in "standard form", or something that might have
-  * come back from a resultset of a query.
-  *@param date is the date in standard form.
-  *@return the sql date expression to use for date comparisons.
-  */
-  public String prepareSQLDate(String date)
-  {
-    // MHL
-    return null;
-  }
-
   /** Obtain the maximum number of individual items that should be
   * present in an IN clause.  Exceeding this amount will potentially cause the query performance
   * to drop.

Modified: incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java?rev=1044641&r1=1044640&r2=1044641&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java (original)
+++ incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java Sat Dec 11 12:38:31 2010
@@ -524,28 +524,6 @@ public class DBInterfaceHSQLDB extends D
   public void createUserAndDatabase(String adminUserName, String adminPassword, StringSet invalidateKeys)
     throws ManifoldCFException
   {
-    /*
-    // Database name is already fully expanded, so we don't need to do it again.
-    // Create a connection to the master database, using the credentials supplied
-    Database masterDatabase = new Database(context,_url+databaseName,_driver,databaseName,adminUserName,adminPassword);
-    try
-    {
-      // Create user
-      ArrayList params = new ArrayList();
-      params.add(userName);
-      IResultSet set = masterDatabase.executeQuery("SELECT * FROM INFORMATION_SCHEMA.SYSTEM_USERS WHERE USER_NAME=?",params,null,null,null,true,-1,null,null);
-      if (set.getRowCount() == 0)
-      {
-	masterDatabase.executeQuery("CREATE USER \""+userName+"\" PASSWORD "+
-	  quoteSQLString(password),null,null,invalidateKeys,null,false,0,null,null);
-      }
-      
-    }
-    catch (ManifoldCFException e)
-    {
-      throw reinterpretException(e);
-    }
-    */
   }
 
   /** Drop user and database.
@@ -860,7 +838,7 @@ public class DBInterfaceHSQLDB extends D
   */
   public String constructRegexpClause(String column, String regularExpression, boolean caseInsensitive)
   {
-    return "REGEXP_MATCHES("+column+","+quoteSQLString(regularExpression)+")";
+    return "REGEXP_MATCHES("+column+","+regularExpression+")";
   }
 
   /** Construct a regular-expression substring clause.
@@ -948,41 +926,6 @@ public class DBInterfaceHSQLDB extends D
     return sb.toString();
   }
 
-  /** Quote a sql string.
-  * This method quotes a sql string in the proper manner for the database in question.
-  *@param string is the input string.
-  *@return the properly quoted (and escaped) output string.
-  */
-  public String quoteSQLString(String string)
-  {
-    StringBuffer rval = new StringBuffer();
-    char quoteChar = '\'';
-    rval.append(quoteChar);
-    int i = 0;
-    while (i < string.length())
-    {
-      char x = string.charAt(i++);
-      if (x == quoteChar)
-        rval.append(quoteChar);
-      rval.append(x);
-    }
-    rval.append(quoteChar);
-    return rval.toString();
-  }
-
-  /** Prepare a sql date for use in a query.
-  * This method prepares a query constant using the sql date string passed in.
-  * The date passed in is presumed to be in "standard form", or something that might have
-  * come back from a resultset of a query.
-  *@param date is the date in standard form.
-  *@return the sql date expression to use for date comparisons.
-  */
-  public String prepareSQLDate(String date)
-  {
-    // MHL
-    return null;
-  }
-
   /** Obtain the maximum number of individual items that should be
   * present in an IN clause.  Exceeding this amount will potentially cause the query performance
   * to drop.

Modified: incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceMySQL.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceMySQL.java?rev=1044641&r1=1044640&r2=1044641&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceMySQL.java (original)
+++ incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceMySQL.java Sat Dec 11 12:38:31 2010
@@ -387,14 +387,18 @@ public class DBInterfaceMySQL extends Da
   {
     // Connect to super database
     Database masterDatabase = new Database(context,_url+"mysql",_driver,"mysql",adminUserName,adminPassword);
-    masterDatabase.executeQuery("CREATE DATABASE "+databaseName+" CHARACTER SET "+
-      quoteSQLString("utf8"),null,null,invalidateKeys,null,false,0,null,null);
+    ArrayList list = new ArrayList();
+    list.add("utf8");
+    masterDatabase.executeQuery("CREATE DATABASE "+databaseName+" CHARACTER SET ?",list,
+      null,invalidateKeys,null,false,0,null,null);
     if (userName != null)
     {
-      masterDatabase.executeQuery("GRANT ALL ON "+databaseName+".* TO "+
-        quoteSQLString(userName)+"@"+
-        quoteSQLString("localhost")+" IDENTIFIED BY "+
-        quoteSQLString(password),null,null,invalidateKeys,null,false,0,null,null);
+      list.clear();
+      list.add(userName);
+      list.add("localhost");
+      list.add(password);
+      masterDatabase.executeQuery("GRANT ALL ON "+databaseName+".* TO ?@? IDENTIFIED BY ?",list,
+        null,invalidateKeys,null,false,0,null,null);
     }
   }
 
@@ -560,7 +564,7 @@ public class DBInterfaceMySQL extends Da
   public String constructSubstringClause(String column, String regularExpression, boolean caseInsensitive)
   {
     // MHL for mysql
-    return quoteSQLString("");
+    return regularExpression;
   }
 
   /** Construct an offset/limit clause.
@@ -619,41 +623,6 @@ public class DBInterfaceMySQL extends Da
     return sb.toString();
   }
 
-  /** Quote a sql string.
-  * This method quotes a sql string in the proper manner for the database in question.
-  *@param string is the input string.
-  *@return the properly quoted (and escaped) output string.
-  */
-  public String quoteSQLString(String string)
-  {
-    StringBuffer rval = new StringBuffer();
-    char quoteChar = '\'';
-    rval.append(quoteChar);
-    int i = 0;
-    while (i < string.length())
-    {
-      char x = string.charAt(i++);
-      if (x == quoteChar)
-        rval.append(quoteChar);
-      rval.append(x);
-    }
-    rval.append(quoteChar);
-    return rval.toString();
-  }
-
-  /** Prepare a sql date for use in a query.
-  * This method prepares a query constant using the sql date string passed in.
-  * The date passed in is presumed to be in "standard form", or something that might have
-  * come back from a resultset of a query.
-  *@param date is the date in standard form.
-  *@return the sql date expression to use for date comparisons.
-  */
-  public String prepareSQLDate(String date)
-  {
-    // MHL
-    return null;
-  }
-
   /** Obtain the maximum number of individual items that should be
   * present in an IN clause.  Exceeding this amount will potentially cause the query performance
   * to drop.

Modified: incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfacePostgreSQL.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfacePostgreSQL.java?rev=1044641&r1=1044640&r2=1044641&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfacePostgreSQL.java (original)
+++ incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfacePostgreSQL.java Sat Dec 11 12:38:31 2010
@@ -514,21 +514,27 @@ public class DBInterfacePostgreSQL exten
       // Create user
       ArrayList params = new ArrayList();
       params.add(userName);
-      IResultSet set = masterDatabase.executeQuery("SELECT * FROM pg_user WHERE usename=?",params,null,null,null,true,-1,null,null);
+      IResultSet set = masterDatabase.executeQuery("SELECT * FROM pg_user WHERE usename=?",params,
+        null,null,null,true,-1,null,null);
       if (set.getRowCount() == 0)
       {
-	masterDatabase.executeQuery("CREATE USER "+userName+" PASSWORD "+
-	  quoteSQLString(password),null,null,invalidateKeys,null,false,0,null,null);
+        params.clear();
+        params.add(password);
+	masterDatabase.executeQuery("CREATE USER "+userName+" PASSWORD ?",params,
+          null,invalidateKeys,null,false,0,null,null);
       }
       
       // Create database
-      params = new ArrayList();
+      params.clear();
       params.add(databaseName);
-      set = masterDatabase.executeQuery("SELECT * FROM pg_database WHERE datname=?",params,null,null,null,true,-1,null,null);
+      set = masterDatabase.executeQuery("SELECT * FROM pg_database WHERE datname=?",params,
+        null,null,null,true,-1,null,null);
       if (set.getRowCount() == 0)
       {
+        params.clear();
+        params.add("utf8");
 	masterDatabase.executeQuery("CREATE DATABASE "+databaseName+" OWNER="+
-	  userName+" ENCODING="+quoteSQLString("utf8"),null,null,invalidateKeys,null,false,0,null,null);
+	  userName+" ENCODING=?",params,null,invalidateKeys,null,false,0,null,null);
       }
     }
     catch (ManifoldCFException e)
@@ -624,6 +630,7 @@ public class DBInterfacePostgreSQL exten
     throws ManifoldCFException
   {
     StringBuffer query = new StringBuffer();
+    ArrayList list = new ArrayList();
     query.append("SELECT pg_attribute.attname AS \"Field\",");
     query.append("CASE pg_type.typname WHEN 'int2' THEN 'smallint' WHEN 'int4' THEN 'int'");
     query.append(" WHEN 'int8' THEN 'bigint' WHEN 'varchar' THEN 'varchar(' || pg_attribute.atttypmod-4 || ')'");
@@ -634,10 +641,11 @@ public class DBInterfacePostgreSQL exten
     query.append("CASE pg_type.typname WHEN 'varchar' THEN substring(pg_attrdef.adsrc from '^(.*).*$') ELSE pg_attrdef.adsrc END AS Default ");
     query.append("FROM pg_class INNER JOIN pg_attribute ON (pg_class.oid=pg_attribute.attrelid) INNER JOIN pg_type ON (pg_attribute.atttypid=pg_type.oid) ");
     query.append("LEFT JOIN pg_attrdef ON (pg_class.oid=pg_attrdef.adrelid AND pg_attribute.attnum=pg_attrdef.adnum) ");
-    query.append("WHERE pg_class.relname=").append(quoteSQLString(tableName)).append(" AND pg_attribute.attnum>=1 AND NOT pg_attribute.attisdropped ");
+    query.append("WHERE pg_class.relname=? AND pg_attribute.attnum>=1 AND NOT pg_attribute.attisdropped ");
     query.append("ORDER BY pg_attribute.attnum");
+    list.add(tableName);
 
-    IResultSet set = performQuery(query.toString(),null,cacheKeys,queryClass);
+    IResultSet set = performQuery(query.toString(),list,cacheKeys,queryClass);
     if (set.getRowCount() == 0)
       return null;
     // Digest the result
@@ -669,9 +677,11 @@ public class DBInterfacePostgreSQL exten
 
     String query = "SELECT pg_catalog.pg_get_indexdef(i.indexrelid, 0, true) AS indexdef "+
       "FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i "+
-      "WHERE c.relname = '"+tableName+"' AND c.oid = i.indrelid AND i.indexrelid = c2.oid";
-
-    IResultSet result = performQuery(query,null,cacheKeys,queryClass);
+      "WHERE c.relname = ? AND c.oid = i.indrelid AND i.indexrelid = c2.oid";
+    ArrayList list = new ArrayList();
+    list.add(tableName);
+    
+    IResultSet result = performQuery(query,list,cacheKeys,queryClass);
     int i = 0;
     while (i < result.getRowCount())
     {
@@ -929,41 +939,6 @@ public class DBInterfacePostgreSQL exten
     return sb.toString();
   }
 
-  /** Quote a sql string.
-  * This method quotes a sql string in the proper manner for the database in question.
-  *@param string is the input string.
-  *@return the properly quoted (and escaped) output string.
-  */
-  public String quoteSQLString(String string)
-  {
-    StringBuffer rval = new StringBuffer();
-    char quoteChar = '\'';
-    rval.append(quoteChar);
-    int i = 0;
-    while (i < string.length())
-    {
-      char x = string.charAt(i++);
-      if (x == quoteChar)
-        rval.append(quoteChar);
-      rval.append(x);
-    }
-    rval.append(quoteChar);
-    return rval.toString();
-  }
-
-  /** Prepare a sql date for use in a query.
-  * This method prepares a query constant using the sql date string passed in.
-  * The date passed in is presumed to be in "standard form", or something that might have
-  * come back from a resultset of a query.
-  *@param date is the date in standard form.
-  *@return the sql date expression to use for date comparisons.
-  */
-  public String prepareSQLDate(String date)
-  {
-    // MHL
-    return null;
-  }
-
   /** Obtain the maximum number of individual items that should be
   * present in an IN clause.  Exceeding this amount will potentially cause the query performance
   * to drop.

Modified: incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/interfaces/IDBInterface.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/interfaces/IDBInterface.java?rev=1044641&r1=1044640&r2=1044641&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/interfaces/IDBInterface.java (original)
+++ incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/interfaces/IDBInterface.java Sat Dec 11 12:38:31 2010
@@ -297,22 +297,6 @@ public interface IDBInterface
   */
   public String constructDistinctOnClause(ArrayList outputParameters, String baseQuery, ArrayList baseParameters, String[] distinctFields, Map otherFields);
   
-  /** Quote a sql string.
-  * This method quotes a sql string in the proper manner for the database in question.
-  *@param string is the input string.
-  *@return the properly quoted (and escaped) output string.
-  */
-  public String quoteSQLString(String string);
-
-  /** Prepare a sql date for use in a query.
-  * This method prepares a query constant using the sql date string passed in.
-  * The date passed in is presumed to be in "standard form", or something that might have
-  * come back from a resultset of a query.
-  *@param date is the date in standard form.
-  *@return the sql date expression to use for date comparisons.
-  */
-  public String prepareSQLDate(String date);
-
   /** Obtain the maximum number of individual items that should be
   * present in an IN clause.  Exceeding this amount will potentially cause the query performance
   * to drop.

Modified: incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/HopCount.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/HopCount.java?rev=1044641&r1=1044640&r2=1044641&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/HopCount.java (original)
+++ incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/HopCount.java Sat Dec 11 12:38:31 2010
@@ -510,7 +510,9 @@ public class HopCount extends org.apache
   */
   public void deleteMatchingDocuments(Long jobID, String[] legalLinkTypes,
     String sourceTableName,
-    String sourceTableIDColumn, String sourceTableJobColumn, String sourceTableCriteria, int hopcountMethod)
+    String sourceTableIDColumn, String sourceTableJobColumn,
+    String sourceTableCriteria, ArrayList sourceTableParams,
+    int hopcountMethod)
     throws ManifoldCFException
   {
     // This should work similarly to deleteDocumentIdentifiers() except that the identifiers
@@ -523,7 +525,7 @@ public class HopCount extends org.apache
       {
         doDeleteInvalidation(jobID,legalLinkTypes,false,null,sourceTableName,
           sourceTableIDColumn,sourceTableJobColumn,
-          sourceTableCriteria);
+          sourceTableCriteria,sourceTableParams);
       }
 
     }
@@ -566,7 +568,7 @@ public class HopCount extends org.apache
 
       // This also removes the links themselves...
       if (hopcountMethod == IJobDescription.HOPCOUNT_ACCURATE)
-        doDeleteInvalidation(jobID,legalLinkTypes,false,sourceDocumentHashes,null,null,null,null);
+        doDeleteInvalidation(jobID,legalLinkTypes,false,sourceDocumentHashes,null,null,null,null,null);
 
     }
     catch (ManifoldCFException e)
@@ -1024,7 +1026,7 @@ public class HopCount extends org.apache
 
 
         // Invalidate all links with the given source documents that match the common expression
-        doDeleteInvalidation(jobID,legalLinkTypes,true,sourceDocumentHashes,null,null,null,null);
+        doDeleteInvalidation(jobID,legalLinkTypes,true,sourceDocumentHashes,null,null,null,null,null);
       }
       // Make all new and existing links become just "base" again.
       intrinsicLinkManager.restoreLinks(jobID,sourceDocumentHashes);
@@ -1052,13 +1054,19 @@ public class HopCount extends org.apache
   * still connected to the root. */
   protected void doDeleteInvalidation(Long jobID, String[] legalLinkTypes, boolean existingOnly,
     String[] sourceDocumentHashes, String sourceTableName,
-    String sourceTableIDColumn, String sourceTableJobColumn, String sourceTableCriteria)
+    String sourceTableIDColumn, String sourceTableJobColumn,
+    String sourceTableCriteria, ArrayList sourceTableParams)
     throws ManifoldCFException
   {
 
     String commonNewExpression = null;
+    ArrayList commonNewList = null;
     if (existingOnly)
-      commonNewExpression = intrinsicLinkManager.newField+"="+quoteSQLString(intrinsicLinkManager.statusToString(intrinsicLinkManager.LINKSTATUS_BASE));
+    {
+      commonNewList = new ArrayList();
+      commonNewList.add(intrinsicLinkManager.statusToString(intrinsicLinkManager.LINKSTATUS_BASE));
+      commonNewExpression = intrinsicLinkManager.newField+"=?";
+    }
 
     // Clear up hopcount table
     if (sourceDocumentHashes == null || sourceDocumentHashes.length > 0)
@@ -1112,7 +1120,7 @@ public class HopCount extends org.apache
         {
           if (k == maxClause)
           {
-            markForDelete(sb.toString(),list,commonNewExpression);
+            markForDelete(sb.toString(),list,commonNewExpression,commonNewList);
             sb.setLength(0);
             list.clear();
             k = 0;
@@ -1128,7 +1136,7 @@ public class HopCount extends org.apache
           k++;
         }
         if (k > 0)
-          markForDelete(sb.toString(),list,commonNewExpression);
+          markForDelete(sb.toString(),list,commonNewExpression,commonNewList);
         noteModifications(0,sourceDocumentHashes.length,0);
       }
       else
@@ -1146,6 +1154,7 @@ public class HopCount extends org.apache
         list.add(jobID);
         list.add(jobID);
         list.add(jobID);
+        list.addAll(sourceTableParams);
         sb.append(idField).append(" IN(SELECT t0.").append(deleteDepsManager.ownerIDField).append(" FROM ")
           .append(deleteDepsManager.getTableName()).append(" t0,").append(sourceTableName).append(",")
           .append(intrinsicLinkManager.getTableName()).append(" t1 WHERE ")
@@ -1173,9 +1182,12 @@ public class HopCount extends org.apache
         Logging.hopcount.debug("Done setting hopcount rows for job "+jobID+" to initial distances");
 
       // Remove the intrinsic links that we said we would - BEFORE we evaluate the queue.
-      intrinsicLinkManager.removeLinks(jobID,commonNewExpression,sourceDocumentHashes,
-        sourceTableName,sourceTableIDColumn,sourceTableJobColumn,
-        sourceTableCriteria);
+      intrinsicLinkManager.removeLinks(jobID,
+        commonNewExpression,commonNewList,
+        sourceDocumentHashes,
+        sourceTableName,
+        sourceTableIDColumn,sourceTableJobColumn,
+        sourceTableCriteria,sourceTableParams);
 
       // Remove the delete dependencies of the nodes marked as being queued, with distance infinity.
       ArrayList queryList = new ArrayList();
@@ -1200,9 +1212,11 @@ public class HopCount extends org.apache
 
   }
 
-  protected void markForDelete(String query, ArrayList list, String commonNewExpression)
+  protected void markForDelete(String query, ArrayList list, String commonNewExpression, ArrayList commonNewList)
     throws ManifoldCFException
   {
+    ArrayList thisList = new ArrayList();
+    thisList.addAll(list);
     StringBuffer sb = new StringBuffer("WHERE ");
     sb.append(idField).append(" IN(SELECT ").append(deleteDepsManager.ownerIDField).append(" FROM ")
       .append(deleteDepsManager.getTableName()).append(" t0 WHERE (").append(query).append(") AND EXISTS(SELECT 'x' FROM ")
@@ -1214,14 +1228,17 @@ public class HopCount extends org.apache
       .append(deleteDepsManager.parentIDHashField).append(" AND t1.").append(intrinsicLinkManager.childIDHashField)
       .append("=t0.").append(deleteDepsManager.childIDHashField);
     if (commonNewExpression != null)
+    {
       sb.append(" AND t1.").append(commonNewExpression);
+      thisList.addAll(commonNewList);
+    }
     sb.append("))");
 
     HashMap map = new HashMap();
     // These are whacked back to "infinity" to avoid infinite looping in a cut-off graph.
     map.put(distanceField,new Long(-1L));
     map.put(markForDeathField,markToString(MARK_DELETING));
-    performUpdate(map,sb.toString(),list,null);
+    performUpdate(map,sb.toString(),thisList,null);
   }
 
   /** Get document's children.

Modified: incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/IntrinsicLink.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/IntrinsicLink.java?rev=1044641&r1=1044640&r2=1044641&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/IntrinsicLink.java (original)
+++ incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/IntrinsicLink.java Sat Dec 11 12:38:31 2010
@@ -306,9 +306,12 @@ public class IntrinsicLink extends org.a
   /** Remove all target links of the specified source documents that are not marked as "new" or "existing", and
   * return the others to their base state.
   */
-  public void removeLinks(Long jobID, String commonNewExpression, String[] sourceDocumentIDHashes,
+  public void removeLinks(Long jobID,
+    String commonNewExpression, ArrayList commonNewParams,
+    String[] sourceDocumentIDHashes,
     String sourceTableName,
-    String sourceTableIDColumn, String sourceTableJobColumn, String sourceTableCriteria)
+    String sourceTableIDColumn, String sourceTableJobColumn,
+    String sourceTableCriteria, ArrayList sourceTableParams)
     throws ManifoldCFException
   {
     beginTransaction();
@@ -325,7 +328,7 @@ public class IntrinsicLink extends org.a
         {
           if (k == maxClause)
           {
-            performRemoveLinks(sb.toString(),list,commonNewExpression);
+            performRemoveLinks(sb.toString(),list,commonNewExpression,commonNewParams);
             sb.setLength(0);
             list.clear();
             k = 0;
@@ -341,13 +344,14 @@ public class IntrinsicLink extends org.a
         }
 
         if (k > 0)
-          performRemoveLinks(sb.toString(),list,commonNewExpression);
+          performRemoveLinks(sb.toString(),list,commonNewExpression,commonNewParams);
         noteModifications(0,0,sourceDocumentIDHashes.length);
       }
       else
       {
         ArrayList list = new ArrayList();
         list.add(jobID);
+        list.addAll(sourceTableParams);
         StringBuffer sb = new StringBuffer("WHERE EXISTS(SELECT 'x' FROM ");
         sb.append(sourceTableName).append(" WHERE ").append(sourceTableJobColumn).append("=? AND ")
           .append(sourceTableIDColumn).append("=").append(getTableName()).append(".").append(childIDHashField)
@@ -373,14 +377,20 @@ public class IntrinsicLink extends org.a
 
   }
 
-  protected void performRemoveLinks(String query, ArrayList list, String commonNewExpression)
+  protected void performRemoveLinks(String query, ArrayList list, String commonNewExpression,
+    ArrayList commonNewParams)
     throws ManifoldCFException
   {
+    ArrayList thisList = new ArrayList();
+    thisList.addAll(list);
     StringBuffer sb = new StringBuffer("WHERE (");
     sb.append(query).append(")");
     if (commonNewExpression != null)
+    {
+      thisList.addAll(commonNewParams);
       sb.append(" AND ").append(commonNewExpression);
-    performDelete(sb.toString(),list,null);
+    }
+    performDelete(sb.toString(),thisList,null);
   }
 
   /** Return all target links of the specified source documents to their base state.