1 package com.zaxxer.hikari.pool;
2
3 import java.sql.Connection;
4 import java.sql.DatabaseMetaData;
5 import java.sql.ResultSet;
6 import java.sql.SQLException;
7 import java.sql.Statement;
8
9 public abstract class ProxyDatabaseMetaData implements DatabaseMetaData
10 {
11 protected final ProxyConnection connection;
12
13 @SuppressWarnings("WeakerAccess")
14 protected final DatabaseMetaData delegate;
15
16 ProxyDatabaseMetaData(ProxyConnection connection, DatabaseMetaData metaData)
17 {
18 this.connection = connection;
19 this.delegate = metaData;
20 }
21
22 @SuppressWarnings("unused")
23 final SQLException checkException(SQLException e)
24 {
25 return connection.checkException(e);
26 }
27
28
29 @Override
30 public final String toString()
31 {
32 final String delegateToString = delegate.toString();
33 return this.getClass().getSimpleName() + '@' + System.identityHashCode(this) + " wrapping " + delegateToString;
34 }
35
36
37
38
39
40
41 @Override
42 public final Connection getConnection()
43 {
44 return connection;
45 }
46
47 @Override
48 public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) throws SQLException {
49 ResultSet resultSet = delegate.getProcedures(catalog, schemaPattern, procedureNamePattern);
50 Statement statement = resultSet.getStatement();
51 if (statement != null) {
52 statement = ProxyFactory.getProxyStatement(connection, statement);
53 }
54 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
55 }
56
57 @Override
58 public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) throws SQLException {
59 ResultSet resultSet = delegate.getProcedureColumns(catalog, schemaPattern, procedureNamePattern, columnNamePattern);
60 Statement statement = resultSet.getStatement();
61 if (statement != null) {
62 statement = ProxyFactory.getProxyStatement(connection, statement);
63 }
64 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
65 }
66
67 @Override
68 public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException {
69 ResultSet resultSet = delegate.getTables(catalog, schemaPattern, tableNamePattern, types);
70 Statement statement = resultSet.getStatement();
71 if (statement != null) {
72 statement = ProxyFactory.getProxyStatement(connection, statement);
73 }
74 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
75 }
76
77 @Override
78 public ResultSet getSchemas() throws SQLException {
79 ResultSet resultSet = delegate.getSchemas();
80 Statement statement = resultSet.getStatement();
81 if (statement != null) {
82 statement = ProxyFactory.getProxyStatement(connection, statement);
83 }
84 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
85 }
86
87 @Override
88 public ResultSet getCatalogs() throws SQLException {
89 ResultSet resultSet = delegate.getCatalogs();
90 Statement statement = resultSet.getStatement();
91 if (statement != null) {
92 statement = ProxyFactory.getProxyStatement(connection, statement);
93 }
94 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
95 }
96
97 @Override
98 public ResultSet getTableTypes() throws SQLException {
99 ResultSet resultSet = delegate.getTableTypes();
100 Statement statement = resultSet.getStatement();
101 if (statement != null) {
102 statement = ProxyFactory.getProxyStatement(connection, statement);
103 }
104 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
105 }
106
107 @Override
108 public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException {
109 ResultSet resultSet = delegate.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);
110 Statement statement = resultSet.getStatement();
111 if (statement != null) {
112 statement = ProxyFactory.getProxyStatement(connection, statement);
113 }
114 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
115 }
116
117 @Override
118 public ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) throws SQLException {
119 ResultSet resultSet = delegate.getColumnPrivileges(catalog, schema, table, columnNamePattern);
120 Statement statement = resultSet.getStatement();
121 if (statement != null) {
122 statement = ProxyFactory.getProxyStatement(connection, statement);
123 }
124 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
125 }
126
127 @Override
128 public ResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern) throws SQLException {
129 ResultSet resultSet = delegate.getTablePrivileges(catalog, schemaPattern, tableNamePattern);
130 Statement statement = resultSet.getStatement();
131 if (statement != null) {
132 statement = ProxyFactory.getProxyStatement(connection, statement);
133 }
134 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
135 }
136
137 @Override
138 public ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable) throws SQLException {
139 ResultSet resultSet = delegate.getBestRowIdentifier(catalog, schema, table, scope, nullable);
140 Statement statement = resultSet.getStatement();
141 if (statement != null) {
142 statement = ProxyFactory.getProxyStatement(connection, statement);
143 }
144 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
145 }
146
147 @Override
148 public ResultSet getVersionColumns(String catalog, String schema, String table) throws SQLException {
149 ResultSet resultSet = delegate.getVersionColumns(catalog, schema, table);
150 Statement statement = resultSet.getStatement();
151 if (statement != null) {
152 statement = ProxyFactory.getProxyStatement(connection, statement);
153 }
154 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
155 }
156
157 @Override
158 public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException {
159 ResultSet resultSet = delegate.getPrimaryKeys(catalog, schema, table);
160 Statement statement = resultSet.getStatement();
161 if (statement != null) {
162 statement = ProxyFactory.getProxyStatement(connection, statement);
163 }
164 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
165 }
166
167 @Override
168 public ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException {
169 ResultSet resultSet = delegate.getImportedKeys(catalog, schema, table);
170 Statement statement = resultSet.getStatement();
171 if (statement != null) {
172 statement = ProxyFactory.getProxyStatement(connection, statement);
173 }
174 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
175 }
176
177 @Override
178 public ResultSet getExportedKeys(String catalog, String schema, String table) throws SQLException {
179 ResultSet resultSet = delegate.getExportedKeys(catalog, schema, table);
180 Statement statement = resultSet.getStatement();
181 if (statement != null) {
182 statement = ProxyFactory.getProxyStatement(connection, statement);
183 }
184 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
185 }
186
187 @Override
188 public ResultSet getCrossReference(String parentCatalog, String parentSchema, String parentTable, String foreignCatalog, String foreignSchema, String foreignTable) throws SQLException {
189 ResultSet resultSet = delegate.getCrossReference(parentCatalog, parentSchema, parentTable, foreignCatalog, foreignSchema, foreignTable);
190 Statement statement = resultSet.getStatement();
191 if (statement != null) {
192 statement = ProxyFactory.getProxyStatement(connection, statement);
193 }
194 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
195 }
196
197 @Override
198 public ResultSet getTypeInfo() throws SQLException {
199 ResultSet resultSet = delegate.getTypeInfo();
200 Statement statement = resultSet.getStatement();
201 if (statement != null) {
202 statement = ProxyFactory.getProxyStatement(connection, statement);
203 }
204 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
205 }
206
207 @Override
208 public ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) throws SQLException {
209 ResultSet resultSet = delegate.getIndexInfo(catalog, schema, table, unique, approximate);
210 Statement statement = resultSet.getStatement();
211 if (statement != null) {
212 statement = ProxyFactory.getProxyStatement(connection, statement);
213 }
214 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
215 }
216
217 @Override
218 public ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types) throws SQLException {
219 ResultSet resultSet = delegate.getUDTs(catalog, schemaPattern, typeNamePattern, types);
220 Statement statement = resultSet.getStatement();
221 if (statement != null) {
222 statement = ProxyFactory.getProxyStatement(connection, statement);
223 }
224 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
225 }
226
227 @Override
228 public ResultSet getSuperTypes(String catalog, String schemaPattern, String typeNamePattern) throws SQLException {
229 ResultSet resultSet = delegate.getSuperTypes(catalog, schemaPattern, typeNamePattern);
230 Statement statement = resultSet.getStatement();
231 if (statement != null) {
232 statement = ProxyFactory.getProxyStatement(connection, statement);
233 }
234 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
235 }
236
237 @Override
238 public ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException {
239 ResultSet resultSet = delegate.getSuperTables(catalog, schemaPattern, tableNamePattern);
240 Statement statement = resultSet.getStatement();
241 if (statement != null) {
242 statement = ProxyFactory.getProxyStatement(connection, statement);
243 }
244 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
245 }
246
247 @Override
248 public ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern) throws SQLException {
249 ResultSet resultSet = delegate.getAttributes(catalog, schemaPattern, typeNamePattern, attributeNamePattern);
250 Statement statement = resultSet.getStatement();
251 if (statement != null) {
252 statement = ProxyFactory.getProxyStatement(connection, statement);
253 }
254 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
255 }
256
257 @Override
258 public ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException {
259 ResultSet resultSet = delegate.getSchemas(catalog, schemaPattern);
260 Statement statement = resultSet.getStatement();
261 if (statement != null) {
262 statement = ProxyFactory.getProxyStatement(connection, statement);
263 }
264 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
265 }
266
267 @Override
268 public ResultSet getClientInfoProperties() throws SQLException {
269 ResultSet resultSet = delegate.getClientInfoProperties();
270 Statement statement = resultSet.getStatement();
271 if (statement != null) {
272 statement = ProxyFactory.getProxyStatement(connection, statement);
273 }
274 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
275 }
276
277 @Override
278 public ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern) throws SQLException {
279 ResultSet resultSet = delegate.getFunctions(catalog, schemaPattern, functionNamePattern);
280 Statement statement = resultSet.getStatement();
281 if (statement != null) {
282 statement = ProxyFactory.getProxyStatement(connection, statement);
283 }
284 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
285 }
286
287 @Override
288 public ResultSet getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern) throws SQLException {
289 ResultSet resultSet = delegate.getFunctionColumns(catalog, schemaPattern, functionNamePattern, columnNamePattern);
290 Statement statement = resultSet.getStatement();
291 if (statement != null) {
292 statement = ProxyFactory.getProxyStatement(connection, statement);
293 }
294 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
295 }
296
297 @Override
298 public ResultSet getPseudoColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException {
299 ResultSet resultSet = delegate.getPseudoColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);
300 Statement statement = resultSet.getStatement();
301 if (statement != null) {
302 statement = ProxyFactory.getProxyStatement(connection, statement);
303 }
304 return ProxyFactory.getProxyResultSet(connection, (ProxyStatement) statement, resultSet);
305 }
306
307
308 @Override
309 @SuppressWarnings("unchecked")
310 public final <T> T unwrap(Class<T> iface) throws SQLException
311 {
312 if (iface.isInstance(delegate)) {
313 return (T) delegate;
314 }
315 else if (delegate != null) {
316 return delegate.unwrap(iface);
317 }
318
319 throw new SQLException("Wrapped DatabaseMetaData is not an instance of " + iface);
320 }
321 }
322