//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 net.sourceforge.jtds.jdbc.JtdsConnection; /** * Cache key for an SQL query, consisting of the query and server type, major * and minor version. * * @author Brett Wooldridge * @author Alin Sinpalean * @version $Id: SQLCacheKey.java,v 1.2.2.1 2009-07-29 12:10:42 ickzon Exp $ */ public class SQLCacheKey { private final String sql; private final int serverType; private final int majorVersion; private final int minorVersion; private final int hashCode; public SQLCacheKey(String sql, JtdsConnection connection) { this.sql = sql; this.serverType = connection.getServerType(); this.majorVersion = connection.getDatabaseMajorVersion(); this.minorVersion = connection.getDatabaseMinorVersion(); this.hashCode = sql.hashCode() ^ (serverType << 24 | majorVersion << 16 | minorVersion); } public int hashCode() { return hashCode; } public boolean equals(Object object) { try { SQLCacheKey key = (SQLCacheKey) object; return this.hashCode == key.hashCode && this.majorVersion == key.majorVersion && this.minorVersion == key.minorVersion && this.serverType == key.serverType && this.sql.equals(key.sql); } catch (ClassCastException e) { return false; } catch (NullPointerException e) { return false; } } }