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();