|
@@ -3,8 +3,11 @@ package org.dbsyncer.parser.ddl.impl;
|
|
|
import java.util.List;
|
|
|
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.alter.AlterExpression;
|
|
|
+import net.sf.jsqlparser.statement.alter.AlterOperation;
|
|
|
import org.dbsyncer.connector.config.DDLConfig;
|
|
|
import org.dbsyncer.parser.ddl.DDLParser;
|
|
|
import org.dbsyncer.parser.model.FieldMapping;
|
|
@@ -12,6 +15,12 @@ import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
+/**
|
|
|
+ * alter情况:<br>
|
|
|
+ * 情况1:只是修改字段的属性值<br>
|
|
|
+ * 情况2:修改字段的名称
|
|
|
+ *
|
|
|
+ */
|
|
|
@Component
|
|
|
public class DDLParserImpl implements DDLParser {
|
|
|
|
|
@@ -23,20 +32,31 @@ public class DDLParserImpl implements DDLParser {
|
|
|
DDLConfig ddlConfig = new DDLConfig();
|
|
|
// TODO life 替换为目标库执行SQL
|
|
|
try {
|
|
|
- Alter alter = (Alter) CCJSqlParserUtil.parse(sql);
|
|
|
- for (AlterExpression alterExpression:alter.getAlterExpressions()) {
|
|
|
- for (AlterExpression.ColumnDataType columnDataType:alterExpression.getColDataTypeList()) {
|
|
|
- String columName = columnDataType.getColumnName();
|
|
|
- columName = columName.replaceAll("`","");
|
|
|
- for (FieldMapping fieldMapping :fieldMappingList) {
|
|
|
- if (fieldMapping.getSource().getName().equals(columName)){
|
|
|
- columnDataType.setColumnName(fieldMapping.getTarget().getName());
|
|
|
- break;
|
|
|
+ Statement statement = CCJSqlParserUtil.parse(sql);
|
|
|
+ if (statement instanceof Alter){ //alter语句
|
|
|
+ Alter alter = (Alter) statement;
|
|
|
+ //先替换成目标表名
|
|
|
+ alter.setTable(new Table(targetTableName));
|
|
|
+ for (AlterExpression alterExpression:alter.getAlterExpressions()) {
|
|
|
+ AlterOperation operation =alterExpression.getOperation();
|
|
|
+ if (operation == AlterOperation.MODIFY){//修改列的属性
|
|
|
+ for (AlterExpression.ColumnDataType columnDataType:alterExpression.getColDataTypeList()) {
|
|
|
+ String columName = columnDataType.getColumnName();
|
|
|
+ columName = columName.replaceAll("`","");
|
|
|
+ for (FieldMapping fieldMapping :fieldMappingList) {
|
|
|
+ if (fieldMapping.getSource().getName().equals(columName)){
|
|
|
+ columnDataType.setColumnName(fieldMapping.getTarget().getName());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ sql = alter.toString();
|
|
|
+ }else if (operation == AlterOperation.CHANGE){//修改列名
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
- sql = alter.toString();
|
|
|
logger.info("目标sql为"+sql);
|
|
|
} catch (JSQLParserException e) {
|
|
|
logger.error(e.getMessage(), e);
|
|
@@ -44,4 +64,5 @@ public class DDLParserImpl implements DDLParser {
|
|
|
ddlConfig.setSql(sql);
|
|
|
return ddlConfig;
|
|
|
}
|
|
|
+
|
|
|
}
|