01: /*
02: Copyright (C) 2002-2007 MySQL AB
03:
04: This program is free software; you can redistribute it and/or modify
05: it under the terms of version 2 of the GNU General Public License as
06: published by the Free Software Foundation.
07:
08: There are special exceptions to the terms and conditions of the GPL
09: as it is applied to this software. View the full text of the
10: exception in file EXCEPTIONS-CONNECTOR-J in the directory of this
11: software distribution.
12:
13: This program is distributed in the hope that it will be useful,
14: but WITHOUT ANY WARRANTY; without even the implied warranty of
15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16: GNU General Public License for more details.
17:
18: You should have received a copy of the GNU General Public License
19: along with this program; if not, write to the Free Software
20: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21:
22: */
23:
24: package com.mysql.jdbc;
25:
26: import java.sql.ResultSet;
27: import java.sql.RowIdLifetime;
28: import java.sql.SQLException;
29: import java.sql.Types;
30: import java.util.ArrayList;
31:
32: import java.util.List;
33:
34: public class JDBC4DatabaseMetaDataUsingInfoSchema extends
35: DatabaseMetaDataUsingInfoSchema {
36: public JDBC4DatabaseMetaDataUsingInfoSchema(
37: ConnectionImpl connToSet, String databaseToSet)
38: throws SQLException {
39: super (connToSet, databaseToSet);
40: }
41:
42: public RowIdLifetime getRowIdLifetime() throws SQLException {
43: return RowIdLifetime.ROWID_UNSUPPORTED;
44: }
45:
46: /**
47: * Returns true if this either implements the interface argument or is directly or indirectly a wrapper
48: * for an object that does. Returns false otherwise. If this implements the interface then return true,
49: * else if this is a wrapper then return the result of recursively calling <code>isWrapperFor</code> on the wrapped
50: * object. If this does not implement the interface and is not a wrapper, return false.
51: * This method should be implemented as a low-cost operation compared to <code>unwrap</code> so that
52: * callers can use this method to avoid expensive <code>unwrap</code> calls that may fail. If this method
53: * returns true then calling <code>unwrap</code> with the same argument should succeed.
54: *
55: * @param interfaces a Class defining an interface.
56: * @return true if this implements the interface or directly or indirectly wraps an object that does.
57: * @throws java.sql.SQLException if an error occurs while determining whether this is a wrapper
58: * for an object with the given interface.
59: * @since 1.6
60: */
61: public boolean isWrapperFor(Class<?> iface) throws SQLException {
62: // This works for classes that aren't actually wrapping
63: // anything
64: return iface.isInstance(this );
65: }
66:
67: /**
68: * Returns an object that implements the given interface to allow access to non-standard methods,
69: * or standard methods not exposed by the proxy.
70: * The result may be either the object found to implement the interface or a proxy for that object.
71: * If the receiver implements the interface then that is the object. If the receiver is a wrapper
72: * and the wrapped object implements the interface then that is the object. Otherwise the object is
73: * the result of calling <code>unwrap</code> recursively on the wrapped object. If the receiver is not a
74: * wrapper and does not implement the interface, then an <code>SQLException</code> is thrown.
75: *
76: * @param iface A Class defining an interface that the result must implement.
77: * @return an object that implements the interface. May be a proxy for the actual implementing object.
78: * @throws java.sql.SQLException If no object found that implements the interface
79: * @since 1.6
80: */
81: public <T> T unwrap(java.lang.Class<T> iface)
82: throws java.sql.SQLException {
83: try {
84: // This works for classes that aren't actually wrapping
85: // anything
86: return iface.cast(this );
87: } catch (ClassCastException cce) {
88: throw SQLError.createSQLException("Unable to unwrap to "
89: + iface.toString(),
90: SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
91: }
92: }
93:
94: protected int getJDBC4FunctionNoTableConstant() {
95: return functionNoTable;
96: }
97: }
|