Loading sharding-core/src/main/java/io/shardingsphere/core/metadata/ShardingMetaData.java +2 −2 Original line number Diff line number Diff line Loading @@ -40,8 +40,8 @@ public final class ShardingMetaData { private final ShardingTableMetaData table; public ShardingMetaData(final Map<String, String> dataSourceURLs, final ShardingRule shardingRule, final DatabaseType databaseType, final ShardingExecuteEngine executeEngine, final TableMetaDataConnectionManager connectionManager, final int maxConnectionsSizePerQuery, final boolean isCheckingMetaData) { public ShardingMetaData(final Map<String, String> dataSourceURLs, final ShardingRule shardingRule, final DatabaseType databaseType, final ShardingExecuteEngine executeEngine, final TableMetaDataConnectionManager connectionManager, final int maxConnectionsSizePerQuery, final boolean isCheckingMetaData) { dataSource = new ShardingDataSourceMetaData(dataSourceURLs, shardingRule, databaseType); table = new ShardingTableMetaData(new TableMetaDataInitializer(dataSource, executeEngine, connectionManager, maxConnectionsSizePerQuery, isCheckingMetaData).load(shardingRule)); } Loading sharding-jdbc/sharding-jdbc-core/src/main/java/io/shardingsphere/shardingjdbc/jdbc/core/ShardingContext.java +5 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import lombok.Getter; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.LinkedHashMap; import java.util.Map; Loading @@ -43,6 +44,8 @@ import java.util.Properties; @Getter public final class ShardingContext implements AutoCloseable { private final DatabaseMetaData databaseMetaData; private final ShardingRule shardingRule; private final DatabaseType databaseType; Loading @@ -53,8 +56,9 @@ public final class ShardingContext implements AutoCloseable { private final ShardingMetaData metaData; public ShardingContext(final Map<String, DataSource> dataSourceMap, final ShardingRule shardingRule, public ShardingContext(final DatabaseMetaData databaseMetaData, final Map<String, DataSource> dataSourceMap, final ShardingRule shardingRule, final DatabaseType databaseType, final Properties props) throws SQLException { this.databaseMetaData = databaseMetaData; this.shardingRule = shardingRule; this.databaseType = databaseType; shardingProperties = new ShardingProperties(null == props ? new Properties() : props); Loading sharding-jdbc/sharding-jdbc-core/src/main/java/io/shardingsphere/shardingjdbc/jdbc/core/connection/ShardingConnection.java +2 −13 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package io.shardingsphere.shardingjdbc.jdbc.core.connection; import io.shardingsphere.core.rule.MasterSlaveRule; import io.shardingsphere.shardingjdbc.jdbc.adapter.AbstractConnectionAdapter; import io.shardingsphere.shardingjdbc.jdbc.core.ShardingContext; import io.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement; Loading @@ -31,7 +30,6 @@ import java.sql.DatabaseMetaData; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import java.util.Collection; import java.util.Map; /** Loading Loading @@ -69,17 +67,8 @@ public final class ShardingConnection extends AbstractConnectionAdapter { } @Override public DatabaseMetaData getMetaData() throws SQLException { Collection<MasterSlaveRule> masterSlaveRules = shardingContext.getShardingRule().getMasterSlaveRules(); if (masterSlaveRules.isEmpty()) { return getConnection(dataSourceMap.keySet().iterator().next()).getMetaData(); } for (MasterSlaveRule each : masterSlaveRules) { if (getDataSourceMap().containsKey(each.getMasterDataSourceName())) { return getConnection(each.getMasterDataSourceName()).getMetaData(); } } throw new UnsupportedOperationException(); public DatabaseMetaData getMetaData() { return shardingContext.getDatabaseMetaData(); } @Override Loading sharding-jdbc/sharding-jdbc-core/src/main/java/io/shardingsphere/shardingjdbc/jdbc/core/datasource/MasterSlaveDataSource.java +12 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,8 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.Map; import java.util.Properties; Loading @@ -45,6 +47,8 @@ public class MasterSlaveDataSource extends AbstractDataSourceAdapter { private final MasterSlaveRule masterSlaveRule; private final DatabaseMetaData databaseMetaData; private final ShardingProperties shardingProperties; public MasterSlaveDataSource(final Map<String, DataSource> dataSourceMap, final MasterSlaveRuleConfiguration masterSlaveRuleConfig, Loading @@ -54,6 +58,7 @@ public class MasterSlaveDataSource extends AbstractDataSourceAdapter { ConfigMapContext.getInstance().getConfigMap().putAll(configMap); } this.masterSlaveRule = new MasterSlaveRule(masterSlaveRuleConfig); databaseMetaData = getDatabaseMetaData(dataSourceMap); shardingProperties = new ShardingProperties(null == props ? new Properties() : props); } Loading @@ -63,9 +68,16 @@ public class MasterSlaveDataSource extends AbstractDataSourceAdapter { ConfigMapContext.getInstance().getConfigMap().putAll(configMap); } this.masterSlaveRule = masterSlaveRule; databaseMetaData = getDatabaseMetaData(dataSourceMap); shardingProperties = new ShardingProperties(null == props ? new Properties() : props); } private DatabaseMetaData getDatabaseMetaData(final Map<String, DataSource> dataSourceMap) throws SQLException { try (Connection connection = dataSourceMap.get(masterSlaveRule.getMasterDataSourceName()).getConnection()) { return connection.getMetaData(); } } @Override public final MasterSlaveConnection getConnection() { return new MasterSlaveConnection(this, getShardingTransactionalDataSources().getDataSourceMap(), TransactionTypeHolder.get()); Loading sharding-jdbc/sharding-jdbc-core/src/main/java/io/shardingsphere/shardingjdbc/jdbc/core/datasource/ShardingDataSource.java +23 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package io.shardingsphere.shardingjdbc.jdbc.core.datasource; import com.google.common.base.Preconditions; import io.shardingsphere.api.ConfigMapContext; import io.shardingsphere.core.rule.MasterSlaveRule; import io.shardingsphere.core.rule.ShardingRule; import io.shardingsphere.shardingjdbc.jdbc.adapter.AbstractDataSourceAdapter; import io.shardingsphere.shardingjdbc.jdbc.core.ShardingContext; Loading @@ -28,7 +29,10 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.Collection; import java.util.Map; import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; Loading Loading @@ -56,7 +60,8 @@ public class ShardingDataSource extends AbstractDataSourceAdapter { if (!configMap.isEmpty()) { ConfigMapContext.getInstance().getConfigMap().putAll(configMap); } shardingContext = new ShardingContext(getDataSourceMap(), shardingRule, getDatabaseType(), props); Map<String, DataSource> originalDataSourceMap = getDataSourceMap(); shardingContext = new ShardingContext(getDatabaseMetaData(originalDataSourceMap, shardingRule), originalDataSourceMap, shardingRule, getDatabaseType(), props); } private void checkDataSourceType(final Map<String, DataSource> dataSourceMap) { Loading @@ -65,6 +70,23 @@ public class ShardingDataSource extends AbstractDataSourceAdapter { } } private DatabaseMetaData getDatabaseMetaData(final Map<String, DataSource> dataSourceMap, final ShardingRule shardingRule) throws SQLException { Collection<MasterSlaveRule> masterSlaveRules = shardingRule.getMasterSlaveRules(); if (masterSlaveRules.isEmpty()) { try (Connection connection = dataSourceMap.values().iterator().next().getConnection()) { return connection.getMetaData(); } } for (MasterSlaveRule each : masterSlaveRules) { if (getDataSourceMap().containsKey(each.getMasterDataSourceName())) { try (Connection connection = dataSourceMap.get(each.getMasterDataSourceName()).getConnection()) { return connection.getMetaData(); } } } throw new UnsupportedOperationException(); } @Override public final ShardingConnection getConnection() { return new ShardingConnection(getShardingTransactionalDataSources().getDataSourceMap(), shardingContext, TransactionTypeHolder.get()); Loading Loading
sharding-core/src/main/java/io/shardingsphere/core/metadata/ShardingMetaData.java +2 −2 Original line number Diff line number Diff line Loading @@ -40,8 +40,8 @@ public final class ShardingMetaData { private final ShardingTableMetaData table; public ShardingMetaData(final Map<String, String> dataSourceURLs, final ShardingRule shardingRule, final DatabaseType databaseType, final ShardingExecuteEngine executeEngine, final TableMetaDataConnectionManager connectionManager, final int maxConnectionsSizePerQuery, final boolean isCheckingMetaData) { public ShardingMetaData(final Map<String, String> dataSourceURLs, final ShardingRule shardingRule, final DatabaseType databaseType, final ShardingExecuteEngine executeEngine, final TableMetaDataConnectionManager connectionManager, final int maxConnectionsSizePerQuery, final boolean isCheckingMetaData) { dataSource = new ShardingDataSourceMetaData(dataSourceURLs, shardingRule, databaseType); table = new ShardingTableMetaData(new TableMetaDataInitializer(dataSource, executeEngine, connectionManager, maxConnectionsSizePerQuery, isCheckingMetaData).load(shardingRule)); } Loading
sharding-jdbc/sharding-jdbc-core/src/main/java/io/shardingsphere/shardingjdbc/jdbc/core/ShardingContext.java +5 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import lombok.Getter; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.LinkedHashMap; import java.util.Map; Loading @@ -43,6 +44,8 @@ import java.util.Properties; @Getter public final class ShardingContext implements AutoCloseable { private final DatabaseMetaData databaseMetaData; private final ShardingRule shardingRule; private final DatabaseType databaseType; Loading @@ -53,8 +56,9 @@ public final class ShardingContext implements AutoCloseable { private final ShardingMetaData metaData; public ShardingContext(final Map<String, DataSource> dataSourceMap, final ShardingRule shardingRule, public ShardingContext(final DatabaseMetaData databaseMetaData, final Map<String, DataSource> dataSourceMap, final ShardingRule shardingRule, final DatabaseType databaseType, final Properties props) throws SQLException { this.databaseMetaData = databaseMetaData; this.shardingRule = shardingRule; this.databaseType = databaseType; shardingProperties = new ShardingProperties(null == props ? new Properties() : props); Loading
sharding-jdbc/sharding-jdbc-core/src/main/java/io/shardingsphere/shardingjdbc/jdbc/core/connection/ShardingConnection.java +2 −13 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package io.shardingsphere.shardingjdbc.jdbc.core.connection; import io.shardingsphere.core.rule.MasterSlaveRule; import io.shardingsphere.shardingjdbc.jdbc.adapter.AbstractConnectionAdapter; import io.shardingsphere.shardingjdbc.jdbc.core.ShardingContext; import io.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement; Loading @@ -31,7 +30,6 @@ import java.sql.DatabaseMetaData; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import java.util.Collection; import java.util.Map; /** Loading Loading @@ -69,17 +67,8 @@ public final class ShardingConnection extends AbstractConnectionAdapter { } @Override public DatabaseMetaData getMetaData() throws SQLException { Collection<MasterSlaveRule> masterSlaveRules = shardingContext.getShardingRule().getMasterSlaveRules(); if (masterSlaveRules.isEmpty()) { return getConnection(dataSourceMap.keySet().iterator().next()).getMetaData(); } for (MasterSlaveRule each : masterSlaveRules) { if (getDataSourceMap().containsKey(each.getMasterDataSourceName())) { return getConnection(each.getMasterDataSourceName()).getMetaData(); } } throw new UnsupportedOperationException(); public DatabaseMetaData getMetaData() { return shardingContext.getDatabaseMetaData(); } @Override Loading
sharding-jdbc/sharding-jdbc-core/src/main/java/io/shardingsphere/shardingjdbc/jdbc/core/datasource/MasterSlaveDataSource.java +12 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,8 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.Map; import java.util.Properties; Loading @@ -45,6 +47,8 @@ public class MasterSlaveDataSource extends AbstractDataSourceAdapter { private final MasterSlaveRule masterSlaveRule; private final DatabaseMetaData databaseMetaData; private final ShardingProperties shardingProperties; public MasterSlaveDataSource(final Map<String, DataSource> dataSourceMap, final MasterSlaveRuleConfiguration masterSlaveRuleConfig, Loading @@ -54,6 +58,7 @@ public class MasterSlaveDataSource extends AbstractDataSourceAdapter { ConfigMapContext.getInstance().getConfigMap().putAll(configMap); } this.masterSlaveRule = new MasterSlaveRule(masterSlaveRuleConfig); databaseMetaData = getDatabaseMetaData(dataSourceMap); shardingProperties = new ShardingProperties(null == props ? new Properties() : props); } Loading @@ -63,9 +68,16 @@ public class MasterSlaveDataSource extends AbstractDataSourceAdapter { ConfigMapContext.getInstance().getConfigMap().putAll(configMap); } this.masterSlaveRule = masterSlaveRule; databaseMetaData = getDatabaseMetaData(dataSourceMap); shardingProperties = new ShardingProperties(null == props ? new Properties() : props); } private DatabaseMetaData getDatabaseMetaData(final Map<String, DataSource> dataSourceMap) throws SQLException { try (Connection connection = dataSourceMap.get(masterSlaveRule.getMasterDataSourceName()).getConnection()) { return connection.getMetaData(); } } @Override public final MasterSlaveConnection getConnection() { return new MasterSlaveConnection(this, getShardingTransactionalDataSources().getDataSourceMap(), TransactionTypeHolder.get()); Loading
sharding-jdbc/sharding-jdbc-core/src/main/java/io/shardingsphere/shardingjdbc/jdbc/core/datasource/ShardingDataSource.java +23 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package io.shardingsphere.shardingjdbc.jdbc.core.datasource; import com.google.common.base.Preconditions; import io.shardingsphere.api.ConfigMapContext; import io.shardingsphere.core.rule.MasterSlaveRule; import io.shardingsphere.core.rule.ShardingRule; import io.shardingsphere.shardingjdbc.jdbc.adapter.AbstractDataSourceAdapter; import io.shardingsphere.shardingjdbc.jdbc.core.ShardingContext; Loading @@ -28,7 +29,10 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.Collection; import java.util.Map; import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; Loading Loading @@ -56,7 +60,8 @@ public class ShardingDataSource extends AbstractDataSourceAdapter { if (!configMap.isEmpty()) { ConfigMapContext.getInstance().getConfigMap().putAll(configMap); } shardingContext = new ShardingContext(getDataSourceMap(), shardingRule, getDatabaseType(), props); Map<String, DataSource> originalDataSourceMap = getDataSourceMap(); shardingContext = new ShardingContext(getDatabaseMetaData(originalDataSourceMap, shardingRule), originalDataSourceMap, shardingRule, getDatabaseType(), props); } private void checkDataSourceType(final Map<String, DataSource> dataSourceMap) { Loading @@ -65,6 +70,23 @@ public class ShardingDataSource extends AbstractDataSourceAdapter { } } private DatabaseMetaData getDatabaseMetaData(final Map<String, DataSource> dataSourceMap, final ShardingRule shardingRule) throws SQLException { Collection<MasterSlaveRule> masterSlaveRules = shardingRule.getMasterSlaveRules(); if (masterSlaveRules.isEmpty()) { try (Connection connection = dataSourceMap.values().iterator().next().getConnection()) { return connection.getMetaData(); } } for (MasterSlaveRule each : masterSlaveRules) { if (getDataSourceMap().containsKey(each.getMasterDataSourceName())) { try (Connection connection = dataSourceMap.get(each.getMasterDataSourceName()).getConnection()) { return connection.getMetaData(); } } } throw new UnsupportedOperationException(); } @Override public final ShardingConnection getConnection() { return new ShardingConnection(getShardingTransactionalDataSources().getDataSourceMap(), shardingContext, TransactionTypeHolder.get()); Loading