001: /**
002: * Objective Database Abstraction Layer (ODAL)
003: * Copyright (c) 2004, The ODAL Development Group
004: * All rights reserved.
005: * For definition of the ODAL Development Group please refer to LICENCE.txt file
006: *
007: * Distributable under LGPL license.
008: * See terms of license at gnu.org.
009: */package com.completex.objective.components.persistency.core.impl.query;
010:
011: import com.completex.objective.components.persistency.AbstractParameters;
012: import com.completex.objective.components.persistency.AbstractPersistentObject;
013: import com.completex.objective.components.persistency.BasicQuery;
014: import com.completex.objective.components.persistency.Call;
015: import com.completex.objective.components.persistency.CallParameter;
016: import com.completex.objective.components.persistency.CallParameters;
017: import com.completex.objective.components.persistency.ColumnType;
018: import com.completex.objective.components.persistency.Parameter;
019: import com.completex.objective.components.persistency.PersistentObjectFactory;
020: import com.completex.objective.components.persistency.ResultableQueryManager;
021: import com.completex.objective.components.persistency.core.DatabasePolicy;
022: import com.completex.objective.components.OdalRuntimeException;
023:
024: import java.util.Map;
025:
026: /**
027: * @author Gennady Krizhevsky
028: */
029: public class CallImpl extends BaseQueryImpl implements Call,
030: ResultableQueryManager {
031:
032: public CallImpl() {
033: setCall();
034: }
035:
036: CallImpl(PersistentObjectFactory singularResultFactory) {
037: setSingularResultFactory(singularResultFactory);
038: setCall();
039: }
040:
041: CallImpl(CallImpl query) {
042: query.copyQueryFieldsTo(this );
043: CallParameters origParameters = query.getParameters();
044: addAllParameters(origParameters);
045: setCall();
046: }
047:
048: public CallImpl(Map map) {
049: fromMap(map);
050: setCall();
051: }
052:
053: private void setCall() {
054: queryDefinition.setCall(true);
055: }
056:
057: public Call setParameters(CallParameters parameters) {
058: return (Call) setParameters0(parameters);
059: }
060:
061: public Call addParameter(CallParameter callParameter) {
062: castParameters().add(callParameter);
063: return this ;
064: }
065:
066: public Call addParameter(ColumnType type, Object value,
067: CallParameter.Mode mode) {
068: castParameters().add(type, value, mode);
069: return this ;
070: }
071:
072: public Call addInParameter(ColumnType type, Object value) {
073: return addParameter(type, value, CallParameter.MODE_IN);
074: }
075:
076: public Call addOutParameter(ColumnType type, Object value) {
077: return addParameter(type, value, CallParameter.MODE_OUT);
078: }
079:
080: public Call addInOutParameter(ColumnType type, Object value) {
081: return addParameter(type, value, CallParameter.MODE_INOUT);
082: }
083:
084: public Call addRefCursorParameter() {
085: return addParameter(CallParameter.PARAMETER_REF_CURSOR);
086: }
087:
088: protected AbstractParameters lazyParameters() {
089: if (parameters == null) {
090: this .parameters = new CallParameters();
091: }
092: return this .parameters;
093: }
094:
095: public Parameter getParameter(int index) {
096: return getParameter0(index);
097: }
098:
099: private CallParameters castParameters() {
100: return ((CallParameters) lazyParameters());
101: }
102:
103: // public ResultableQuery setPageSize(long pageSize) {
104: // return (ResultableQuery) setPageSize0(pageSize);
105: // }
106: //
107: // public ResultableQuery setPage(Page page) {
108: // return (ResultableQuery) setPage0(page);
109: // }
110:
111: //
112: //
113: //
114: public CallParameters getParameters() {
115: return castParameters();
116: }
117:
118: public AbstractParameters getBaseParameters() {
119: return getParameters();
120: }
121:
122: public Object clone() {
123: CallImpl query;
124: try {
125: query = (CallImpl) super .clone();
126: } catch (CloneNotSupportedException e) {
127: throw new OdalRuntimeException("cannot clone call ", e);
128: }
129: query.queryDefinition = (QueryDefinitionImpl) queryDefinition
130: .clone();
131: if (parameters != null) {
132: query.setParameters(new CallParameters(castParameters()));
133: }
134: return query;
135: }
136:
137: public Call compile(DatabasePolicy databasePolicy) {
138: queryDefinition.compileCall(databasePolicy);
139: return this ;
140: }
141:
142: public Call compile() {
143: return compile(getDatabasePolicy());
144: }
145:
146: public int getLimitMax() {
147: return 0;
148: }
149:
150: public String getCallBody() {
151: return queryDefinition.getCallBody();
152: }
153:
154: public void setCallBody(String callBody) {
155: queryDefinition.setCallBody(callBody);
156: }
157:
158: public boolean isFunction() {
159: return queryDefinition.isFunction();
160: }
161:
162: public void setFunction(boolean function) {
163: queryDefinition.setFunction(function);
164: }
165:
166: protected void copyQueryFieldsTo(CallImpl query) {
167: query.queryDefinition = queryDefinition;
168: query.name = name;
169: }
170:
171: public Call addAllParameters(CallParameters parameters) {
172: if (parameters == null) {
173: return this ;
174: }
175: if (this .parameters == null) {
176: this .parameters = new CallParameters();
177: }
178: castParameters().addAll(parameters);
179: return this ;
180: }
181:
182: protected AbstractParameters toParameters(Object[] parameters) {
183: throw new UnsupportedOperationException(
184: "toParameters(Object[] parameters)");
185: }
186:
187: public BasicQuery setParameters(Parameter[] parameters) {
188: if (parameters == null) {
189: return this ;
190: }
191: this .parameters = new CallParameters(parameters);
192: return this ;
193: }
194:
195: public void resetQueryContext() {
196: }
197:
198: public boolean isDisableQueryContext() {
199: return true;
200: }
201:
202: public void setDisableQueryContext(boolean disableQueryContext) {
203: }
204:
205: public boolean isUnion() {
206: return false;
207: }
208:
209: public AbstractPersistentObject resolveThroughQueryContext(
210: AbstractPersistentObject po, QueryContext queryContext) {
211: return po;
212: }
213:
214: }
|