ソースを参照

兼容oracle ddl同步

life 1 年間 前
コミット
c1592c6212

+ 8 - 0
dbsyncer-connector/dbsyncer-connector-oracle/src/main/java/org/dbsyncer/connector/oracle/cdc/OracleListener.java

@@ -9,6 +9,7 @@ import net.sf.jsqlparser.JSQLParserException;
 import net.sf.jsqlparser.parser.CCJSqlParserUtil;
 import net.sf.jsqlparser.schema.Table;
 import net.sf.jsqlparser.statement.Statement;
+import net.sf.jsqlparser.statement.alter.Alter;
 import net.sf.jsqlparser.statement.delete.Delete;
 import net.sf.jsqlparser.statement.insert.Insert;
 import net.sf.jsqlparser.statement.update.Update;
@@ -24,6 +25,7 @@ import org.dbsyncer.connector.oracle.logminer.parser.impl.UpdateSql;
 import org.dbsyncer.sdk.config.DatabaseConfig;
 import org.dbsyncer.sdk.constant.ConnectorConstant;
 import org.dbsyncer.sdk.listener.AbstractDatabaseListener;
+import org.dbsyncer.sdk.listener.event.DDLChangedEvent;
 import org.dbsyncer.sdk.listener.event.RowChangedEvent;
 import org.dbsyncer.sdk.model.ChangedOffset;
 import org.dbsyncer.sdk.model.Field;
@@ -140,6 +142,12 @@ public class OracleListener extends AbstractDatabaseListener {
         }
 
         // TODO ddl
+        if (statement instanceof Alter){
+            Alter alter = (Alter) statement;
+            String tableName = StringUtil.replace(alter.getTable().getName(), StringUtil.DOUBLE_QUOTATION, "");
+            logger.info("sql:{}", event.getRedoSql());
+            changeEvent(new DDLChangedEvent(null, tableName, ConnectorConstant.OPERTION_ALTER, event.getRedoSql(), null, event.getScn()));
+        }
     }
 
     @Override

+ 1 - 0
dbsyncer-parser/src/main/java/org/dbsyncer/parser/ddl/alter/AddStrategy.java

@@ -61,6 +61,7 @@ public class AddStrategy implements AlterStrategy {
             columnDataType.setColumnSpecs(columnSpecs);
             String columName = columnDataType.getColumnName();
             columName = StringUtil.replace(columName, "`", "");
+            columName = StringUtil.replace(columName, StringUtil.DOUBLE_QUOTATION, "");
             Field field = new Field(columName, columnDataType.getColDataType().getDataType(),
                     0);//感觉不需要都行,只需要名称,后续可以自己刷新
             ddlConfig.getAddFields().add(field);

+ 2 - 2
dbsyncer-parser/src/main/java/org/dbsyncer/parser/flush/impl/GeneralBufferActuator.java

@@ -198,7 +198,7 @@ public class GeneralBufferActuator extends AbstractBufferActuator<WriterRequest,
             String sConnType = sConnConfig.getConnectorType();
             String tConnType = tConnConfig.getConnectorType();
             // 0.生成目标表执行SQL(暂支持MySQL) fixme AE86 暂内测MySQL作为试运行版本
-            if (StringUtil.equals(sConnType, tConnType) && StringUtil.equals("MySQL", tConnType)) {
+            if (StringUtil.equals(sConnType, tConnType)) {
                 // 1.转换为目标SQL,执行到目标库
                 String targetTableName = tableGroup.getTargetTable().getName();
                 List<FieldMapping> originalFieldMappings = tableGroup.getFieldMapping();
@@ -233,7 +233,7 @@ public class GeneralBufferActuator extends AbstractBufferActuator<WriterRequest,
             logger.error(e.getMessage(), e);
             return;
         }
-        logger.warn("暂只支持MYSQL解析DDL");
+        logger.warn("暂只支持数据库同源并且是关系性解析DDL");
     }
 
     /**