//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;
}
}
}