use of com.airbnb.spinaltap.mysql.mutation.MysqlDeleteMutation in project SpinalTap by airbnb.
the class MysqlMutationMapperTest method testUpdateMutationWithDifferentPK.
@Test
public void testUpdateMutationWithDifferentPK() throws Exception {
Serializable[] old = new Serializable[4];
old[0] = 12131L;
old[1] = "test_user";
old[2] = 25;
old[3] = 0;
Serializable[] current = new Serializable[4];
current[0] = 12334L;
current[1] = old[1];
current[2] = 26;
current[3] = old[3];
Map.Entry<Serializable[], Serializable[]> change = new AbstractMap.SimpleEntry<>(old, current);
BinlogEvent event = new UpdateEvent(TABLE_ID, SERVER_ID, TIMESTAMP, BINLOG_FILE_POS, ImmutableList.of(change));
List<? extends Mutation> mutations = eventMapper.map(event);
assertEquals(2, mutations.size());
assertTrue(mutations.get(0) instanceof MysqlDeleteMutation);
MysqlDeleteMutation deleteMutation = (MysqlDeleteMutation) mutations.get(0);
validateMetadata(deleteMutation, 0);
Row row = deleteMutation.getRow();
assertEquals(12131L, row.getColumns().get("id").getValue());
assertEquals("test_user", row.getColumns().get("name").getValue());
assertEquals(25, row.getColumns().get("age").getValue());
assertEquals(0, row.getColumns().get("sex").getValue());
assertTrue(mutations.get(1) instanceof MysqlInsertMutation);
MysqlInsertMutation insertMutation = (MysqlInsertMutation) mutations.get(1);
validateMetadata(insertMutation, 0);
row = insertMutation.getRow();
assertEquals(12334L, row.getColumns().get("id").getValue());
assertEquals("test_user", row.getColumns().get("name").getValue());
assertEquals(26, row.getColumns().get("age").getValue());
assertEquals(0, row.getColumns().get("sex").getValue());
}
use of com.airbnb.spinaltap.mysql.mutation.MysqlDeleteMutation in project SpinalTap by airbnb.
the class DeleteMutationMapper method mapEvent.
@Override
protected List<MysqlDeleteMutation> mapEvent(Table table, DeleteEvent event) {
Collection<ColumnMetadata> cols = table.getColumns().values();
List<MysqlDeleteMutation> mutations = new ArrayList<>();
List<Serializable[]> rows = event.getRows();
for (int position = 0; position < rows.size(); position++) {
mutations.add(new MysqlDeleteMutation(createMetadata(table, event, position), new Row(table, zip(rows.get(position), cols))));
}
return mutations;
}
use of com.airbnb.spinaltap.mysql.mutation.MysqlDeleteMutation in project SpinalTap by airbnb.
the class UpdateMutationMapper method mapEvent.
@Override
protected List<MysqlMutation> mapEvent(Table table, UpdateEvent event) {
List<MysqlMutation> mutations = Lists.newArrayList();
Collection<ColumnMetadata> cols = table.getColumns().values();
List<Map.Entry<Serializable[], Serializable[]>> rows = event.getRows();
for (int position = 0; position < rows.size(); position++) {
MysqlMutationMetadata metadata = createMetadata(table, event, position);
Row previousRow = new Row(table, zip(rows.get(position).getKey(), cols));
Row newRow = new Row(table, zip(rows.get(position).getValue(), cols));
// to retain invariant that a mutation captures changes to a single PK
if (table.getPrimaryKey().isPresent() && !previousRow.getPrimaryKeyValue().equals(newRow.getPrimaryKeyValue())) {
mutations.add(new MysqlDeleteMutation(metadata, previousRow));
mutations.add(new MysqlInsertMutation(metadata, newRow));
} else {
mutations.add(new MysqlUpdateMutation(metadata, previousRow, newRow));
}
}
;
return mutations;
}
use of com.airbnb.spinaltap.mysql.mutation.MysqlDeleteMutation in project SpinalTap by airbnb.
the class KafkaDestinationTest method createMutation.
private Mutation createMutation(MutationType type) {
Mapper<com.airbnb.spinaltap.Mutation<?>, ? extends TBase<?, ?>> thriftMutationMapper = ThriftMutationMapper.create("spinaltap");
Table table = new Table(0L, TABLE, DATABASE, ImmutableList.of(new ColumnMetadata("id", ColumnDataType.LONGLONG, true, 0)), ImmutableList.of("id"));
MysqlMutationMetadata metadata = new MysqlMutationMetadata(new DataSource(HOSTNAME, 0, "service"), new BinlogFilePos(), table, 0L, 0L, 0L, null, null, 0L, 0);
Row row = new Row(table, ImmutableMap.of("id", new Column(new ColumnMetadata("id", ColumnDataType.LONGLONG, true, 0), 1L)));
MysqlMutation mutation;
switch(type) {
case INSERT:
mutation = new MysqlInsertMutation(metadata, row);
break;
case UPDATE:
mutation = new MysqlUpdateMutation(metadata, row, row);
break;
case DELETE:
mutation = new MysqlDeleteMutation(metadata, row);
break;
default:
mutation = null;
}
return (Mutation) (thriftMutationMapper.map(mutation));
}
use of com.airbnb.spinaltap.mysql.mutation.MysqlDeleteMutation in project SpinalTap by airbnb.
the class MysqlMutationMapperTest method testDeleteMutation.
@Test
public void testDeleteMutation() throws Exception {
Serializable[] change = new Serializable[4];
change[0] = 12131L;
change[1] = "test_user";
change[2] = 25;
change[3] = 0;
Serializable[] change2 = new Serializable[4];
change2[0] = 12334L;
change2[1] = "test_user2";
change2[2] = 12;
change2[3] = 1;
BinlogEvent event = new DeleteEvent(TABLE_ID, SERVER_ID, TIMESTAMP, BINLOG_FILE_POS, ImmutableList.of(change, change2));
List<? extends Mutation> mutations = eventMapper.map(event);
assertEquals(2, mutations.size());
assertTrue(mutations.get(0) instanceof MysqlDeleteMutation);
MysqlDeleteMutation mutation = (MysqlDeleteMutation) mutations.get(0);
validateMetadata(mutation, 0);
Row row = mutation.getEntity();
assertEquals(12131L, row.getColumns().get("id").getValue());
assertEquals("test_user", row.getColumns().get("name").getValue());
assertEquals(25, row.getColumns().get("age").getValue());
assertEquals(0, row.getColumns().get("sex").getValue());
assertTrue(mutations.get(1) instanceof MysqlDeleteMutation);
mutation = (MysqlDeleteMutation) mutations.get(1);
validateMetadata(mutation, 1);
row = mutation.getEntity();
assertEquals(12334L, row.getColumns().get("id").getValue());
assertEquals("test_user2", row.getColumns().get("name").getValue());
assertEquals(12, row.getColumns().get("age").getValue());
assertEquals(1, row.getColumns().get("sex").getValue());
}
Aggregations