@Override public boolean isInSameDatabaseInstance(final DataSourceMetaData dataSourceMetaData) { return hostName.equals(dataSourceMetaData.getHostName()) && port == dataSourceMetaData.getPort() && schemaName.equals(dataSourceMetaData.getSchemaName()); } }
private Collection<String> getAllTableNames(final String dataSourceName) throws SQLException { Collection<String> result = new LinkedHashSet<>(); DataSourceMetaData dataSourceMetaData = shardingDataSourceMetaData.getActualDataSourceMetaData(dataSourceName); String catalog = null == dataSourceMetaData ? null : dataSourceMetaData.getSchemaName(); try (Connection connection = connectionManager.getConnection(dataSourceName); ResultSet resultSet = connection.getMetaData().getTables(catalog, null, null, new String[]{"TABLE"})) { while (resultSet.next()) { String tableName = resultSet.getString("TABLE_NAME"); if (!tableName.contains("$") && !tableName.contains("/")) { result.add(tableName); } } } return result; } }
/** * Convert to SQL unit. * * @param masterSlaveRule master slave rule * @param shardingDataSourceMetaData sharding data source meta data * @return SQL */ public String toSQL(final MasterSlaveRule masterSlaveRule, final ShardingDataSourceMetaData shardingDataSourceMetaData) { StringBuilder result = new StringBuilder(); for (Object each : segments) { if (each instanceof SchemaPlaceholder) { result.append(shardingDataSourceMetaData.getActualDataSourceMetaData(masterSlaveRule.getMasterDataSourceName()).getSchemaName()); } else { result.append(each); } } return result.toString(); }
private void appendSchemaPlaceholder(final ShardingRule shardingRule, final ShardingDataSourceMetaData shardingDataSourceMetaData, final String actualTableName, final StringBuilder stringBuilder) { stringBuilder.append(shardingDataSourceMetaData.getActualDataSourceMetaData(shardingRule.getActualDataSourceName(actualTableName)).getSchemaName()); }
@Override public Collection<TableMetaData> execute(final Collection<DataNode> dataNodes, final boolean isTrunkThread, final Map<String, Object> shardingExecuteDataMap) throws SQLException { String dataSourceName = dataNodes.iterator().next().getDataSourceName(); DataSourceMetaData dataSourceMetaData = shardingDataSourceMetaData.getActualDataSourceMetaData(dataSourceName); String catalog = null == dataSourceMetaData ? null : dataSourceMetaData.getSchemaName(); return load(shardingDataSourceNames.getRawMasterDataSourceName(dataSourceName), catalog, dataNodes); } });
@Override protected void auth(final ChannelHandlerContext context, final ByteBuf byteBuf) { try (MySQLPacketPayload payload = new MySQLPacketPayload(byteBuf)) { HandshakePacket handshakePacket = new HandshakePacket(payload); byte[] authResponse = securePasswordAuthentication( (null == dataSourceParameter.getPassword() ? "" : dataSourceParameter.getPassword()).getBytes(), handshakePacket.getAuthPluginData().getAuthPluginData()); HandshakeResponse41Packet handshakeResponse41Packet = new HandshakeResponse41Packet( handshakePacket.getSequenceId() + 1, CapabilityFlag.calculateHandshakeCapabilityFlagsLower(), 16777215, ServerInfo.CHARSET, dataSourceParameter.getUsername(), authResponse, dataSourceMetaData.getSchemaName()); ChannelRegistry.getInstance().putConnectionId(context.channel().id().asShortText(), handshakePacket.getConnectionId()); context.writeAndFlush(handshakeResponse41Packet); } }
@Override protected void auth(final ChannelHandlerContext context, final ByteBuf byteBuf) { try (MySQLPacketPayload payload = new MySQLPacketPayload(byteBuf)) { HandshakePacket handshakePacket = new HandshakePacket(payload); byte[] authResponse = securePasswordAuthentication( (null == dataSourceParameter.getPassword() ? "" : dataSourceParameter.getPassword()).getBytes(), handshakePacket.getAuthPluginData().getAuthPluginData()); HandshakeResponse41Packet handshakeResponse41Packet = new HandshakeResponse41Packet( handshakePacket.getSequenceId() + 1, CapabilityFlag.calculateHandshakeCapabilityFlagsLower(), 16777215, ServerInfo.CHARSET, dataSourceParameter.getUsername(), authResponse, dataSourceMetaData.getSchemaName()); ChannelRegistry.getInstance().putConnectionId(context.channel().id().asShortText(), handshakePacket.getConnectionId()); context.writeAndFlush(handshakeResponse41Packet); } }