SqlTagHandler handler = SqlTagHandlerFactory.getSqlTagHandler(nodeName);
if (handler != null) {
isDynamic = true;
SqlTag tag = new SqlTag();
tag.setName(nodeName);
tag.setHandler(handler);
Properties attributes = NodeletUtils.parseAttributes(child, vars.properties);
tag.setPrependAttr(attributes.getProperty("prepend"));
tag.setPropertyAttr(attributes.getProperty("property"));
tag.setRemoveFirstPrepend(attributes.getProperty("removeFirstPrepend"));
tag.setOpenAttr(attributes.getProperty("open"));
tag.setCloseAttr(attributes.getProperty("close"));
tag.setComparePropertyAttr(attributes.getProperty("compareProperty"));
tag.setCompareValueAttr(attributes.getProperty("compareValue"));
tag.setConjunctionAttr(attributes.getProperty("conjunction"));
// an iterate ancestor requires a post parse
if(dynamic instanceof SqlTag) {
SqlTag parentSqlTag = (SqlTag)dynamic;
if(parentSqlTag.isPostParseRequired() ||
tag.getHandler() instanceof IterateTagHandler) {
tag.setPostParseRequired(true);
}
} else if (dynamic instanceof DynamicSql) {
if(tag.getHandler() instanceof IterateTagHandler) {