All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.teiid.translator.ExecutionContext Maven / Gradle / Ivy

/*
 * Copyright Red Hat, Inc. and/or its affiliates
 * and other contributors as indicated by the @author tags and
 * the COPYRIGHT.txt file distributed with this work.
 *
 * 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.teiid.translator;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.Statement;
import java.util.Collection;
import java.util.List;

import javax.security.auth.Subject;

import org.teiid.CommandContext;
import org.teiid.GeneratedKeys;
import org.teiid.adminapi.Session;
import org.teiid.jdbc.TeiidSQLWarning;
import org.teiid.metadata.Column;
import org.teiid.metadata.RuntimeMetadata;
import org.teiid.translator.CacheDirective.Scope;



/**
 * The security context provides information about the user context in which
 * this query is being run.
 *
 * As of 4.2, the SecurityContext is a sub-interface of ExecutionContext such
 * that both interfaces contain all of the methods from the prior independent
 * interfaces. Thus, these interfaces can now be used interchangeably.
 *
 */
public interface ExecutionContext {

    /**
     * Get the identifier for the current connector running the command
     * @return Connector identifier; never null
     */
    String getConnectorIdentifier();

    /**
     * Get the identifier for the command being executed.  This can be
     * correlated back to identifiers exposed in other parts of the system.
     * shortcut for {@link #getCommandContext()}.getRequestId()
     * @return command identifier
     */
    String getRequestId();

    /**
     * @deprecated see {@link #getRequestId()}
     * @return
     */
    @Deprecated
    String getRequestID();

    /**
     * This specifies the node id for the atomic request in the relational plan of query.
     */
    String getPartIdentifier();

    /**
     * Execution count defines an id; where every access to the connector from
     * the server in a given command execution boundary is uniquely defined;
     * Like for example in the case of "batched execution" of commands, each execution of
     * command gets new identifier.
     */
    String getExecutionCountIdentifier();

    /**
     * Get the name of the VDB this query is being run against.
     * shortcut for {@link #getCommandContext()}.getVdbName()
     * @return VDB name, never null
     */
    String getVdbName();

    /**
     * Get the version of the VDB this query is being run against.
     * shortcut for {@link #getCommandContext()}.getVdbVersion()
     * @return VDB version
     */
    String getVdbVersion();

    /**
     * Get the user for the user running this query.
     * @return User, never null
     */
    Subject getSubject();

    /**
     * Get the command payload
     * shortcut for {@link #getCommandContext()}.getCommandPayload()
     * @return the payload or null if one was not set by the client
     */
    Serializable getCommandPayload();

    /**
     * @deprecated see {@link #getCommandPayload()}
     * @return
     */
    @Deprecated
    Serializable getExecutionPayload();

    /**
     * Get the collection of general hints as a space concatenated string.
     * @return the general hint or null if none was specified
     */
    String getGeneralHint();

    /**
     * Get the collection of hints designated for this source as a space concatenated string.
     * @return the source hint or null if none was specified
     */
    String getSourceHint();

    /**
     * Get the general hints.
     * @return the general hint or null if none was specified
     */
    Collection getGeneralHints();

    /**
     * Get the hints designated for this source.
     * @return the source hint or null if none was specified
     */
    Collection getSourceHints();

    /**
     * Get the identifier for the connection through which
     * the command is being executed. This represents the original user
     * connection to the Teiid system
     * shortcut for {@link #getCommandContext()}.getConnectionId()
     * @return Connection identifier
     */
    String getConnectionId();

    /**
     * @deprecated see {@link #getConnectionId()}
     * @return
     */
    @Deprecated
    String getConnectionID();

    /**
     * When the execution is turned on with "alive=true", the execution object will not
     * be implicitly closed at the end of the last batch.  It will only be closed at end
     * of the user query.
     * 

* The engine will already detect situations when the connection should stay open for * LOB (clob/blob/xml) streaming. *

* Keeping the execution alive unnecessarily may cause issues with connection usage * as the connection instance may not be usable by other queries. * * @param alive */ void keepExecutionAlive(boolean alive); /** * Return the current connector batch size. This may be used as a hint to the underlying source query. * @return the Connector batch size. */ int getBatchSize(); /** * Add an exception as a warning to this Execution. The exception will be wrapped by a {@link TeiidSQLWarning} for the client. * The warnings can be consumed through the {@link Statement#getWarnings()} method. * @param ex */ void addWarning(Exception ex); /** * Flag indicates that the operation needs to be executed in a XA transaction. * @return */ boolean isTransactional(); /** * Get the current session. * shortcut for {@link #getCommandContext()}.getSession() * @return */ Session getSession(); /** * Signal the engine that data is available and processing should be * resumed. */ void dataAvailable(); /** * Get the CommandContext * @return */ CommandContext getCommandContext(); /** * Get the {@link CacheDirective} * @return */ CacheDirective getCacheDirective(); /** * * @return the {@link RuntimeMetadata} */ RuntimeMetadata getRuntimeMetadata(); /** * Log the source command to the command log * @param command */ void logCommand(Object... command); /** * Get the result cache scope for the current execution * @return */ Scope getScope(); /** * Set the result cache scope for the current execution. *
* Setting to {@link Scope#NONE} will typically result in the user query result being * cached at the {@link Scope#SESSION} level. * * @param scope */ void setScope(Scope scope); /** * Get the expected generated key columns for this execution, or null if there are none. * @return */ List getGeneratedKeyColumns(); /** * If there are generatedKeyColumns, return the {@link GeneratedKeys} used to supply the values to the engine. * @return */ GeneratedKeys returnGeneratedKeys(); /** * Get the transaction isolation level set by the user request. * See the constants on {@link Connection} * @return */ int getTransactionIsolation(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy