package com.taobao.yugong.translator;
import java.util.Arrays;
import java.util.List;
import com.google.common.collect.Lists;
import com.taobao.yugong.common.db.meta.ColumnValue;
import com.taobao.yugong.common.model.record.Record;
/**
* 一个迁移的例子,提供源库一张表同步到目标多张表
*
* <pre>
* 例子说明:
* 1. 源库有一张表:yugong_example_two
* 2. 目标库两张表:yugong_example_two_1,yugong_example_two_2,每张表都和yugong_example_two存在一个字段名不同,name字段分别映射到name_1,name_2
*
* 测试的表结构:
* oralce:
* create table yugong_example_two
* (
* id NUMBER(11) ,
* name varchar(32) default ' ' not null,
* CONSTRAINT yugong_example_two_pk_id PRIMARY KEY (id)
* );
*
* mysql:
* create table test.yugong_example_two_1
* (
* id bigint(20) unsigned auto_increment,
* name_1 varchar(32) ,
* CONSTRAINT yugong_example_two_1_pk_id PRIMARY KEY (id)
* );
*
*
* create table test.yugong_example_two_2
* (
* id bigint(20) unsigned auto_increment,
* name_2 varchar(32) ,
* CONSTRAINT yugong_example_two_2_pk_id PRIMARY KEY (id)
* );
* </pre>
*
* @author agapple 2013-11-21 上午11:05:20
*/
public class YugongExampleTwoDataTranslator extends AbstractDataTranslator implements DataTranslator {
@Override
public List<Record> translator(List<Record> records) {
List<Record> result = Lists.newArrayListWithCapacity(records.size());
for (Record record : records) {
result.addAll(translatorOne(record));
}
return result;
}
public List<Record> translatorOne(Record record) {
Record record1 = record;
Record record2 = record.clone();
record1.setTableName("yugong_example_two_1");
// 1. 字段名字不同
ColumnValue name1Column = record.getColumnByName("name");
if (name1Column != null) {
name1Column.getColumn().setName("name_1");
}
record2.setTableName("yugong_example_two_2");
// 1. 字段名字不同
ColumnValue name2Column = record2.getColumnByName("name");
if (name2Column != null) {
name2Column.getColumn().setName("name_2");
}
return Arrays.asList(record1, record2);
}
}