/* * Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0, * and the EPL 1.0 (http://h2database.com/html/license.html). * Initial Developer: H2 Group */ package org.h2.engine; import java.io.Closeable; import java.util.ArrayList; import org.h2.command.CommandInterface; import org.h2.message.Trace; import org.h2.store.DataHandler; import org.h2.value.Value; /** * A local or remote session. A session represents a database connection. */ public interface SessionInterface extends Closeable { /** * Get the list of the cluster servers for this session. * * @return A list of "ip:port" strings for the cluster servers in this * session. */ ArrayList<String> getClusterServers(); /** * Parse a command and prepare it for execution. * * @param sql the SQL statement * @param fetchSize the number of rows to fetch in one step * @return the prepared command */ CommandInterface prepareCommand(String sql, int fetchSize); /** * Roll back pending transactions and close the session. */ @Override void close(); /** * Get the trace object * * @return the trace object */ Trace getTrace(); /** * Check if close was called. * * @return if the session has been closed */ boolean isClosed(); /** * Get the number of disk operations before power failure is simulated. * This is used for testing. If not set, 0 is returned * * @return the number of operations, or 0 */ int getPowerOffCount(); /** * Set the number of disk operations before power failure is simulated. * To disable the countdown, use 0. * * @param i the number of operations */ void setPowerOffCount(int i); /** * Get the data handler object. * * @return the data handler */ DataHandler getDataHandler(); /** * Check whether this session has a pending transaction. * * @return true if it has */ boolean hasPendingTransaction(); /** * Cancel the current or next command (called when closing a connection). */ void cancel(); /** * Check if the database changed and therefore reconnecting is required. * * @param write if the next operation may be writing * @return true if reconnecting is required */ boolean isReconnectNeeded(boolean write); /** * Close the connection and open a new connection. * * @param write if the next operation may be writing * @return the new connection */ SessionInterface reconnect(boolean write); /** * Called after writing has ended. It needs to be called after * isReconnectNeeded(true) returned false. */ void afterWriting(); /** * Check if this session is in auto-commit mode. * * @return true if the session is in auto-commit mode */ boolean getAutoCommit(); /** * Set the auto-commit mode. This call doesn't commit the current * transaction. * * @param autoCommit the new value */ void setAutoCommit(boolean autoCommit); /** * Add a temporary LOB, which is closed when the session commits. * * @param v the value */ void addTemporaryLob(Value v); /** * Check if this session is remote or embedded. * * @return true if this session is remote */ boolean isRemote(); /** * Set current schema. * * @param schema the schema name */ void setCurrentSchemaName(String schema); /** * Get current schema. * * @return the current schema name */ String getCurrentSchemaName(); }