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;
010:
011: import com.completex.objective.components.log.Log;
012: import com.completex.objective.components.persistency.BasicQuery;
013: import com.completex.objective.components.persistency.LifeCycleController;
014: import com.completex.objective.components.persistency.OdalPersistencyException;
015: import com.completex.objective.components.persistency.ResultableQueryManager;
016: import com.completex.objective.components.persistency.core.ResultSetCtl;
017: import com.completex.objective.components.persistency.core.impl.query.QueryContext;
018: import com.completex.objective.components.persistency.transact.Transaction;
019: import com.completex.objective.components.persistency.type.MultipartCollection;
020:
021: import java.sql.PreparedStatement;
022: import java.sql.ResultSet;
023: import java.sql.SQLException;
024:
025: /**
026: * @author Gennady Krizhevsky
027: */
028: public abstract class AbstractResultSetExecutor {
029: protected Log logger = Log.NULL_LOGGER;
030: private BasicDatabasePersistencyImpl persistency;
031: private ResultSetCtl resultSetCtl = new ResultSetCtlImpl();
032:
033: protected AbstractResultSetExecutor() {
034: }
035:
036: protected AbstractResultSetExecutor(Log logger,
037: BasicDatabasePersistencyImpl persistency,
038: ResultSetCtl resultSetCtl) {
039: this .logger = logger;
040: this .persistency = persistency;
041: this .resultSetCtl = resultSetCtl;
042: if (resultSetCtl instanceof ResultSetCtlImpl) {
043: ResultSetCtlImpl resultSetCtlImpl = (ResultSetCtlImpl) resultSetCtl;
044: resultSetCtlImpl.setLogger(logger);
045: resultSetCtlImpl.setPersistency(persistency);
046: }
047: }
048:
049: protected void closeRs(ResultSet resultSet) {
050: BasicDatabasePersistencyImpl.closeRs(resultSet, logger);
051: }
052:
053: public ResultSetCtl getResultSetCtl() {
054: return resultSetCtl;
055: }
056:
057: void setResultSetCtl(ResultSetCtl resultSetCtl) {
058: this .resultSetCtl = resultSetCtl;
059: }
060:
061: public Log getLogger() {
062: return logger;
063: }
064:
065: public void setLogger(Log logger) {
066: if (logger != null) {
067: this .logger = logger;
068: }
069: }
070:
071: public BasicDatabasePersistencyImpl getPersistency() {
072: return persistency;
073: }
074:
075: void setPersistency(BasicDatabasePersistencyImpl persistency) {
076: this .persistency = persistency;
077: }
078:
079: protected abstract void execute(Transaction transaction,
080: PreparedStatement statement, ResultableQueryManager query,
081: ResultSetCtl resultSetCtl, MultipartCollection results,
082: LifeCycleController controller, boolean firstOnly,
083: QueryContext queryContext) throws SQLException;
084:
085: public void executeSingleRs(Transaction transaction,
086: PreparedStatement statement, ResultableQueryManager query,
087: ResultSetCtl resultSetCtl, MultipartCollection results,
088: LifeCycleController controller, QueryContext queryContext)
089: throws SQLException {
090: execute(transaction, statement, query, resultSetCtl, results,
091: controller, true, queryContext);
092: }
093:
094: public void executeMultiRs(Transaction transaction,
095: PreparedStatement statement, ResultableQueryManager query,
096: ResultSetCtl resultSetCtl, MultipartCollection results,
097: LifeCycleController controller, QueryContext queryContext)
098: throws SQLException {
099: execute(transaction, statement, query, resultSetCtl, results,
100: controller, false, queryContext);
101: }
102:
103: protected boolean executeStatementIfNeeded(
104: AbstractResultSetWrapper resultSetWrapper,
105: PreparedStatement statement, ResultableQueryManager query)
106: throws SQLException {
107: boolean rc;
108: if (resultSetWrapper == null) {
109: rc = statement.execute();
110: query.setState(BasicQuery.STATE_ACTIVE);
111: } else if (resultSetWrapper.isClosed()) {
112: throw new OdalPersistencyException("Result set is closed");
113: } else {
114: // this is not the 1st time we call it - set rc to true:
115: rc = true;
116: }
117: return rc;
118: }
119:
120: }
|