001: /*
002:
003: Derby - Class org.apache.derby.iapi.sql.execute.ExecutionContext
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.iapi.sql.execute;
023:
024: import org.apache.derby.iapi.services.context.Context;
025:
026: import org.apache.derby.iapi.error.StandardException;
027:
028: import org.apache.derby.iapi.sql.ResultSet;
029:
030: /**
031: * ExecutionContext stores the factories that are to be used by
032: * the current connection. It also provides execution services
033: * for statement atomicity.
034: *
035: * @author ames
036: */
037: public interface ExecutionContext extends Context {
038:
039: /**
040: * this is the ID we expect execution contexts
041: * to be stored into a context manager under.
042: */
043: String CONTEXT_ID = "ExecutionContext";
044:
045: /* Constants for scan isolation levels. */
046: public static final int UNSPECIFIED_ISOLATION_LEVEL = 0;
047: public static final int READ_UNCOMMITTED_ISOLATION_LEVEL = 1;
048: public static final int READ_COMMITTED_ISOLATION_LEVEL = 2;
049: public static final int REPEATABLE_READ_ISOLATION_LEVEL = 3;
050: public static final int SERIALIZABLE_ISOLATION_LEVEL = 4;
051:
052: public static final int[] CS_TO_JDBC_ISOLATION_LEVEL_MAP = {
053: java.sql.Connection.TRANSACTION_NONE, // UNSPECIFIED_ISOLATION_LEVEL
054: java.sql.Connection.TRANSACTION_READ_UNCOMMITTED, // READ_UNCOMMITTED_ISOLATION_LEVEL
055: java.sql.Connection.TRANSACTION_READ_COMMITTED, // READ_COMMITTED_ISOLATION_LEVEL
056: java.sql.Connection.TRANSACTION_REPEATABLE_READ, // REPEATABLE_READ_ISOLATION_LEVEL
057: java.sql.Connection.TRANSACTION_SERIALIZABLE // SERIALIZABLE_ISOLATION_LEVEL
058: };
059:
060: public static final String[][] CS_TO_SQL_ISOLATION_MAP = {
061: { " " }, // UNSPECIFIED_ISOLATION_LEVEL
062: { "UR", "DIRTY READ", "READ UNCOMMITTED" },
063: { "CS", "CURSOR STABILITY", "READ COMMITTED" }, { "RS" }, // read stability
064: { "RR", "REPEATABLE READ", "SERIALIZABLE" } };
065:
066: /**
067: * Get the ResultSetFactory from this ExecutionContext.
068: *
069: * @return The result set factory associated with this
070: * ExecutionContext
071: */
072: ResultSetFactory getResultSetFactory();
073:
074: /**
075: * Get the ResultSetStatisticsFactory from this ExecutionContext.
076: *
077: * @return The result set statistics factory associated with this
078: * ExecutionContext
079: *
080: * @exception StandardException Thrown on error
081: */
082: ResultSetStatisticsFactory getResultSetStatisticsFactory()
083: throws StandardException;
084:
085: /**
086: * Get the ExecutionFactory from this ExecutionContext.
087: *
088: * @return The Execution factory associated with this
089: * ExecutionContext
090: */
091: ExecutionFactory getExecutionFactory();
092:
093: /**
094: * Mark the beginning of a statement (INSERT, UPDATE, DELETE)
095: *
096: * @param sourceRS Source ResultSet for the statement.
097: * @exception StandardException Thrown on error
098: */
099: void beginStatement(ResultSet sourceRS) throws StandardException;
100:
101: /**
102: * The end of a statement (INSERT, UPDATE, DELETE)
103: * @exception StandardException Thrown on error
104: */
105: void endStatement() throws StandardException;
106:
107: /**
108: * Sifts the array of foreign key constraints for the ones
109: * which apply in the current context. In certain contexts
110: * (e.g., when applying the COPY file or when tearing-off
111: * a new table during REFRESH), we don't want to not bother
112: * enforcing some foreign keys.
113: *
114: * @param fullList the full list of foreign keys that
115: * apply for the current statement
116: *
117: * @return a pruned back list, which we will actually bother
118: * enforcing.
119: *
120: * @exception StandardException Thrown on error
121: */
122: public Object[] siftForeignKeys(Object[] fullList)
123: throws StandardException;
124:
125: /**
126: * Sifts the triggers for the ones which apply in the current context.
127: * In certain contexts (e.g., when applying the COPY file or
128: * when tearing-off a new table during REFRESH), we don't want to
129: * not bother firing triggers.
130: *
131: * @param triggerInfo the original trigger info
132: *
133: * @return a pruned back triggerInfo, which we will actually bother
134: * enforcing.
135: *
136: * @exception StandardException Thrown on error
137: */
138: public Object siftTriggers(Object triggerInfo)
139: throws StandardException;
140: }
|