Author: bgoodin
Date: Mon Jul  4 11:45:06 2005
New Revision: 209106

URL: http://svn.apache.org/viewcvs?rev=209106&view=rev
Log:
IBATIS-148 Fixed inversion of parameter assignment. Moved iterate index replace 
into the Sql Text processing instead of the doEndFragment on the 
IterateTagHandler and ConditionalTagHandler. Removed replace funcitons from 
BaseTagHandler and moved them into the DynamicSql class. Added 
postParseRequired property to the SqlText class for checking in DynamicSql 
class and prompting postParse on sqlText. 

Modified:
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/SqlText.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/DynamicSql.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/BaseTagHandler.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java
    
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/IterateTagHandler.java

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java?rev=209106&r1=209105&r2=209106&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java
 Mon Jul  4 11:45:06 2005
@@ -201,11 +201,14 @@
         data = NodeletUtils.parsePropertyTokens(data, vars.properties);
 
         SqlText sqlText;
+
         if (postParseRequired) {
           sqlText = new SqlText();
+          sqlText.setPostParseRequired(postParseRequired);
           sqlText.setText(data.toString());
         } else {
           sqlText = 
PARAM_PARSER.parseInlineParameterMap(vars.client.getDelegate().getTypeHandlerFactory(),
 data.toString(), null);
+          sqlText.setPostParseRequired(postParseRequired);
         }
 
         dynamic.addChild(sqlText);
@@ -248,6 +251,7 @@
           tag.setConjunctionAttr(attributes.getProperty("conjunction"));
           
           // an iterate ancestor requires a post parse
+
           if(dynamic instanceof SqlTag) {
             SqlTag parentSqlTag = (SqlTag)dynamic;
             if(parentSqlTag.isPostParseRequired() ||
@@ -259,7 +263,7 @@
                 tag.setPostParseRequired(true);
               }
           }
-          
+
           dynamic.addChild(tag);
           
           if (child.hasChildNodes()) {

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/SqlText.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/SqlText.java?rev=209106&r1=209105&r2=209106&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/SqlText.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/SqlText.java
 Mon Jul  4 11:45:06 2005
@@ -21,6 +21,7 @@
 
   private String text;
   private boolean isWhiteSpace;
+  private boolean postParseRequired;
 
   private ParameterMapping[] parameterMappings;
 
@@ -45,5 +46,13 @@
     this.parameterMappings = parameterMappings;
   }
 
+  public boolean isPostParseRequired() {
+    return postParseRequired;
+  }
+
+  public void setPostParseRequired(boolean postParseRequired) {
+    this.postParseRequired = postParseRequired;
+  }
+  
 }
 

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/DynamicSql.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/DynamicSql.java?rev=209106&r1=209105&r2=209106&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/DynamicSql.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/DynamicSql.java
 Mon Jul  4 11:45:06 2005
@@ -107,7 +107,8 @@
         String sqlStatement = sqlText.getText();
         if (sqlText.isWhiteSpace()) {
           out.print(sqlStatement);
-        } else {
+        } else if (!sqlText.isPostParseRequired()) {
+
           // BODY OUT
           out.print(sqlStatement);
 
@@ -117,6 +118,33 @@
               ctx.addParameterMapping(mappings[i]);
             }
           }
+        } else {
+
+          IterateContext itCtx = ctx.peekIterateContext();
+
+          if(null != itCtx && itCtx.isAllowNext()){
+            itCtx.next();
+            itCtx.setAllowNext(false);
+            if(!itCtx.hasNext()) {
+              itCtx.setFinal(true);
+            }
+          }
+
+          if(itCtx!=null) {
+            StringBuffer sqlStatementBuffer = new StringBuffer(sqlStatement);
+            iteratePropertyReplace(sqlStatementBuffer, itCtx);
+            sqlStatement = sqlStatementBuffer.toString();
+          }
+
+          sqlText = 
PARAM_PARSER.parseInlineParameterMap(delegate.getTypeHandlerFactory(), 
sqlStatement);
+
+          ParameterMapping[] mappings = sqlText.getParameterMappings();
+          out.print(sqlText.getText());
+          if (mappings != null) {
+             for (int i = 0, n = mappings.length; i < n; i++) {
+               ctx.addParameterMapping(mappings[i]);
+             }
+          }
         }
       } else if (child instanceof SqlTag) {
         SqlTag tag = (SqlTag) child;
@@ -139,7 +167,7 @@
             if (response != SqlTagHandler.SKIP_BODY) {
               if (body.length() > 0) {
                 // BODY OUT
-
+                /*
                 if (tag.isPostParseRequired()) {
                   SqlText sqlText = 
PARAM_PARSER.parseInlineParameterMap(delegate.getTypeHandlerFactory(), 
body.toString());
                   out.print(sqlText.getText());
@@ -149,25 +177,48 @@
                       ctx.addParameterMapping(mappings[i]);
                     }
                   }
+
                 } else {
+                */
                   out.print(body.toString());
-                }
+                //}
+
               }
             }
-            
+
           }
         } while (response == SqlTagHandler.REPEAT_BODY);
-        
+
         ctx.popRemoveFirstPrependMarker(tag);
-        
+
         if(ctx.peekIterateContext()!= null && 
ctx.peekIterateContext().getTag() == tag) {
           ctx.popIterateContext();
         }
-        
+
       }
     }
   }
 
+  /**
+  * @param bodyContent
+  * @param iterate
+  */
+  protected void iteratePropertyReplace(StringBuffer bodyContent, 
IterateContext iterate) {
+    if(iterate!=null) {
+      String find = iterate.getProperty() + "[]";
+      String replace = iterate.getProperty() + "[" + iterate.getIndex() + "]";
+      replace(bodyContent, find, replace);
+    }
+  }
+
+  protected static void replace(StringBuffer buffer, String find, String 
replace) {
+    int pos = buffer.toString().indexOf(find);
+    int len = find.length();
+    while (pos > -1) {
+      buffer.replace(pos, pos + len, replace);
+      pos = buffer.toString().indexOf(find);
+    }
+  }
   public void addChild(SqlChild child) {
     children.add(child);
   }

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/BaseTagHandler.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/BaseTagHandler.java?rev=209106&r1=209105&r2=209106&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/BaseTagHandler.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/BaseTagHandler.java
 Mon Jul  4 11:45:06 2005
@@ -50,25 +50,4 @@
     }
 
   }
-
-  protected static void replace(StringBuffer buffer, String find, String 
replace) {
-    int pos = buffer.toString().indexOf(find);
-    int len = find.length();
-    while (pos > -1) {
-      buffer.replace(pos, pos + len, replace);
-      pos = buffer.toString().indexOf(find);
-    }
-  }
-
-  /**
-   * @param bodyContent
-   * @param iterate
-   */
-  protected void iteratePropertyReplace(StringBuffer bodyContent, 
IterateContext iterate) {
-    if(iterate!=null) {
-      String find = iterate.getProperty() + "[]";
-      String replace = iterate.getProperty() + "[" + iterate.getIndex() + "]";
-      replace(bodyContent, find, replace);
-    }
-  }
 }

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java?rev=209106&r1=209105&r2=209106&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java
 Mon Jul  4 11:45:06 2005
@@ -59,7 +59,7 @@
       }
     }
     
-    iteratePropertyReplace(bodyContent,ctx.peekIterateContext());
+    //iteratePropertyReplace(bodyContent,ctx.peekIterateContext());
     
     return super.doEndFragment(ctx,tag,parameterObject,bodyContent);
   }

Modified: 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/IterateTagHandler.java
URL: 
http://svn.apache.org/viewcvs/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/IterateTagHandler.java?rev=209106&r1=209105&r2=209106&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/IterateTagHandler.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/IterateTagHandler.java
 Mon Jul  4 11:45:06 2005
@@ -58,7 +58,7 @@
         iterate.next();
       }
 
-      iteratePropertyReplace(bodyContent, iterate);
+      //iteratePropertyReplace(bodyContent, iterate);
 
       if (iterate.isFirst()) {
         String open = tag.getOpenAttr();


Reply via email to