1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.ibatis.sqlmap.engine.execution;
17
18 import com.ibatis.sqlmap.engine.config.SqlMapConfiguration;
19 import com.ibatis.sqlmap.engine.impl.SqlMapClientImpl;
20 import com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate;
21 import com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap;
22 import com.ibatis.sqlmap.engine.mapping.parameter.ParameterMapping;
23 import com.ibatis.sqlmap.engine.mapping.result.ResultMap;
24 import com.ibatis.sqlmap.engine.mapping.result.ResultObjectFactoryUtil;
25 import com.ibatis.sqlmap.engine.mapping.statement.DefaultRowHandler;
26 import com.ibatis.sqlmap.engine.mapping.statement.MappedStatement;
27 import com.ibatis.sqlmap.engine.mapping.statement.RowHandlerCallback;
28 import com.ibatis.sqlmap.engine.scope.ErrorContext;
29 import com.ibatis.sqlmap.engine.scope.SessionScope;
30 import com.ibatis.sqlmap.engine.scope.StatementScope;
31
32 import java.sql.BatchUpdateException;
33 import java.sql.CallableStatement;
34 import java.sql.Connection;
35 import java.sql.PreparedStatement;
36 import java.sql.ResultSet;
37 import java.sql.SQLException;
38 import java.sql.Statement;
39 import java.sql.Types;
40 import java.util.ArrayList;
41 import java.util.List;
42 import java.util.Properties;
43
44
45
46
47 public class DefaultSqlExecutor implements SqlExecutor {
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 public int executeUpdate(StatementScope statementScope, Connection conn, String sql, Object[] parameters)
71 throws SQLException {
72 ErrorContext errorContext = statementScope.getErrorContext();
73 errorContext.setActivity("executing update");
74 errorContext.setObjectId(sql);
75 PreparedStatement ps = null;
76 setupResultObjectFactory(statementScope);
77 int rows = 0;
78 try {
79 errorContext.setMoreInfo("Check the SQL Statement (preparation failed).");
80 ps = prepareStatement(statementScope.getSession(), conn, sql);
81 setStatementTimeout(statementScope.getStatement(), ps);
82 errorContext.setMoreInfo("Check the parameters (set parameters failed).");
83 statementScope.getParameterMap().setParameters(statementScope, ps, parameters);
84 errorContext.setMoreInfo("Check the statement (update failed).");
85 ps.execute();
86 rows = ps.getUpdateCount();
87 } finally {
88 closeStatement(statementScope.getSession(), ps);
89 cleanupResultObjectFactory();
90 }
91 return rows;
92 }
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 public void addBatch(StatementScope statementScope, Connection conn, String sql, Object[] parameters)
110 throws SQLException {
111 Batch batch = (Batch) statementScope.getSession().getBatch();
112 if (batch == null) {
113 batch = new Batch();
114 statementScope.getSession().setBatch(batch);
115 }
116 batch.addBatch(statementScope, conn, sql, parameters);
117 }
118
119
120
121
122
123
124
125
126
127
128
129
130 public int executeBatch(SessionScope sessionScope) throws SQLException {
131 int rows = 0;
132 Batch batch = (Batch) sessionScope.getBatch();
133 if (batch != null) {
134 try {
135 rows = batch.executeBatch();
136 } finally {
137 batch.cleanupBatch(sessionScope);
138 }
139 }
140 return rows;
141 }
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157 public List executeBatchDetailed(SessionScope sessionScope) throws SQLException, BatchException {
158 List answer = null;
159 Batch batch = (Batch) sessionScope.getBatch();
160 if (batch != null) {
161 try {
162 answer = batch.executeBatchDetailed();
163 } finally {
164 batch.cleanupBatch(sessionScope);
165 }
166 }
167 return answer;
168 }
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191 public void executeQuery(StatementScope statementScope, Connection conn, String sql, Object[] parameters,
192 int skipResults, int maxResults, RowHandlerCallback callback) throws SQLException {
193 ErrorContext errorContext = statementScope.getErrorContext();
194 errorContext.setActivity("executing query");
195 errorContext.setObjectId(sql);
196 PreparedStatement ps = null;
197 ResultSet rs = null;
198 setupResultObjectFactory(statementScope);
199 try {
200 errorContext.setMoreInfo("Check the SQL Statement (preparation failed).");
201 Integer rsType = statementScope.getStatement().getResultSetType();
202 if (rsType != null) {
203 ps = prepareStatement(statementScope.getSession(), conn, sql, rsType);
204 } else {
205 ps = prepareStatement(statementScope.getSession(), conn, sql);
206 }
207 setStatementTimeout(statementScope.getStatement(), ps);
208 Integer fetchSize = statementScope.getStatement().getFetchSize();
209 if (fetchSize != null) {
210 ps.setFetchSize(fetchSize.intValue());
211 }
212 errorContext.setMoreInfo("Check the parameters (set parameters failed).");
213 statementScope.getParameterMap().setParameters(statementScope, ps, parameters);
214 errorContext.setMoreInfo("Check the statement (query failed).");
215 ps.execute();
216 errorContext.setMoreInfo("Check the results (failed to retrieve results).");
217
218
219 rs = handleMultipleResults(ps, statementScope, skipResults, maxResults, callback);
220
221 } finally {
222 try {
223 closeResultSet(rs);
224 } finally {
225 closeStatement(statementScope.getSession(), ps);
226 cleanupResultObjectFactory();
227 }
228 }
229
230 }
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249 public int executeUpdateProcedure(StatementScope statementScope, Connection conn, String sql, Object[] parameters)
250 throws SQLException {
251 ErrorContext errorContext = statementScope.getErrorContext();
252 errorContext.setActivity("executing update procedure");
253 errorContext.setObjectId(sql);
254 CallableStatement cs = null;
255 setupResultObjectFactory(statementScope);
256 int rows = 0;
257 try {
258 errorContext.setMoreInfo("Check the SQL Statement (preparation failed).");
259 cs = prepareCall(statementScope.getSession(), conn, sql);
260 setStatementTimeout(statementScope.getStatement(), cs);
261 ParameterMap parameterMap = statementScope.getParameterMap();
262 ParameterMapping[] mappings = parameterMap.getParameterMappings();
263 errorContext.setMoreInfo("Check the output parameters (register output parameters failed).");
264 registerOutputParameters(cs, mappings);
265 errorContext.setMoreInfo("Check the parameters (set parameters failed).");
266 parameterMap.setParameters(statementScope, cs, parameters);
267 errorContext.setMoreInfo("Check the statement (update procedure failed).");
268 cs.execute();
269 rows = cs.getUpdateCount();
270 errorContext.setMoreInfo("Check the output parameters (retrieval of output parameters failed).");
271 retrieveOutputParameters(statementScope, cs, mappings, parameters, null);
272 } finally {
273 closeStatement(statementScope.getSession(), cs);
274 cleanupResultObjectFactory();
275 }
276 return rows;
277 }
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300 public void executeQueryProcedure(StatementScope statementScope, Connection conn, String sql, Object[] parameters,
301 int skipResults, int maxResults, RowHandlerCallback callback) throws SQLException {
302 ErrorContext errorContext = statementScope.getErrorContext();
303 errorContext.setActivity("executing query procedure");
304 errorContext.setObjectId(sql);
305 CallableStatement cs = null;
306 ResultSet rs = null;
307 setupResultObjectFactory(statementScope);
308 try {
309 errorContext.setMoreInfo("Check the SQL Statement (preparation failed).");
310 Integer rsType = statementScope.getStatement().getResultSetType();
311 if (rsType != null) {
312 cs = prepareCall(statementScope.getSession(), conn, sql, rsType);
313 } else {
314 cs = prepareCall(statementScope.getSession(), conn, sql);
315 }
316 setStatementTimeout(statementScope.getStatement(), cs);
317 Integer fetchSize = statementScope.getStatement().getFetchSize();
318 if (fetchSize != null) {
319 cs.setFetchSize(fetchSize.intValue());
320 }
321 ParameterMap parameterMap = statementScope.getParameterMap();
322 ParameterMapping[] mappings = parameterMap.getParameterMappings();
323 errorContext.setMoreInfo("Check the output parameters (register output parameters failed).");
324 registerOutputParameters(cs, mappings);
325 errorContext.setMoreInfo("Check the parameters (set parameters failed).");
326 parameterMap.setParameters(statementScope, cs, parameters);
327 errorContext.setMoreInfo("Check the statement (update procedure failed).");
328 cs.execute();
329 errorContext.setMoreInfo("Check the results (failed to retrieve results).");
330
331
332 rs = handleMultipleResults(cs, statementScope, skipResults, maxResults, callback);
333
334 errorContext.setMoreInfo("Check the output parameters (retrieval of output parameters failed).");
335 retrieveOutputParameters(statementScope, cs, mappings, parameters, callback);
336
337 } finally {
338 try {
339 closeResultSet(rs);
340 } finally {
341 closeStatement(statementScope.getSession(), cs);
342 cleanupResultObjectFactory();
343 }
344 }
345 }
346
347 public void init(SqlMapConfiguration config, Properties globalProps) {
348
349 }
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370 private ResultSet handleMultipleResults(PreparedStatement ps, StatementScope statementScope, int skipResults,
371 int maxResults, RowHandlerCallback callback) throws SQLException {
372 ResultSet rs;
373 rs = getFirstResultSet(statementScope, ps);
374 if (rs != null) {
375 handleResults(statementScope, rs, skipResults, maxResults, callback);
376 }
377
378
379 if (callback.getRowHandler() instanceof DefaultRowHandler) {
380 MappedStatement statement = statementScope.getStatement();
381 DefaultRowHandler defaultRowHandler = ((DefaultRowHandler) callback.getRowHandler());
382 if (statement.hasMultipleResultMaps()) {
383 List multipleResults = new ArrayList();
384 multipleResults.add(defaultRowHandler.getList());
385 ResultMap[] resultMaps = statement.getAdditionalResultMaps();
386 int i = 0;
387 while (moveToNextResultsSafely(statementScope, ps)) {
388 if (i >= resultMaps.length)
389 break;
390 ResultMap rm = resultMaps[i];
391 statementScope.setResultMap(rm);
392 rs = ps.getResultSet();
393 DefaultRowHandler rh = new DefaultRowHandler();
394 handleResults(statementScope, rs, skipResults, maxResults, new RowHandlerCallback(rm, null, rh));
395 multipleResults.add(rh.getList());
396 i++;
397 }
398 defaultRowHandler.setList(multipleResults);
399 statementScope.setResultMap(statement.getResultMap());
400 } else {
401 while (moveToNextResultsSafely(statementScope, ps))
402 ;
403 }
404 }
405
406 return rs;
407 }
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422 private ResultSet getFirstResultSet(StatementScope scope, Statement stmt) throws SQLException {
423 ResultSet rs = null;
424 boolean hasMoreResults = true;
425 while (hasMoreResults) {
426 rs = stmt.getResultSet();
427 if (rs != null) {
428 break;
429 }
430 hasMoreResults = moveToNextResultsIfPresent(scope, stmt);
431 }
432 return rs;
433 }
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448 private boolean moveToNextResultsIfPresent(StatementScope scope, Statement stmt) throws SQLException {
449 boolean moreResults;
450
451 boolean movedToNextResultsSafely = moveToNextResultsSafely(scope, stmt);
452 int updateCount = stmt.getUpdateCount();
453
454 moreResults = !(!movedToNextResultsSafely && (updateCount == -1));
455
456
457 if (moreResults == true) {
458 moreResults = !(!movedToNextResultsSafely && !isMultipleResultSetSupportPresent(scope, stmt));
459 }
460
461 return moreResults;
462 }
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477 private boolean moveToNextResultsSafely(StatementScope scope, Statement stmt) throws SQLException {
478 if (isMultipleResultSetSupportPresent(scope, stmt)) {
479 return stmt.getMoreResults();
480 }
481 return false;
482 }
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498 private boolean isMultipleResultSetSupportPresent(StatementScope scope, Statement stmt) throws SQLException {
499 return forceMultipleResultSetSupport(scope) || stmt.getConnection().getMetaData().supportsMultipleResultSets();
500 }
501
502
503
504
505
506
507
508
509
510 private boolean forceMultipleResultSetSupport(StatementScope scope) {
511 return ((SqlMapClientImpl) scope.getSession().getSqlMapClient()).getDelegate().isForceMultipleResultSetSupport();
512 }
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531 private void handleResults(StatementScope statementScope, ResultSet rs, int skipResults, int maxResults,
532 RowHandlerCallback callback) throws SQLException {
533 try {
534 statementScope.setResultSet(rs);
535 ResultMap resultMap = statementScope.getResultMap();
536 if (resultMap != null) {
537
538 if (rs.getType() != ResultSet.TYPE_FORWARD_ONLY) {
539 if (skipResults > 0) {
540 rs.absolute(skipResults);
541 }
542 } else {
543 for (int i = 0; i < skipResults; i++) {
544 if (!rs.next()) {
545 return;
546 }
547 }
548 }
549
550
551 int resultsFetched = 0;
552 while ((maxResults == NO_MAXIMUM_RESULTS || resultsFetched < maxResults) && rs.next()) {
553 Object[] columnValues = resultMap.resolveSubMap(statementScope, rs).getResults(statementScope, rs);
554 callback.handleResultObject(statementScope, columnValues, rs);
555 resultsFetched++;
556 }
557 }
558 } finally {
559 statementScope.setResultSet(null);
560 }
561 }
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580 private void retrieveOutputParameters(StatementScope statementScope, CallableStatement cs,
581 ParameterMapping[] mappings, Object[] parameters, RowHandlerCallback callback) throws SQLException {
582 for (int i = 0; i < mappings.length; i++) {
583 ParameterMapping mapping = ((ParameterMapping) mappings[i]);
584 if (mapping.isOutputAllowed()) {
585 if ("java.sql.ResultSet".equalsIgnoreCase(mapping.getJavaTypeName())) {
586 ResultSet rs = (ResultSet) cs.getObject(i + 1);
587 ResultMap resultMap;
588 if (mapping.getResultMapName() == null) {
589 resultMap = statementScope.getResultMap();
590 handleOutputParameterResults(statementScope, resultMap, rs, callback);
591 } else {
592 SqlMapClientImpl client = (SqlMapClientImpl) statementScope.getSession().getSqlMapClient();
593 resultMap = client.getDelegate().getResultMap(mapping.getResultMapName());
594 DefaultRowHandler rowHandler = new DefaultRowHandler();
595 RowHandlerCallback handlerCallback = new RowHandlerCallback(resultMap, null, rowHandler);
596 handleOutputParameterResults(statementScope, resultMap, rs, handlerCallback);
597 parameters[i] = rowHandler.getList();
598 }
599 rs.close();
600 } else {
601 parameters[i] = mapping.getTypeHandler().getResult(cs, i + 1);
602 }
603 }
604 }
605 }
606
607
608
609
610
611
612
613
614
615
616
617
618 private void registerOutputParameters(CallableStatement cs, ParameterMapping[] mappings) throws SQLException {
619 for (int i = 0; i < mappings.length; i++) {
620 ParameterMapping mapping = ((ParameterMapping) mappings[i]);
621 if (mapping.isOutputAllowed()) {
622 if (null != mapping.getTypeName() && !mapping.getTypeName().equals("")) {
623 cs.registerOutParameter(i + 1, mapping.getJdbcType(), mapping.getTypeName());
624 } else {
625 if (mapping.getNumericScale() != null
626 && (mapping.getJdbcType() == Types.NUMERIC || mapping.getJdbcType() == Types.DECIMAL)) {
627 cs.registerOutParameter(i + 1, mapping.getJdbcType(), mapping.getNumericScale().intValue());
628 } else {
629 cs.registerOutParameter(i + 1, mapping.getJdbcType());
630 }
631 }
632 }
633 }
634 }
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651 private void handleOutputParameterResults(StatementScope statementScope, ResultMap resultMap, ResultSet rs,
652 RowHandlerCallback callback) throws SQLException {
653 ResultMap orig = statementScope.getResultMap();
654 try {
655 statementScope.setResultSet(rs);
656 if (resultMap != null) {
657 statementScope.setResultMap(resultMap);
658
659
660 while (rs.next()) {
661 Object[] columnValues = resultMap.resolveSubMap(statementScope, rs).getResults(statementScope, rs);
662 callback.handleResultObject(statementScope, columnValues, rs);
663 }
664 }
665 } finally {
666 statementScope.setResultSet(null);
667 statementScope.setResultMap(orig);
668 }
669 }
670
671
672
673
674
675
676
677 public void cleanup(SessionScope sessionScope) {
678 Batch batch = (Batch) sessionScope.getBatch();
679 if (batch != null) {
680 batch.cleanupBatch(sessionScope);
681 sessionScope.setBatch(null);
682 }
683 }
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702 private PreparedStatement prepareStatement(SessionScope sessionScope, Connection conn, String sql, Integer rsType)
703 throws SQLException {
704 SqlMapExecutorDelegate delegate = ((SqlMapClientImpl) sessionScope.getSqlMapExecutor()).getDelegate();
705 if (sessionScope.hasPreparedStatementFor(sql)) {
706 return sessionScope.getPreparedStatement((sql));
707 } else {
708 PreparedStatement ps = conn.prepareStatement(sql, rsType.intValue(), ResultSet.CONCUR_READ_ONLY);
709 sessionScope.putPreparedStatement(delegate, sql, ps);
710 return ps;
711 }
712 }
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731 private CallableStatement prepareCall(SessionScope sessionScope, Connection conn, String sql, Integer rsType)
732 throws SQLException {
733 SqlMapExecutorDelegate delegate = ((SqlMapClientImpl) sessionScope.getSqlMapExecutor()).getDelegate();
734 if (sessionScope.hasPreparedStatementFor(sql)) {
735 return (CallableStatement) sessionScope.getPreparedStatement((sql));
736 } else {
737 CallableStatement cs = conn.prepareCall(sql, rsType.intValue(), ResultSet.CONCUR_READ_ONLY);
738 sessionScope.putPreparedStatement(delegate, sql, cs);
739 return cs;
740 }
741 }
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758 private static PreparedStatement prepareStatement(SessionScope sessionScope, Connection conn, String sql)
759 throws SQLException {
760 SqlMapExecutorDelegate delegate = ((SqlMapClientImpl) sessionScope.getSqlMapExecutor()).getDelegate();
761 if (sessionScope.hasPreparedStatementFor(sql)) {
762 return sessionScope.getPreparedStatement((sql));
763 } else {
764 PreparedStatement ps = conn.prepareStatement(sql);
765 sessionScope.putPreparedStatement(delegate, sql, ps);
766 return ps;
767 }
768 }
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785 private CallableStatement prepareCall(SessionScope sessionScope, Connection conn, String sql) throws SQLException {
786 SqlMapExecutorDelegate delegate = ((SqlMapClientImpl) sessionScope.getSqlMapExecutor()).getDelegate();
787 if (sessionScope.hasPreparedStatementFor(sql)) {
788 return (CallableStatement) sessionScope.getPreparedStatement((sql));
789 } else {
790 CallableStatement cs = conn.prepareCall(sql);
791 sessionScope.putPreparedStatement(delegate, sql, cs);
792 return cs;
793 }
794 }
795
796
797
798
799
800
801
802
803
804 private static void closeStatement(SessionScope sessionScope, PreparedStatement ps) {
805 if (ps != null) {
806 if (!sessionScope.hasPreparedStatement(ps)) {
807 try {
808 ps.close();
809 } catch (SQLException e) {
810
811 }
812 }
813 }
814 }
815
816
817
818
819
820
821
822 private static void closeResultSet(ResultSet rs) {
823 if (rs != null) {
824 try {
825 rs.close();
826 } catch (SQLException e) {
827
828 }
829 }
830 }
831
832
833
834
835
836
837
838
839
840
841
842
843 private static void setStatementTimeout(MappedStatement mappedStatement, Statement statement) throws SQLException {
844 if (mappedStatement.getTimeout() != null) {
845 statement.setQueryTimeout(mappedStatement.getTimeout().intValue());
846 }
847 }
848
849
850
851
852
853
854
855
856 private static class Batch {
857
858
859 private String currentSql;
860
861
862 private List statementList = new ArrayList();
863
864
865 private List batchResultList = new ArrayList();
866
867
868 private int size;
869
870
871
872
873 public Batch() {
874 this.size = 0;
875 }
876
877
878
879
880
881
882 public int getSize() {
883 return size;
884 }
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901 public void addBatch(StatementScope statementScope, Connection conn, String sql, Object[] parameters)
902 throws SQLException {
903 PreparedStatement ps = null;
904 if (currentSql != null && currentSql.equals(sql)) {
905 int last = statementList.size() - 1;
906 ps = (PreparedStatement) statementList.get(last);
907 } else {
908 ps = prepareStatement(statementScope.getSession(), conn, sql);
909 setStatementTimeout(statementScope.getStatement(), ps);
910 currentSql = sql;
911 statementList.add(ps);
912 batchResultList.add(new BatchResult(statementScope.getStatement().getId(), sql));
913 }
914 statementScope.getParameterMap().setParameters(statementScope, ps, parameters);
915 ps.addBatch();
916 size++;
917 }
918
919
920
921
922
923
924
925
926
927
928
929
930 public int executeBatch() throws SQLException {
931 int totalRowCount = 0;
932 for (int i = 0, n = statementList.size(); i < n; i++) {
933 PreparedStatement ps = (PreparedStatement) statementList.get(i);
934 int[] rowCounts = ps.executeBatch();
935 for (int j = 0; j < rowCounts.length; j++) {
936 if (rowCounts[j] == Statement.SUCCESS_NO_INFO) {
937
938 } else if (rowCounts[j] == Statement.EXECUTE_FAILED) {
939 throw new SQLException("The batched statement at index " + j + " failed to execute.");
940 } else {
941 totalRowCount += rowCounts[j];
942 }
943 }
944 }
945 return totalRowCount;
946 }
947
948
949
950
951
952
953
954
955
956
957
958 public List executeBatchDetailed() throws SQLException, BatchException {
959 List answer = new ArrayList();
960 for (int i = 0, n = statementList.size(); i < n; i++) {
961 BatchResult br = (BatchResult) batchResultList.get(i);
962 PreparedStatement ps = (PreparedStatement) statementList.get(i);
963 try {
964 br.setUpdateCounts(ps.executeBatch());
965 } catch (BatchUpdateException e) {
966 StringBuilder message = new StringBuilder();
967 message.append("Sub batch number ");
968 message.append(i + 1);
969 message.append(" failed.");
970 if (i > 0) {
971 message.append(" ");
972 message.append(i);
973 message.append(" prior sub batch(s) completed successfully, but will be rolled back.");
974 }
975 throw new BatchException(message.toString(), e, answer, br.getStatementId(), br.getSql());
976 }
977 answer.add(br);
978 }
979 return answer;
980 }
981
982
983
984
985
986
987
988 public void cleanupBatch(SessionScope sessionScope) {
989 for (int i = 0, n = statementList.size(); i < n; i++) {
990 PreparedStatement ps = (PreparedStatement) statementList.get(i);
991 closeStatement(sessionScope, ps);
992 }
993 currentSql = null;
994 statementList.clear();
995 batchResultList.clear();
996 size = 0;
997 }
998 }
999
1000
1001
1002
1003
1004
1005
1006 private void setupResultObjectFactory(StatementScope statementScope) {
1007 SqlMapClientImpl client = (SqlMapClientImpl) statementScope.getSession().getSqlMapClient();
1008 ResultObjectFactoryUtil.setupResultObjectFactory(client.getResultObjectFactory(),
1009 statementScope.getStatement().getId());
1010 }
1011
1012
1013
1014
1015 private void cleanupResultObjectFactory() {
1016 ResultObjectFactoryUtil.cleanupResultObjectFactory();
1017 }
1018 }