📄 activation.java
字号:
/* Derby - Class org.apache.derby.iapi.sql.Activation Copyright 1997, 2004 The Apache Software Foundation or its licensors, as applicable. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */package org.apache.derby.iapi.sql;import org.apache.derby.iapi.error.StandardException;import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;import org.apache.derby.iapi.sql.dictionary.IndexRowGenerator;import org.apache.derby.iapi.sql.dictionary.TableDescriptor;import org.apache.derby.iapi.sql.execute.ExecPreparedStatement;import org.apache.derby.iapi.sql.execute.ExecRow;import org.apache.derby.iapi.sql.execute.ExecutionFactory;import org.apache.derby.iapi.sql.execute.NoPutResultSet;import org.apache.derby.iapi.sql.execute.ConstantAction;import org.apache.derby.iapi.sql.execute.CursorResultSet;import org.apache.derby.iapi.sql.execute.TemporaryRowHolder;import org.apache.derby.iapi.store.access.ConglomerateController;import org.apache.derby.iapi.store.access.ScanController;import org.apache.derby.iapi.store.access.TransactionController;import org.apache.derby.iapi.types.DataValueFactory;import org.apache.derby.iapi.types.RowLocation;import org.apache.derby.iapi.types.DataTypeDescriptor;import java.sql.SQLWarning;import java.util.Enumeration;import java.util.Vector;import java.util.Hashtable;/** * An activation contains all the local state information necessary * to execute a re-entrant PreparedStatement. The way it will actually work * is that a PreparedStatement will have an executable plan, which will be * a generated class. All of the local state will be variables in the class. * Creating a new instance of the executable plan will create the local state * variables. This means that an executable plan must implement this interface, * and that the PreparedStatement.getActivation() method will do a * "new" operation on the executable plan. * <p> * The fixed implementations of Activation in the Execution impl * package are used as skeletons for the classes generated for statements * when they are compiled. * <p> * There are no fixed implementations of Activation for statements; * a statement has an activation generated for it when it is compiled. * * @author Jeff Lichtman */public interface Activation{ /** * Resets the activation to the "pre-execution" state - * that is, the state where it can be used to begin a new execution. * Frees local buffers, stops scans, resets counters to zero, sets * current date and time to an unitialized state, etc. * * @return Nothing * @exception StandardException thrown on failure */ void reset() throws StandardException; /** * JDBC requires that all select statements be converted into cursors, * and that the cursor name be settable for each execution of a select * statement. The Language Module will support this, so that the JDBC * driver will not have to parse JSQL text. This method will have no * effect when called on non-select statements. * <p> * There will be a JSQL statement to disable the "cursorization" of * all select statements. For non-cursorized select statements, this * method will have no effect. * <p> * This has no effect if the activation has been closed. * <p> * @param cursorName The cursor name to use. */ void setCursorName(String cursorName); /** * Temporary tables can be declared with ON COMMIT DELETE ROWS. But if the table has a held curosr open at * commit time, data should not be deleted from the table. This method, (gets called at commit time) checks if this * activation held cursor and if so, does that cursor reference the passed temp table name. * * @return true if this activation has held cursor and if it references the passed temp table name */ public boolean checkIfThisActivationHasHoldCursor(String tableName); /** * Gets the ParameterValueSet for this execution of the statement. * * @return The ParameterValueSet for this execution of the * statement. Returns NULL if there are no parameters. */ ParameterValueSet getParameterValueSet(); /** * Sets the parameter values for this execution of the statement. * <p> * Has no effect if the activation has been closed. * * <p> * NOTE: The setParameters() method is currently unimplemented. * A statement with parameters will generate its own ParameterValueSet, * which can be gotten with the getParameterValueSet() method (above). * The idea behind setParameters() is to improve performance when * operating across a network by allowing all the parameters to be set * in one call, as opposed to one call per parameter. * * @param parameterValues The values of the parameters. * * @return Nothing */ void setParameters(ParameterValueSet parameterValues, DataTypeDescriptor[] parameterTypes) throws StandardException; /** * When the prepared statement is executed, it passes * execution on to the activation execution was requested for. * * @return the ResultSet for further manipulation, if any. * * @exception StandardException Thrown on failure */ ResultSet execute() throws StandardException; /** Closing an activation statement marks it as unusable. Any other requests made on it will fail. An activation should be marked closed when it is expected to not be used any longer, i.e. when the connection for it is closed, or it has suffered some sort of severe error. This will also close its result set and release any resources it holds e.g. for parameters. <P> Any class that implements this must be prepared to be executed from garbage collection, ie. there is no matching context stack. @exception StandardException Thrown on failure */ void close() throws StandardException; /** Find out if the activation is closed or not. @return true if the Activation has been closed. */ boolean isClosed(); /** Set this Activation for a single execution. E.g. a java.sql.Statement execution. */ void setSingleExecution(); /** Returns true if this Activation is only going to be used for one execution. */ boolean isSingleExecution(); /** Returns the chained list of warnings. Returns null if there are no warnings. */ SQLWarning getWarnings(); /** Add a warning to the activation */ void addWarning(SQLWarning w); /** Clear the activation's warnings. */ void clearWarnings(); /** * Get the language connection context associated with this activation */ public LanguageConnectionContext getLanguageConnectionContext(); /** * Get the Execution TransactionController associated with this * activation/lcc. */ TransactionController getTransactionController(); /** * Returns the current result set for this activation, i.e. * the one returned by the last execute() call. If there has * been no execute call or the activation has been reset or closed, * a null is returned. * * @return the current ResultSet of this activation. */ ResultSet getResultSet(); /** * Sets the ResultSet to be returned by getResultSet() to null. */ void clearResultSet(); /** * Generated plans have a current row field for ease in defining * the methods and finding them dynamically. The interface is * used to set the row before a dynamic method that uses it is * invoked. * <p> * When all processing on the currentRow has been completed, * callers should call activation.clearCurrentRow(resultSetNumber) * to ensure that no unnecessary references are retained to rows. * This will allow the rows no longer in use to be collected by * the garbage collecter. * * @param currentRow The row to be operated upon. * @param resultSetNumber The resultSetNumber for the current ResultSet * * @return Nothing * */ void setCurrentRow(ExecRow currentRow, int resultSetNumber); /** * Generated plans have a current row field for ease in defining * the methods and finding them dynamically. The interface is * used to set the row before a dynamic method that uses it is * invoked. * <p> * When all processing on the currentRow has been completed, * callers should call activation.clearCurrentRow(resultSetNumber) * to ensure that no unnecessary references are retained to rows. * This will allow the rows no longer in use to be collected by * the garbage collecter. * * @param resultSetNumber The resultSetNumber for the current ResultSet * * @return Nothing */ /* RESOLVE - this method belongs on an internal, not external, interface */ void clearCurrentRow(int resultSetNumber); /** * Get the prepared statement that this activation is for. * * @return the prepared statement this activation is for. * */ ExecPreparedStatement getPreparedStatement(); /** Check the validity of the current executing statement. Needs to be called after a statement has obtained the relevant table locks on the */ public void checkStatementValidity() throws StandardException; /** * Get the result description for this activation, if it has one. * * @return result description for this activation, if it has one; * otherwise, null. */ ResultDescription getResultDescription(); /** * Get the DataValueFactory * * @return DataValueFactory */ DataValueFactory getDataValueFactory(); /** * Get the ExecutionFactory * * @return ExecutionFactory */ ExecutionFactory getExecutionFactory(); /** Get the saved RowLocation. @param itemNumber The saved item number. @return A RowLocation template for the conglomerate */ public RowLocation getRowLocationTemplate(int itemNumber); /** Get the number of subqueries in the entire query. @return int The number of subqueries in the entire query.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -