/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid; import java.io.Serializable; import java.sql.Statement; import java.util.Map; import java.util.TimeZone; import javax.security.auth.Subject; import org.teiid.adminapi.DataPolicy; import org.teiid.adminapi.Session; import org.teiid.adminapi.VDB; import org.teiid.jdbc.TeiidConnection; import org.teiid.jdbc.TeiidSQLException; import org.teiid.jdbc.TeiidSQLWarning; /** * Context information for the currently executing command. * Can be used as an argument to UDFs. */ public interface CommandContext { /** * Get the current user name, which will just be the base user name * and not include the security domain. See also {@link #getSession()} - {@link Session#getSecurityDomain()} * @return */ String getUserName(); /** * Get the current vdb name * @return */ String getVdbName(); /** * Get the current vdb version * @return */ String getVdbVersion(); /** * Get the connection id * @return */ String getConnectionId(); /** * Get the connection id * @return * @deprecated see {@link #getConnectionId()} */ String getConnectionID(); /** * Get the next random double value * @return */ double getNextRand(); /** * Sets the seed value and returns the next random double value. * Additional calls to {@link #getNextRand()} will be based upon the seed value. * @param seed * @return */ double getNextRand(long seed); /** * Get the processor batch size set on the BufferManager * @return - the nominal batch size target. actual batch sizes will vary based * upon the column types */ int getProcessorBatchSize(); /** * Get the server {@link TimeZone} * @return */ TimeZone getServerTimeZone(); /** * Get the current subject * @return */ Subject getSubject(); /** * Get the current session * @return */ Session getSession(); /** * Get the current command payload * @return may be null if the client did not set a payload */ Serializable getCommandPayload(); /** * Get the current request id * @return */ String getRequestId(); /** * Get the user's data policies, never null * @return */ Map<String, DataPolicy> getAllowedDataPolicies(); /** * Get the current vdb * @return */ VDB getVdb(); /** * Add a listener for command events * @param listener */ void addListener(CommandListener listener); /** * Add a listener for command events * @param listener */ void removeListener(CommandListener listener); /** * Get the number of times this command has been reused. Useful * in continuous executions. * @see #isContinuous() * @return */ long getReuseCount(); /** * Get class loader for VDB. * @return */ ClassLoader getVDBClassLoader(); /** * Add an exception as a warning. 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); /** * * @return true if this is a continuous query */ boolean isContinuous(); /** * Whether to return the keys generated by an insert. * @return */ boolean isReturnAutoGeneratedKeys(); /** * Creates a holder for generated keys. * @param columnNames * @param columnDataTypes * @return */ GeneratedKeys returnGeneratedKeys(String[] columnNames, Class<?>[] columnDataTypes); /** * Returns the last set of generated keys or null if no keys have been generated. */ GeneratedKeys getGeneratedKeys(); /** * Set the session variable and return the old value if any * @param key * @param value * @return */ Object setSessionVariable(String key, Object value); /** * Get the session variable * @param key * @return */ Object getSessionVariable(String key); /** * Gets a connection to the current session. * <br/><b>WARNING</b> be careful with blocking/recursive operations. * <br/>The returned connection is considered to be derived and is not allowed * to alter the transaction state or close the session. * <br/>Each call to this method will return a new connection. * <br/>Client side execution/connection properties are specific to * each connection instance * @return a Connection to the current session * @throws TeiidSQLException */ TeiidConnection getConnection() throws TeiidSQLException; }