Browse Source

change result reference

jiawei 10 years ago
parent
commit
d1afeb7540

+ 7 - 7
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java

@@ -216,20 +216,20 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
             if (tableMetaCache != null
                 && (result.getType() == EventType.ALTER || result.getType() == EventType.ERASE || result.getType() == EventType.RENAME)) {
 
-                for( ;result!=null; result = result.getRenameTableResult()) {
-                    schemaName = event.getDbName();
-                    if (StringUtils.isNotEmpty(result.getSchemaName())) {
-                        schemaName = result.getSchemaName();
+                for(DdlResult renameResult=result ;renameResult!=null; renameResult = renameResult.getRenameTableResult()) {
+                    String schemaName0 = event.getDbName();  //防止 rename语句后产生 schema变更带来影响
+                    if (StringUtils.isNotEmpty(renameResult.getSchemaName())) {
+                        schemaName0 = renameResult.getSchemaName();
                     }
 
-                    tableName = result.getTableName();
+                    tableName = renameResult.getTableName();
 
                     if (StringUtils.isNotEmpty(tableName)) {
                         // 如果解析到了正确的表信息,则根据全名进行清除
-                        tableMetaCache.clearTableMeta(schemaName, tableName);
+                        tableMetaCache.clearTableMeta(schemaName0, tableName);
                     } else {
                         // 如果无法解析正确的表信息,则根据schema进行清除
-                        tableMetaCache.clearTableMetaWithSchemaName(schemaName);
+                        tableMetaCache.clearTableMetaWithSchemaName(schemaName0);
                     }
                 }
             }

+ 3 - 4
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/SimpleDdlParser.java

@@ -299,11 +299,10 @@ public class SimpleDdlParser {
             DdlResult ddlResult = this;
             StringBuffer sb = new StringBuffer();
             do{
-                String.format("DdlResult [schemaName=%s , tableName=%s , oriSchemaName=%s , oriTableName=%s , type=%s ;",
-                        ddlResult.schemaName, ddlResult.tableName, ddlResult.oriSchemaName, ddlResult.oriTableName, ddlResult.type);
+                sb.append(String.format("DdlResult [schemaName=%s , tableName=%s , oriSchemaName=%s , oriTableName=%s , type=%s ];",
+                        ddlResult.schemaName, ddlResult.tableName, ddlResult.oriSchemaName, ddlResult.oriTableName, ddlResult.type));
                 ddlResult = ddlResult.renameTableResult;
-            }while (ddlResult.renameTableResult!=null);
-            sb.append("]");
+            }while (ddlResult!=null);
 
             return sb.toString();
         }