// jTDS JDBC Driver for Microsoft SQL Server and Sybase // Copyright (C) 2004 The jTDS Project // // 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // package net.sourceforge.jtds.jdbc.cache; import java.util.Collection; /** * Interface for a statement cache. Abstraction of the caching mechanism by use * of this interface will allow developers to create custom caching schemes * that are optimal for their specific applications. Any synchronization * required by an implementation should utilize the implementing object for the * lock. * <p> * There are two types of attributes that the cache is concerned with: * <dl> * <dt>statement key</dt> * <dd><code>String</code> generated from the SQL query for which the * prepared statement was created, the database name and the parameter * types; this key uniquely identifies a server-side preparation of the * statement and is used to retrieve the handle of the statement when it * needs to be executed</dd> * <dt>temporary procedure name or <code>sp_prepare</code> or * <code>sp_cursorprepare</code> handle on the server</dt> * <dd>One <code>PreparedStatement</code> can map to multiple handles, depending on * the types of the parameters it is called with (hence the need to be able * to map both keys and SQL strings to handles)</dd> * </dl> * The cache can retrieve statement handles using statement keys. * <p> * The caching types provided by jTDS should be: * <ul> * <li>Arbitrary first un-latched (initial default until other caches are * implemented)</li> * <li>Fast caching (never latches and never releases handles)</li> * <li>FIFO</li> * <li>LRU</li> * <li>No caching</li> * <li>Touch Count / Most Frequently Used</li> * </ul> * * @author Brian Heineman * @version $Id: StatementCache.java,v 1.6 2007-07-11 19:57:06 bheineman Exp $ */ public interface StatementCache { /** * Returns a statement handle associated with the specified key or * <code>null</code> if the key specified does not have an associated * statement handle. * * @param key the statement key whose associated handle is to be returned * @return statement handle */ Object get(String key); /** * Places the specified statement handle in the cache for the given key. If * a key already exists in the cache, the handle will be overwritten. * * @param key the statement key to associated with the handle * @param handle the statement handle */ void put(String key, Object handle); /** * Removes a statement key and handle from the cache for the specified key. * * @param key the statement key whose associated handle is to be removed * from the cache */ void remove(String key); /** * Returns a <code>Collection</code> of obsolete statement handles that may * be released, or <code>null</code> if no statement handles are obsolete. * * @param handles the statement handles that are no longer being used * @return <code>Collection</code> of obsolete statement handles to be * removed */ Collection getObsoleteHandles(Collection handles); }