@Override public boolean isInSameDatabaseInstance(final DataSourceMetaData dataSourceMetaData) { return hostName.equals(dataSourceMetaData.getHostName()) && port == dataSourceMetaData.getPort(); } }
@Override public boolean isInSameDatabaseInstance(final DataSourceMetaData dataSourceMetaData) { return hostName.equals(dataSourceMetaData.getHostName()) && port == dataSourceMetaData.getPort() && schemaName.equals(dataSourceMetaData.getSchemaName()); } }
private boolean isExisted(final String dataSourceName, final Collection<String> existedDataSourceNames) { for (String each : existedDataSourceNames) { if (dataSourceMetaDataMap.get(each).isInSameDatabaseInstance(dataSourceMetaDataMap.get(dataSourceName))) { return true; } } return false; }
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(); }
@Override public boolean isInSameDatabaseInstance(final DataSourceMetaData dataSourceMetaData) { return hostName.equals(dataSourceMetaData.getHostName()) && port == dataSourceMetaData.getPort(); } }
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 boolean isInSameDatabaseInstance(final DataSourceMetaData dataSourceMetaData) { return hostName.equals(dataSourceMetaData.getHostName()) && port == dataSourceMetaData.getPort(); } }
@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 public boolean isInSameDatabaseInstance(final DataSourceMetaData dataSourceMetaData) { return hostName.equals(dataSourceMetaData.getHostName()) && port == dataSourceMetaData.getPort(); } }
@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 SimpleChannelPool newPool(final String dataSourceName) { DataSourceMetaData dataSourceMetaData = logicSchema.getMetaData().getDataSource().getActualDataSourceMetaData(dataSourceName); return new FixedChannelPool( bootstrap.remoteAddress(dataSourceMetaData.getHostName(), dataSourceMetaData.getPort()), new BackendNettyClientChannelPoolHandler(dataSourceName, logicSchema.getName()), maxConnections); } };
@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 SimpleChannelPool newPool(final String dataSourceName) { DataSourceMetaData dataSourceMetaData = logicSchema.getMetaData().getDataSource().getActualDataSourceMetaData(dataSourceName); return new FixedChannelPool( bootstrap.remoteAddress(dataSourceMetaData.getHostName(), dataSourceMetaData.getPort()), new BackendNettyClientChannelPoolHandler(dataSourceName, logicSchema.getName()), maxConnections); } };
@Override public void start(final RouteUnit routeUnit, final DataSourceMetaData dataSourceMetaData, final boolean isTrunkThread, final Map<String, Object> shardingExecuteDataMap) { if (!isTrunkThread) { activeSpan = ((ActiveSpan.Continuation) shardingExecuteDataMap.get(OpenTracingRootInvokeHook.ACTIVE_SPAN_CONTINUATION)).activate(); } span = ShardingTracer.get().buildSpan(OPERATION_NAME) .withTag(Tags.COMPONENT.getKey(), ShardingTags.COMPONENT_NAME) .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT) .withTag(Tags.PEER_HOSTNAME.getKey(), dataSourceMetaData.getHostName()) .withTag(Tags.PEER_PORT.getKey(), dataSourceMetaData.getPort()) .withTag(Tags.DB_TYPE.getKey(), "sql") .withTag(Tags.DB_INSTANCE.getKey(), routeUnit.getDataSourceName()) .withTag(Tags.DB_STATEMENT.getKey(), routeUnit.getSqlUnit().getSql()) .withTag(ShardingTags.DB_BIND_VARIABLES.getKey(), toString(routeUnit.getSqlUnit().getParameterSets())).startManual(); }