use of io.seata.rm.datasource.sql.struct.Field in project seata by seata.
the class PostgresqlUndoInsertExecutor method undoPrepare.
@Override
protected void undoPrepare(PreparedStatement undoPST, ArrayList<Field> undoValues, List<Field> pkValueList) throws SQLException {
int undoIndex = 0;
for (Field pkField : pkValueList) {
undoIndex++;
undoPST.setObject(undoIndex, pkField.getValue(), pkField.getType());
}
}
use of io.seata.rm.datasource.sql.struct.Field in project seata by seata.
the class DataCompareUtilsTest method addField.
private Field addField(Row row, String name, int type, Object value) {
Field field = new Field(name, type, value);
row.add(field);
return field;
}
use of io.seata.rm.datasource.sql.struct.Field in project seata by seata.
the class DataCompareUtilsTest method testRowListToMapWithMultipPk.
@Test
public void testRowListToMapWithMultipPk() {
List<String> primaryKeyList = new ArrayList<>();
primaryKeyList.add("id1");
primaryKeyList.add("id2");
List<Row> rows = new ArrayList<>();
Field field1 = new Field("id1", 1, "1");
Field field11 = new Field("id2", 1, "2");
Row row = new Row();
row.add(field1);
row.add(field11);
rows.add(row);
Field field2 = new Field("id1", 1, "3");
Field field22 = new Field("id2", 1, "4");
Row row2 = new Row();
row2.add(field2);
row2.add(field22);
rows.add(row2);
Field field3 = new Field("id1", 1, "5");
Field field33 = new Field("id2", 1, "6");
Row row3 = new Row();
row3.add(field3);
row3.add(field33);
rows.add(row3);
Map<String, Map<String, Field>> result = DataCompareUtils.rowListToMap(rows, primaryKeyList);
Assertions.assertTrue(result.size() == 3);
Assertions.assertEquals(result.keySet().iterator().next(), "1_2");
}
use of io.seata.rm.datasource.sql.struct.Field in project seata by seata.
the class MySQLKeywordCheckerTest method testInsertKeywordCheck.
/**
* Test keyword check with INSERT case
*/
@Test
public void testInsertKeywordCheck() {
SQLUndoLog sqlUndoLog = new SQLUndoLog();
sqlUndoLog.setTableName("`lock`");
sqlUndoLog.setSqlType(SQLType.INSERT);
TableRecords beforeImage = TableRecords.empty(new UndoExecutorTest.MockTableMeta("product", "key"));
TableRecords afterImage = new TableRecords(new UndoExecutorTest.MockTableMeta("product", "key"));
Row afterRow1 = new Row();
Field pkField = new Field();
pkField.setKeyType(KeyType.PRIMARY_KEY);
pkField.setName("`key`");
pkField.setType(Types.INTEGER);
pkField.setValue(213);
afterRow1.add(pkField);
Field name = new Field();
name.setName("`desc`");
name.setType(Types.VARCHAR);
name.setValue("SEATA");
afterRow1.add(name);
Field since = new Field();
since.setName("since");
since.setType(Types.VARCHAR);
since.setValue("2014");
afterRow1.add(since);
Row afterRow = new Row();
Field pkField1 = new Field();
pkField1.setKeyType(KeyType.PRIMARY_KEY);
pkField1.setName("`key`");
pkField1.setType(Types.INTEGER);
pkField1.setValue(214);
afterRow.add(pkField1);
Field name1 = new Field();
name1.setName("`desc`");
name1.setType(Types.VARCHAR);
name1.setValue("GTS");
afterRow.add(name1);
Field since1 = new Field();
since1.setName("since");
since1.setType(Types.VARCHAR);
since1.setValue("2016");
afterRow.add(since1);
afterImage.add(afterRow1);
afterImage.add(afterRow);
sqlUndoLog.setBeforeImage(beforeImage);
sqlUndoLog.setAfterImage(afterImage);
MySQLUndoInsertExecutorExtension mySQLUndoInsertExecutor = new MySQLUndoInsertExecutorExtension(sqlUndoLog);
Assertions.assertEquals("DELETE FROM `lock` WHERE `key` = ?", mySQLUndoInsertExecutor.getSql().trim());
}
use of io.seata.rm.datasource.sql.struct.Field in project seata by seata.
the class FastjsonUndoLogParserTest method testWriteClassName.
@Test
public void testWriteClassName() throws Exception {
TableRecords beforeImage = new TableRecords();
TableRecords afterImage = new TableRecords();
afterImage.setTableName("t1");
List<Row> rows = new ArrayList<>();
Row row = new Row();
Field field = new Field();
field.setName("id");
field.setKeyType(KeyType.PRIMARY_KEY);
field.setType(Types.BIGINT);
field.setValue(Long.valueOf("0"));
row.add(field);
field = new Field();
field.setName("money");
field.setType(Types.DECIMAL);
field.setValue(BigDecimal.ONE);
row.add(field);
rows.add(row);
afterImage.setRows(rows);
SQLUndoLog sqlUndoLog00 = new SQLUndoLog();
sqlUndoLog00.setSqlType(SQLType.INSERT);
sqlUndoLog00.setTableName("table_name");
sqlUndoLog00.setBeforeImage(beforeImage);
sqlUndoLog00.setAfterImage(afterImage);
BranchUndoLog originLog = new BranchUndoLog();
originLog.setBranchId(123456L);
originLog.setXid("xiddddddddddd");
List<SQLUndoLog> logList = new ArrayList<>();
logList.add(sqlUndoLog00);
originLog.setSqlUndoLogs(logList);
// start test
byte[] bs = getParser().encode(originLog);
String s = new String(bs);
Assertions.assertTrue(s.contains("\"@type\""));
BranchUndoLog decode = getParser().decode(s.getBytes());
Object value1 = decode.getSqlUndoLogs().get(0).getAfterImage().getRows().get(0).getFields().get(0).getValue();
Object value2 = decode.getSqlUndoLogs().get(0).getAfterImage().getRows().get(0).getFields().get(1).getValue();
Assertions.assertTrue(value1 instanceof Long);
Assertions.assertTrue(value2 instanceof BigDecimal);
}
Aggregations