@@ -82,14 +82,9 @@ public void parseStatementNode() {
82
82
XMLIncludeTransformer includeParser = new XMLIncludeTransformer (configuration , builderAssistant );
83
83
includeParser .applyIncludes (context .getNode ());
84
84
85
- // Parse selectKey after includes,
86
- // in case if IncompleteElementException (issue #291)
87
- List <XNode > selectKeyNodes = context .evalNodes ("selectKey" );
88
- if (configuration .getDatabaseId () != null ) {
89
- parseSelectKeyNodes (id , selectKeyNodes , parameterTypeClass , langDriver , configuration .getDatabaseId ());
90
- }
91
- parseSelectKeyNodes (id , selectKeyNodes , parameterTypeClass , langDriver , null );
92
-
85
+ // Parse selectKey after includes and remove them.
86
+ processSelectKeyNodes (id , parameterTypeClass , langDriver );
87
+
93
88
// Parse the SQL (pre: <selectKey> and <include> were parsed and removed)
94
89
SqlSource sqlSource = langDriver .createSqlSource (configuration , context , parameterTypeClass );
95
90
String resultSets = context .getStringAttribute ("resultSets" );
@@ -111,8 +106,17 @@ public void parseStatementNode() {
111
106
resultSetTypeEnum , flushCache , useCache , resultOrdered ,
112
107
keyGenerator , keyProperty , keyColumn , databaseId , langDriver , resultSets );
113
108
}
114
-
115
- public void parseSelectKeyNodes (String parentId , List <XNode > list , Class <?> parameterTypeClass , LanguageDriver langDriver , String skRequiredDatabaseId ) {
109
+
110
+ private void processSelectKeyNodes (String id , Class <?> parameterTypeClass , LanguageDriver langDriver ) {
111
+ List <XNode > selectKeyNodes = context .evalNodes ("selectKey" );
112
+ if (configuration .getDatabaseId () != null ) {
113
+ parseSelectKeyNodes (id , selectKeyNodes , parameterTypeClass , langDriver , configuration .getDatabaseId ());
114
+ }
115
+ parseSelectKeyNodes (id , selectKeyNodes , parameterTypeClass , langDriver , null );
116
+ removeSelectKeyNodes (selectKeyNodes );
117
+ }
118
+
119
+ private void parseSelectKeyNodes (String parentId , List <XNode > list , Class <?> parameterTypeClass , LanguageDriver langDriver , String skRequiredDatabaseId ) {
116
120
for (XNode nodeToHandle : list ) {
117
121
String id = parentId + SelectKeyGenerator .SELECT_KEY_SUFFIX ;
118
122
String databaseId = nodeToHandle .getStringAttribute ("databaseId" );
@@ -122,7 +126,7 @@ public void parseSelectKeyNodes(String parentId, List<XNode> list, Class<?> para
122
126
}
123
127
}
124
128
125
- public void parseSelectKeyNode (String id , XNode nodeToHandle , Class <?> parameterTypeClass , LanguageDriver langDriver , String databaseId ) {
129
+ private void parseSelectKeyNode (String id , XNode nodeToHandle , Class <?> parameterTypeClass , LanguageDriver langDriver , String databaseId ) {
126
130
String resultType = nodeToHandle .getStringAttribute ("resultType" );
127
131
Class <?> resultTypeClass = resolveClass (resultType );
128
132
StatementType statementType = StatementType .valueOf (nodeToHandle .getStringAttribute ("statementType" , StatementType .PREPARED .toString ()));
@@ -152,7 +156,12 @@ public void parseSelectKeyNode(String id, XNode nodeToHandle, Class<?> parameter
152
156
153
157
MappedStatement keyStatement = configuration .getMappedStatement (id , false );
154
158
configuration .addKeyGenerator (id , new SelectKeyGenerator (keyStatement , executeBefore ));
155
- nodeToHandle .getParent ().getNode ().removeChild (nodeToHandle .getNode ());
159
+ }
160
+
161
+ private void removeSelectKeyNodes (List <XNode > selectKeyNodes ) {
162
+ for (XNode nodeToHandle : selectKeyNodes ) {
163
+ nodeToHandle .getParent ().getNode ().removeChild (nodeToHandle .getNode ());
164
+ }
156
165
}
157
166
158
167
private boolean databaseIdMatchesCurrent (String id , String databaseId , String requiredDatabaseId ) {
0 commit comments