View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.shardingsphere.infra.database.core.metadata.data.loader;
19  
20  import org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
21  import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
22  import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
23  
24  import java.sql.Array;
25  import java.sql.Blob;
26  import java.sql.CallableStatement;
27  import java.sql.Clob;
28  import java.sql.Connection;
29  import java.sql.DatabaseMetaData;
30  import java.sql.NClob;
31  import java.sql.PreparedStatement;
32  import java.sql.SQLClientInfoException;
33  import java.sql.SQLException;
34  import java.sql.SQLWarning;
35  import java.sql.SQLXML;
36  import java.sql.Savepoint;
37  import java.sql.Statement;
38  import java.sql.Struct;
39  import java.util.Map;
40  import java.util.Properties;
41  import java.util.concurrent.Executor;
42  
43  /**
44   * Meta data loader connection.
45   */
46  public final class MetaDataLoaderConnection implements Connection {
47      
48      private final Connection connection;
49      
50      private final DialectDatabaseMetaData dialectDatabaseMetaData;
51      
52      public MetaDataLoaderConnection(final DatabaseType databaseType, final Connection connection) {
53          this.connection = connection;
54          dialectDatabaseMetaData = new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
55      }
56      
57      @SuppressWarnings("ReturnOfNull")
58      @Override
59      public String getCatalog() {
60          try {
61              return connection.getCatalog();
62          } catch (final SQLException ignored) {
63              return null;
64          }
65      }
66      
67      @Override
68      public void setCatalog(final String catalog) throws SQLException {
69          connection.setCatalog(catalog);
70      }
71      
72      @Override
73      public String getSchema() {
74          return dialectDatabaseMetaData.getSchema(connection);
75      }
76      
77      @Override
78      public void setSchema(final String schema) throws SQLException {
79          connection.setSchema(schema);
80      }
81      
82      @Override
83      public Statement createStatement() throws SQLException {
84          return connection.createStatement();
85      }
86      
87      @Override
88      public Statement createStatement(final int resultSetType, final int resultSetConcurrency) throws SQLException {
89          return connection.createStatement(resultSetType, resultSetConcurrency);
90      }
91      
92      @Override
93      public Statement createStatement(final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability) throws SQLException {
94          return connection.createStatement(resultSetType, resultSetConcurrency, resultSetHoldability);
95      }
96      
97      @Override
98      public PreparedStatement prepareStatement(final String sql) throws SQLException {
99          return connection.prepareStatement(sql);
100     }
101     
102     @Override
103     public PreparedStatement prepareStatement(final String sql, final int resultSetType, final int resultSetConcurrency) throws SQLException {
104         return connection.prepareStatement(sql, resultSetType, resultSetConcurrency);
105     }
106     
107     @Override
108     public PreparedStatement prepareStatement(final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability) throws SQLException {
109         return connection.prepareStatement(sql, resultSetType, resultSetConcurrency, resultSetHoldability);
110     }
111     
112     @Override
113     public PreparedStatement prepareStatement(final String sql, final int autoGeneratedKeys) throws SQLException {
114         return connection.prepareStatement(sql, autoGeneratedKeys);
115     }
116     
117     @Override
118     public PreparedStatement prepareStatement(final String sql, final int[] columnIndexes) throws SQLException {
119         return connection.prepareStatement(sql, columnIndexes);
120     }
121     
122     @Override
123     public PreparedStatement prepareStatement(final String sql, final String[] columnNames) throws SQLException {
124         return connection.prepareStatement(sql, columnNames);
125     }
126     
127     @Override
128     public CallableStatement prepareCall(final String sql) throws SQLException {
129         return connection.prepareCall(sql);
130     }
131     
132     @Override
133     public CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency) throws SQLException {
134         return connection.prepareCall(sql, resultSetType, resultSetConcurrency);
135     }
136     
137     @Override
138     public CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability) throws SQLException {
139         return connection.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability);
140     }
141     
142     @Override
143     public String nativeSQL(final String sql) throws SQLException {
144         return connection.nativeSQL(sql);
145     }
146     
147     @Override
148     public void setAutoCommit(final boolean autoCommit) throws SQLException {
149         connection.setAutoCommit(autoCommit);
150     }
151     
152     @Override
153     public boolean getAutoCommit() throws SQLException {
154         return connection.getAutoCommit();
155     }
156     
157     @Override
158     public void commit() throws SQLException {
159         connection.commit();
160     }
161     
162     @Override
163     public void close() throws SQLException {
164         connection.close();
165     }
166     
167     @Override
168     public boolean isClosed() throws SQLException {
169         return connection.isClosed();
170     }
171     
172     @Override
173     public DatabaseMetaData getMetaData() throws SQLException {
174         return connection.getMetaData();
175     }
176     
177     @Override
178     public void setReadOnly(final boolean readOnly) throws SQLException {
179         connection.setReadOnly(readOnly);
180     }
181     
182     @Override
183     public boolean isReadOnly() throws SQLException {
184         return connection.isReadOnly();
185     }
186     
187     @Override
188     public void setTransactionIsolation(final int level) throws SQLException {
189         connection.setTransactionIsolation(level);
190     }
191     
192     @Override
193     public int getTransactionIsolation() throws SQLException {
194         return connection.getTransactionIsolation();
195     }
196     
197     @Override
198     public SQLWarning getWarnings() throws SQLException {
199         return connection.getWarnings();
200     }
201     
202     @Override
203     public void clearWarnings() throws SQLException {
204         connection.clearWarnings();
205     }
206     
207     @Override
208     public Map<String, Class<?>> getTypeMap() throws SQLException {
209         return connection.getTypeMap();
210     }
211     
212     @Override
213     public void setTypeMap(final Map<String, Class<?>> map) throws SQLException {
214         connection.setTypeMap(map);
215     }
216     
217     @Override
218     public void setHoldability(final int holdability) throws SQLException {
219         connection.setHoldability(holdability);
220     }
221     
222     @Override
223     public int getHoldability() throws SQLException {
224         return connection.getHoldability();
225     }
226     
227     @Override
228     public Savepoint setSavepoint() throws SQLException {
229         return connection.setSavepoint();
230     }
231     
232     @Override
233     public Savepoint setSavepoint(final String name) throws SQLException {
234         return connection.setSavepoint(name);
235     }
236     
237     @Override
238     public void rollback() throws SQLException {
239         connection.rollback();
240     }
241     
242     @Override
243     public void rollback(final Savepoint savepoint) throws SQLException {
244         connection.rollback(savepoint);
245     }
246     
247     @Override
248     public void releaseSavepoint(final Savepoint savepoint) throws SQLException {
249         connection.releaseSavepoint(savepoint);
250     }
251     
252     @Override
253     public Clob createClob() throws SQLException {
254         return connection.createClob();
255     }
256     
257     @Override
258     public Blob createBlob() throws SQLException {
259         return connection.createBlob();
260     }
261     
262     @Override
263     public NClob createNClob() throws SQLException {
264         return connection.createNClob();
265     }
266     
267     @Override
268     public SQLXML createSQLXML() throws SQLException {
269         return connection.createSQLXML();
270     }
271     
272     @Override
273     public boolean isValid(final int timeout) throws SQLException {
274         return connection.isValid(timeout);
275     }
276     
277     @Override
278     public void setClientInfo(final String name, final String value) throws SQLClientInfoException {
279         connection.setClientInfo(name, value);
280     }
281     
282     @Override
283     public void setClientInfo(final Properties props) throws SQLClientInfoException {
284         connection.setClientInfo(props);
285     }
286     
287     @Override
288     public String getClientInfo(final String name) throws SQLException {
289         return connection.getClientInfo(name);
290     }
291     
292     @Override
293     public Properties getClientInfo() throws SQLException {
294         return connection.getClientInfo();
295     }
296     
297     @Override
298     public Array createArrayOf(final String typeName, final Object[] elements) throws SQLException {
299         return connection.createArrayOf(typeName, elements);
300     }
301     
302     @Override
303     public Struct createStruct(final String typeName, final Object[] attributes) throws SQLException {
304         return connection.createStruct(typeName, attributes);
305     }
306     
307     @Override
308     public void abort(final Executor executor) throws SQLException {
309         connection.abort(executor);
310     }
311     
312     @Override
313     public void setNetworkTimeout(final Executor executor, final int milliseconds) throws SQLException {
314         connection.setNetworkTimeout(executor, milliseconds);
315     }
316     
317     @Override
318     public int getNetworkTimeout() throws SQLException {
319         return connection.getNetworkTimeout();
320     }
321     
322     @Override
323     public <T> T unwrap(final Class<T> iface) throws SQLException {
324         return connection.unwrap(iface);
325     }
326     
327     @Override
328     public boolean isWrapperFor(final Class<?> iface) throws SQLException {
329         return connection.isWrapperFor(iface);
330     }
331 }