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, state.getGlobalProps());
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) {
tag.setPostParseRequired(true);