001: /*
002: * Copyright 2004 Clinton Begin
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package com.ibatis.sqlmap.engine.mapping.statement;
017:
018: import com.ibatis.sqlmap.client.SqlMapClient;
019: import com.ibatis.sqlmap.engine.cache.CacheKey;
020: import com.ibatis.sqlmap.engine.execution.SqlExecutor;
021: import com.ibatis.sqlmap.engine.impl.ExtendedSqlMapClient;
022: import com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap;
023: import com.ibatis.sqlmap.engine.mapping.result.ResultMap;
024: import com.ibatis.sqlmap.engine.mapping.sql.Sql;
025: import com.ibatis.sqlmap.engine.scope.RequestScope;
026:
027: import java.util.ArrayList;
028: import java.util.List;
029: import java.util.Arrays;
030:
031: public abstract class BaseStatement implements MappedStatement {
032:
033: private String id;
034: private Integer resultSetType;
035: private Integer fetchSize;
036: private ResultMap resultMap;
037: private ParameterMap parameterMap;
038: private Class parameterClass;
039: private Sql sql;
040: private int baseCacheKey;
041: private ExtendedSqlMapClient sqlMapClient;
042: private Integer timeout;
043: private ResultMap[] additionalResultMaps = new ResultMap[0];
044:
045: private List executeListeners = new ArrayList();
046:
047: private String resource;
048:
049: public String getId() {
050: return id;
051: }
052:
053: public Integer getResultSetType() {
054: return resultSetType;
055: }
056:
057: public void setResultSetType(Integer resultSetType) {
058: this .resultSetType = resultSetType;
059: }
060:
061: public Integer getFetchSize() {
062: return fetchSize;
063: }
064:
065: public void setFetchSize(Integer fetchSize) {
066: this .fetchSize = fetchSize;
067: }
068:
069: public void setId(String id) {
070: this .id = id;
071: }
072:
073: public Sql getSql() {
074: return sql;
075: }
076:
077: public void setSql(Sql sql) {
078: this .sql = sql;
079: }
080:
081: public ResultMap getResultMap() {
082: return resultMap;
083: }
084:
085: public void setResultMap(ResultMap resultMap) {
086: this .resultMap = resultMap;
087: }
088:
089: public ParameterMap getParameterMap() {
090: return parameterMap;
091: }
092:
093: public void setParameterMap(ParameterMap parameterMap) {
094: this .parameterMap = parameterMap;
095: }
096:
097: public Class getParameterClass() {
098: return parameterClass;
099: }
100:
101: public void setParameterClass(Class parameterClass) {
102: this .parameterClass = parameterClass;
103: }
104:
105: public String getResource() {
106: return resource;
107: }
108:
109: public void setResource(String resource) {
110: this .resource = resource;
111: }
112:
113: public CacheKey getCacheKey(RequestScope request,
114: Object parameterObject) {
115: Sql sql = request.getSql();
116: ParameterMap pmap = sql.getParameterMap(request,
117: parameterObject);
118: CacheKey cacheKey = pmap.getCacheKey(request, parameterObject);
119: cacheKey.update(id);
120: cacheKey.update(baseCacheKey);
121: cacheKey.update(sql.getSql(request, parameterObject)); //Fixes bug 953001
122: return cacheKey;
123: }
124:
125: public void setBaseCacheKey(int base) {
126: this .baseCacheKey = base;
127: }
128:
129: public void addExecuteListener(ExecuteListener listener) {
130: executeListeners.add(listener);
131: }
132:
133: public void notifyListeners() {
134: for (int i = 0, n = executeListeners.size(); i < n; i++) {
135: ((ExecuteListener) executeListeners.get(i))
136: .onExecuteStatement(this );
137: }
138: }
139:
140: public SqlExecutor getSqlExecutor() {
141: return sqlMapClient.getSqlExecutor();
142: }
143:
144: public SqlMapClient getSqlMapClient() {
145: return sqlMapClient;
146: }
147:
148: public void setSqlMapClient(SqlMapClient sqlMapClient) {
149: this .sqlMapClient = (ExtendedSqlMapClient) sqlMapClient;
150: }
151:
152: public void initRequest(RequestScope request) {
153: request.setStatement(this );
154: request.setParameterMap(parameterMap);
155: request.setResultMap(resultMap);
156: request.setSql(sql);
157: }
158:
159: public Integer getTimeout() {
160: return timeout;
161: }
162:
163: public void setTimeout(Integer timeout) {
164: this .timeout = timeout;
165: }
166:
167: public void addResultMap(ResultMap resultMap) {
168: List resultMapList = Arrays.asList(additionalResultMaps);
169: resultMapList = new ArrayList(resultMapList);
170: resultMapList.add(resultMap);
171: additionalResultMaps = (ResultMap[]) resultMapList
172: .toArray(new ResultMap[resultMapList.size()]);
173: }
174:
175: public boolean hasMultipleResultMaps() {
176: return additionalResultMaps.length > 0;
177: }
178:
179: public ResultMap[] getAdditionalResultMaps() {
180: return additionalResultMaps;
181: }
182:
183: }
|