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 JDBC4DatabaseMetaData extends DatabaseMetaData {
35: public JDBC4DatabaseMetaData(ConnectionImpl connToSet,
36: String databaseToSet) {
37: super (connToSet, databaseToSet);
38: }
39:
40: public RowIdLifetime getRowIdLifetime() throws SQLException {
41: return RowIdLifetime.ROWID_UNSUPPORTED;
42: }
43:
44: /**
45: * Returns true if this either implements the interface argument or is directly or indirectly a wrapper
46: * for an object that does. Returns false otherwise. If this implements the interface then return true,
47: * else if this is a wrapper then return the result of recursively calling <code>isWrapperFor</code> on the wrapped
48: * object. If this does not implement the interface and is not a wrapper, return false.
49: * This method should be implemented as a low-cost operation compared to <code>unwrap</code> so that
50: * callers can use this method to avoid expensive <code>unwrap</code> calls that may fail. If this method
51: * returns true then calling <code>unwrap</code> with the same argument should succeed.
52: *
53: * @param interfaces a Class defining an interface.
54: * @return true if this implements the interface or directly or indirectly wraps an object that does.
55: * @throws java.sql.SQLException if an error occurs while determining whether this is a wrapper
56: * for an object with the given interface.
57: * @since 1.6
58: */
59: public boolean isWrapperFor(Class<?> iface) throws SQLException {
60: // This works for classes that aren't actually wrapping
61: // anything
62: return iface.isInstance(this );
63: }
64:
65: /**
66: * Returns an object that implements the given interface to allow access to non-standard methods,
67: * or standard methods not exposed by the proxy.
68: * The result may be either the object found to implement the interface or a proxy for that object.
69: * If the receiver implements the interface then that is the object. If the receiver is a wrapper
70: * and the wrapped object implements the interface then that is the object. Otherwise the object is
71: * the result of calling <code>unwrap</code> recursively on the wrapped object. If the receiver is not a
72: * wrapper and does not implement the interface, then an <code>SQLException</code> is thrown.
73: *
74: * @param iface A Class defining an interface that the result must implement.
75: * @return an object that implements the interface. May be a proxy for the actual implementing object.
76: * @throws java.sql.SQLException If no object found that implements the interface
77: * @since 1.6
78: */
79: public <T> T unwrap(java.lang.Class<T> iface)
80: throws java.sql.SQLException {
81: try {
82: // This works for classes that aren't actually wrapping
83: // anything
84: return iface.cast(this );
85: } catch (ClassCastException cce) {
86: throw SQLError.createSQLException("Unable to unwrap to "
87: + iface.toString(),
88: SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
89: }
90: }
91:
92: protected int getJDBC4FunctionNoTableConstant() {
93: return functionNoTable;
94: }
95: }
|