1 21 package oracle.toplink.essentials.internal.queryframework; 23 24 import java.util.*; 25 import oracle.toplink.essentials.internal.helper.*; 26 import oracle.toplink.essentials.internal.databaseaccess.*; 27 import oracle.toplink.essentials.internal.expressions.*; 28 import oracle.toplink.essentials.exceptions.*; 29 import oracle.toplink.essentials.queryframework.*; 30 import oracle.toplink.essentials.internal.sessions.AbstractSession; 31 32 42 public class CallQueryMechanism extends DatasourceCallQueryMechanism { 43 44 48 public CallQueryMechanism(DatabaseQuery query) { 49 super(query); 50 } 51 52 57 public CallQueryMechanism(DatabaseQuery query, DatabaseCall call) { 58 super(query, call); 59 call.setIsFieldMatchingRequired(true); 60 } 61 62 65 public DatabaseCall getDatabaseCall() { 66 return (DatabaseCall)call; 67 } 68 69 76 public void prepareCall() throws QueryException { 77 DatabaseQuery query = getQuery(); 78 AbstractSession executionSession = getSession().getExecutionSession(query); 79 if (hasMultipleCalls()) { 80 for (Enumeration callsEnum = getCalls().elements(); callsEnum.hasMoreElements();) { 81 DatabaseCall call = (DatabaseCall)callsEnum.nextElement(); 82 if (!query.shouldIgnoreBindAllParameters()) { 83 call.setUsesBinding(query.shouldBindAllParameters()); 84 } 85 if (!query.shouldIgnoreCacheStatement()) { 86 call.setShouldCacheStatement(query.shouldCacheStatement()); 87 } 88 if (query.isReadQuery()) { 89 ReadQuery readQuery = (ReadQuery)query; 90 call.setMaxRows(readQuery.getMaxRows()); 91 if (readQuery.getFirstResult() != 0) { 92 call.setFirstResult(readQuery.getFirstResult()); 93 call.setIsResultSetScrollable(true); 94 call.setResultSetType(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE); 95 call.setResultSetConcurrency(java.sql.ResultSet.CONCUR_READ_ONLY); 96 } 97 } 98 call.prepare(executionSession); 99 } 100 } else if (getCall() != null) { 101 DatabaseCall call = getDatabaseCall(); 102 if (!query.shouldIgnoreBindAllParameters()) { 103 call.setUsesBinding(query.shouldBindAllParameters()); 104 } 105 if (!query.shouldIgnoreCacheStatement()) { 106 call.setShouldCacheStatement(query.shouldCacheStatement()); 107 } 108 if (query.isReadQuery()) { 109 ReadQuery readQuery = (ReadQuery)query; 110 call.setMaxRows(readQuery.getMaxRows()); 111 if (readQuery.getFirstResult() != 0) { 112 call.setFirstResult(readQuery.getFirstResult()); 113 call.setIsResultSetScrollable(true); 114 call.setResultSetType(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE); 115 call.setResultSetConcurrency(java.sql.ResultSet.CONCUR_READ_ONLY); 116 } 117 } 118 call.prepare(executionSession); 119 } 120 } 121 122 125 public void prepareDeleteAll() { 126 if (hasMultipleCalls()) { 127 for (Enumeration callsEnum = getCalls().elements(); callsEnum.hasMoreElements();) { 128 DatabaseCall call = (DatabaseCall)callsEnum.nextElement(); 129 call.returnNothing(); 130 if (getQuery().getDescriptor().usesOptimisticLocking()) { 131 call.setHasOptimisticLock(true); 132 } 133 } 134 } else { 135 getCall().returnNothing(); 136 if (getQuery().getDescriptor().usesOptimisticLocking()) { 137 getDatabaseCall().setHasOptimisticLock(true); 138 } 139 } 140 141 prepareCall(); 142 } 143 144 147 public void prepareDeleteObject() { 148 if (hasMultipleCalls()) { 149 for (Enumeration callsEnum = getCalls().elements(); callsEnum.hasMoreElements();) { 150 DatabaseCall call = (DatabaseCall)callsEnum.nextElement(); 151 call.returnNothing(); 152 if (getQuery().getDescriptor().usesOptimisticLocking()) { 153 call.setHasOptimisticLock(true); 154 } 155 } 156 } else { 157 getCall().returnNothing(); 158 if (getQuery().getDescriptor().usesOptimisticLocking()) { 159 getDatabaseCall().setHasOptimisticLock(true); 160 } 161 } 162 prepareCall(); 163 } 164 165 168 public void prepareDoesExist(DatabaseField field) { 169 getCall().returnOneRow(); 170 Vector fields = oracle.toplink.essentials.internal.helper.NonSynchronizedVector.newInstance(1); 171 fields.addElement(field); 172 getDatabaseCall().setFields(fields); 173 prepareCall(); 174 } 175 176 179 public void prepareExecuteSelect() { 180 if (hasMultipleCalls()) { 181 for (Enumeration callsEnum = getCalls().elements(); callsEnum.hasMoreElements();) { 182 DatabaseCall databseCall = (DatabaseCall)callsEnum.nextElement(); 183 databseCall.returnManyRows(); 184 databseCall.setIsFieldMatchingRequired(isCallQueryMechanism()); 185 } 186 } else { 187 DatabaseCall call = getDatabaseCall(); 188 call.returnManyRows(); 189 call.setIsFieldMatchingRequired(isCallQueryMechanism()); 190 } 191 prepareCall(); 192 } 193 194 197 public void prepareSelectAllRows() { 198 if (hasMultipleCalls()) { 199 for (Enumeration callsEnum = getCalls().elements(); callsEnum.hasMoreElements();) { 200 DatabaseCall call = (DatabaseCall)callsEnum.nextElement(); 201 call.returnManyRows(); 202 if (isCallQueryMechanism()) { 203 call.setIsFieldMatchingRequired(true); 204 call.setFields(((ObjectLevelReadQuery)getQuery()).getSelectionFields()); 207 ((ObjectLevelReadQuery)getQuery()).getJoinedAttributeManager().computeJoiningMappingIndexes(true, getSession(), 0); 208 } 209 } 210 } else { 211 getCall().returnManyRows(); 212 if (isCallQueryMechanism()) { 213 DatabaseCall call = getDatabaseCall(); 214 call.setIsFieldMatchingRequired(true); 215 call.setFields(((ObjectLevelReadQuery)getQuery()).getSelectionFields()); 218 ((ObjectLevelReadQuery)getQuery()).getJoinedAttributeManager().computeJoiningMappingIndexes(true, getSession(), 0); 219 } 220 } 221 prepareCall(); 222 } 223 224 227 public void prepareSelectOneRow() { 228 if (hasMultipleCalls()) { 229 for (Enumeration callsEnum = getCalls().elements(); callsEnum.hasMoreElements();) { 230 DatabaseCall call = (DatabaseCall)callsEnum.nextElement(); 231 call.returnOneRow(); 232 if (isCallQueryMechanism()) { 233 call.setIsFieldMatchingRequired(true); 234 call.setFields(((ObjectLevelReadQuery)getQuery()).getSelectionFields()); 237 ((ObjectLevelReadQuery)getQuery()).getJoinedAttributeManager().computeJoiningMappingIndexes(true, getSession(), 0); 238 } 239 } 240 } else { 241 getCall().returnOneRow(); 242 if (isCallQueryMechanism()) { 243 DatabaseCall call = getDatabaseCall(); 244 call.setIsFieldMatchingRequired(true); 245 call.setFields(((ObjectLevelReadQuery)getQuery()).getSelectionFields()); 248 ((ObjectLevelReadQuery)getQuery()).getJoinedAttributeManager().computeJoiningMappingIndexes(true, getSession(), 0); 249 } 250 } 251 prepareCall(); 252 } 253 254 257 public void prepareUpdateObject() { 258 if (hasMultipleCalls()) { 259 for (Enumeration callsEnum = getCalls().elements(); callsEnum.hasMoreElements();) { 260 DatabaseCall call = (DatabaseCall)callsEnum.nextElement(); 261 call.returnNothing(); 262 if (getQuery().getDescriptor().usesOptimisticLocking()) { 263 call.setHasOptimisticLock(true); 264 } 265 } 266 } else if (getCall() != null) { 267 getCall().returnNothing(); 268 if (getQuery().getDescriptor().usesOptimisticLocking()) { 269 getDatabaseCall().setHasOptimisticLock(true); 270 } 271 } 272 prepareCall(); 273 } 274 275 279 public void setCallHasCustomSQLArguments() { 280 if (hasMultipleCalls()) { 281 for (Enumeration callsEnum = getCalls().elements(); callsEnum.hasMoreElements();) { 282 DatabaseCall databseCall = (DatabaseCall)callsEnum.nextElement(); 283 if (databseCall.isSQLCall()) { 284 ((SQLCall)databseCall).setHasCustomSQLArguments(true); 285 } 286 } 287 } else if (getCall().isSQLCall()) { 288 ((SQLCall)getCall()).setHasCustomSQLArguments(true); 289 } 290 } 291 292 297 protected void updateForeignKeyFieldAfterInsert(WriteObjectQuery writeQuery) { 298 for (Enumeration tablesEnum = getDescriptor().getTables().elements(); 299 tablesEnum.hasMoreElements();) { 300 DatabaseTable table = (DatabaseTable)tablesEnum.nextElement(); 301 SQLUpdateStatement updateStatement = new SQLUpdateStatement(); 302 updateStatement.setModifyRow(getDescriptor().getObjectBuilder().buildRowForUpdate(writeQuery)); 303 updateStatement.setTranslationRow(getTranslationRow()); 304 updateStatement.setTable(table); 305 updateStatement.setWhereClause(getDescriptor().getObjectBuilder().buildPrimaryKeyExpression(table)); StatementQueryMechanism updateMechanism = new StatementQueryMechanism(writeQuery, updateStatement); 308 writeQuery.setModifyRow(updateStatement.getModifyRow()); 309 updateMechanism.updateObject(); 310 311 } 312 } 313 } 314 | Popular Tags |