1515import java .util .concurrent .Future ;
1616import java .util .function .Function ;
1717
18- import javax .sql .DataSource ;
19-
2018import org .apache .commons .lang .StringUtils ;
2119import org .slf4j .Logger ;
2220import org .slf4j .LoggerFactory ;
2321
22+ import com .alibaba .druid .pool .DruidDataSource ;
2423import com .alibaba .fastjson .JSON ;
2524import com .alibaba .fastjson .serializer .SerializerFeature ;
2625import com .alibaba .otter .canal .client .adapter .rdb .config .MappingConfig ;
@@ -41,6 +40,7 @@ public class RdbSyncService {
4140
4241 private static final Logger logger = LoggerFactory .getLogger (RdbSyncService .class );
4342
43+ private DruidDataSource dataSource ;
4444 // 源库表字段类型缓存: instance.schema.table -> <columnName, jdbcType>
4545 private Map <String , Map <String , Integer >> columnsTypeCache ;
4646
@@ -59,13 +59,14 @@ public Map<String, Map<String, Integer>> getColumnsTypeCache() {
5959 return columnsTypeCache ;
6060 }
6161
62- public RdbSyncService (DataSource dataSource , Integer threads , boolean skipDupException ){
62+ public RdbSyncService (DruidDataSource dataSource , Integer threads , boolean skipDupException ){
6363 this (dataSource , threads , new ConcurrentHashMap <>(), skipDupException );
6464 }
6565
6666 @ SuppressWarnings ("unchecked" )
67- public RdbSyncService (DataSource dataSource , Integer threads , Map <String , Map <String , Integer >> columnsTypeCache ,
67+ public RdbSyncService (DruidDataSource dataSource , Integer threads , Map <String , Map <String , Integer >> columnsTypeCache ,
6868 boolean skipDupException ){
69+ this .dataSource = dataSource ;
6970 this .columnsTypeCache = columnsTypeCache ;
7071 this .skipDupException = skipDupException ;
7172 try {
@@ -241,13 +242,11 @@ private void insert(BatchExecutor batchExecutor, MappingConfig config, SingleDml
241242 }
242243
243244 DbMapping dbMapping = config .getDbMapping ();
244- String dbTypeName = dbMapping .getDbType ();
245- String backtick = SyncUtil .getBacktickByDbType (dbTypeName );
246-
245+ String backtick = SyncUtil .getBacktickByDbType (dataSource .getDbType ());
247246 Map <String , String > columnsMap = SyncUtil .getColumnsMap (dbMapping , data );
248247
249248 StringBuilder insertSql = new StringBuilder ();
250- insertSql .append ("INSERT INTO " ).append (SyncUtil .getDbTableName (dbMapping )).append (" (" );
249+ insertSql .append ("INSERT INTO " ).append (SyncUtil .getDbTableName (dbMapping , dataSource . getDbType () )).append (" (" );
251250
252251 columnsMap .forEach ((targetColumnName , srcColumnName ) -> insertSql .append (backtick )
253252 .append (targetColumnName )
@@ -315,15 +314,13 @@ private void update(BatchExecutor batchExecutor, MappingConfig config, SingleDml
315314 }
316315
317316 DbMapping dbMapping = config .getDbMapping ();
318- String dbTypeName = dbMapping .getDbType ();
319- String backtick = SyncUtil .getBacktickByDbType (dbTypeName );
320-
317+ String backtick = SyncUtil .getBacktickByDbType (dataSource .getDbType ());
321318 Map <String , String > columnsMap = SyncUtil .getColumnsMap (dbMapping , data );
322319
323320 Map <String , Integer > ctype = getTargetColumnType (batchExecutor .getConn (), config );
324321
325322 StringBuilder updateSql = new StringBuilder ();
326- updateSql .append ("UPDATE " ).append (SyncUtil .getDbTableName (dbMapping )).append (" SET " );
323+ updateSql .append ("UPDATE " ).append (SyncUtil .getDbTableName (dbMapping , dataSource . getDbType () )).append (" SET " );
327324 List <Map <String , ?>> values = new ArrayList <>();
328325 boolean hasMatched = false ;
329326 for (String srcColumnName : old .keySet ()) {
@@ -373,11 +370,10 @@ private void delete(BatchExecutor batchExecutor, MappingConfig config, SingleDml
373370 }
374371
375372 DbMapping dbMapping = config .getDbMapping ();
376-
377373 Map <String , Integer > ctype = getTargetColumnType (batchExecutor .getConn (), config );
378374
379375 StringBuilder sql = new StringBuilder ();
380- sql .append ("DELETE FROM " ).append (SyncUtil .getDbTableName (dbMapping )).append (" WHERE " );
376+ sql .append ("DELETE FROM " ).append (SyncUtil .getDbTableName (dbMapping , dataSource . getDbType () )).append (" WHERE " );
381377
382378 List <Map <String , ?>> values = new ArrayList <>();
383379 // 拼接主键
@@ -396,7 +392,7 @@ private void delete(BatchExecutor batchExecutor, MappingConfig config, SingleDml
396392 private void truncate (BatchExecutor batchExecutor , MappingConfig config ) throws SQLException {
397393 DbMapping dbMapping = config .getDbMapping ();
398394 StringBuilder sql = new StringBuilder ();
399- sql .append ("TRUNCATE TABLE " ).append (SyncUtil .getDbTableName (dbMapping ));
395+ sql .append ("TRUNCATE TABLE " ).append (SyncUtil .getDbTableName (dbMapping , dataSource . getDbType () ));
400396 batchExecutor .execute (sql .toString (), new ArrayList <>());
401397 if (logger .isTraceEnabled ()) {
402398 logger .trace ("Truncate target table, sql: {}" , sql );
@@ -420,7 +416,7 @@ private Map<String, Integer> getTargetColumnType(Connection conn, MappingConfig
420416 if (columnType == null ) {
421417 columnType = new LinkedHashMap <>();
422418 final Map <String , Integer > columnTypeTmp = columnType ;
423- String sql = "SELECT * FROM " + SyncUtil .getDbTableName (dbMapping ) + " WHERE 1=2" ;
419+ String sql = "SELECT * FROM " + SyncUtil .getDbTableName (dbMapping , dataSource . getDbType () ) + " WHERE 1=2" ;
424420 Util .sqlRS (conn , sql , rs -> {
425421 try {
426422 ResultSetMetaData rsd = rs .getMetaData ();
@@ -449,8 +445,7 @@ private void appendCondition(MappingConfig.DbMapping dbMapping, StringBuilder sq
449445
450446 private void appendCondition (MappingConfig .DbMapping dbMapping , StringBuilder sql , Map <String , Integer > ctype ,
451447 List <Map <String , ?>> values , Map <String , Object > d , Map <String , Object > o ) {
452- String dbTypeName = dbMapping .getDbType ();
453- String backtick = SyncUtil .getBacktickByDbType (dbTypeName );
448+ String backtick = SyncUtil .getBacktickByDbType (dataSource .getDbType ());
454449
455450 // 拼接主键
456451 for (Map .Entry <String , String > entry : dbMapping .getTargetPk ().entrySet ()) {
0 commit comments