bloritsch    01/02/27 11:13:34

  Modified:    src/org/apache/cocoon/acting Tag: xml-cocoon2
                        DatabaseAddAction.java
  Log:
  Fixed OutOfMemoryException
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.6   +23 -30    
xml-cocoon/src/org/apache/cocoon/acting/Attic/DatabaseAddAction.java
  
  Index: DatabaseAddAction.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon/src/org/apache/cocoon/acting/Attic/DatabaseAddAction.java,v
  retrieving revision 1.1.2.5
  retrieving revision 1.1.2.6
  diff -u -r1.1.2.5 -r1.1.2.6
  --- DatabaseAddAction.java    2001/02/27 18:19:07     1.1.2.5
  +++ DatabaseAddAction.java    2001/02/27 19:13:32     1.1.2.6
  @@ -40,7 +40,7 @@
    * only one table at a time to update.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
  - * @version CVS $Revision: 1.1.2.5 $ $Date: 2001/02/27 18:19:07 $
  + * @version CVS $Revision: 1.1.2.6 $ $Date: 2001/02/27 19:13:32 $
    */
   public class DatabaseAddAction extends AbstractDatabaseAction {
       private static final Map addStatements = new HashMap();
  @@ -58,11 +58,11 @@
           try {
               Configuration conf = 
this.getConfiguration(param.getParameter("form-descriptor", null));
               String query = this.getAddQuery(conf);
  +
               datasource = this.getDataSource(conf);
               conn = datasource.getConnection();
               HttpRequest request = (HttpRequest) 
objectModel.get(Constants.REQUEST_OBJECT);
               conn.setAutoCommit(false);
  -
               PreparedStatement statement = conn.prepareStatement(query);
   
               Iterator keys = 
conf.getChild("table").getChild("keys").getChildren("key");
  @@ -73,7 +73,17 @@
               while (keys.hasNext()) {
                   Configuration key = (Configuration) keys.next();
                   if ("manual".equals(key.getAttribute("mode", "automatic"))) {
  -                    this.setColumn(statement, currentIndex, request, key);
  +                    String selectQuery = this.getSelectQuery(key);
  +                    getLogger().info("Select query is: " + selectQuery);
  +
  +                    ResultSet set = 
conn.createStatement().executeQuery(selectQuery);
  +                    int value = set.getInt("maxid") + 1;
  +
  +                    getLogger().info("Assigning column " + currentIndex + 
"'" + key.getAttribute("dbcol") + "' to: " + value);
  +                    statement.setInt(currentIndex, value);
  +
  +                    set.close();
  +                    set.getStatement().close();
                       currentIndex++;
                   }
               }
  @@ -128,6 +138,7 @@
                   queryBuffer.append(" (");
   
                   boolean firstIteration = true;
  +                int numKeys = 0;
   
                   while (keys.hasNext()) {
                       Configuration key = (Configuration) keys.next();
  @@ -140,9 +151,12 @@
   
                           queryBuffer.append(key.getAttribute("dbcol"));
                           this.setSelectQuery(conf, key);
  +                        numKeys++;
                       }
                   }
   
  +                int numValues = 0;
  +
                   while (values.hasNext()) {
                       if (firstIteration) {
                           firstIteration = false;
  @@ -151,23 +165,23 @@
                       }
   
                       queryBuffer.append(((Configuration) 
values.next()).getAttribute("dbcol"));
  +                    numValues++;
                   }
   
                   queryBuffer.append(") VALUES (");
   
  -                values = table.getChild("values").getChildren("value");
  -                firstIteration = true;
  +                int numParams = numValues + numKeys;
   
  -                while (values.hasNext()) {
  -                    if (firstIteration) {
  -                        firstIteration = false;
  -                    } else {
  +                for (int i = 0; i < numParams; i++) {
  +                    if (i > 0) {
                           queryBuffer.append(", ");
                       }
   
                       queryBuffer.append("?");
                   }
   
  +                queryBuffer.append(")");
  +
                   query = queryBuffer.toString();
               }
   
  @@ -175,27 +189,6 @@
           }
   
           return query;
  -    }
  -
  -    protected final void setColumn(PreparedStatement statement, int 
position, HttpRequest request, Configuration entry) throws Exception {
  -        super.setColumn(statement, position, request, entry);
  -
  -        if ("key".equals(entry.getName())) {
  -            String mode = entry.getAttribute("mode", "automatic");
  -
  -            if ("manual".equals(mode)) {
  -                String query = this.getSelectQuery(entry);
  -                Connection conn = statement.getConnection();
  -
  -                ResultSet set = conn.createStatement().executeQuery(query);
  -                int value = set.getInt("maxid");
  -
  -                getLogger().info("Reassigning column " + position + "'" + 
entry.getAttribute("dbcol") + "' to: " + value);
  -                statement.setInt(position, value);
  -
  -                set.getStatement().close();
  -            }
  -        }
       }
   
       /**
  
  
  

Reply via email to