Search in sources :

Example 1 with Field

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());
    }
}
Also used : Field(io.seata.rm.datasource.sql.struct.Field)

Example 2 with Field

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;
}
Also used : Field(io.seata.rm.datasource.sql.struct.Field)

Example 3 with 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");
}
Also used : Field(io.seata.rm.datasource.sql.struct.Field) ArrayList(java.util.ArrayList) Row(io.seata.rm.datasource.sql.struct.Row) Map(java.util.Map) Test(org.junit.jupiter.api.Test)

Example 4 with Field

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());
}
Also used : TableRecords(io.seata.rm.datasource.sql.struct.TableRecords) Field(io.seata.rm.datasource.sql.struct.Field) SQLUndoLog(io.seata.rm.datasource.undo.SQLUndoLog) UndoExecutorTest(io.seata.rm.datasource.undo.UndoExecutorTest) Row(io.seata.rm.datasource.sql.struct.Row) UndoExecutorTest(io.seata.rm.datasource.undo.UndoExecutorTest) Test(org.junit.jupiter.api.Test)

Example 5 with Field

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);
}
Also used : ArrayList(java.util.ArrayList) BigDecimal(java.math.BigDecimal) TableRecords(io.seata.rm.datasource.sql.struct.TableRecords) Field(io.seata.rm.datasource.sql.struct.Field) BranchUndoLog(io.seata.rm.datasource.undo.BranchUndoLog) SQLUndoLog(io.seata.rm.datasource.undo.SQLUndoLog) Row(io.seata.rm.datasource.sql.struct.Row) Test(org.junit.jupiter.api.Test) BaseUndoLogParserTest(io.seata.rm.datasource.undo.BaseUndoLogParserTest)

Aggregations

Field (io.seata.rm.datasource.sql.struct.Field)40 Row (io.seata.rm.datasource.sql.struct.Row)22 TableRecords (io.seata.rm.datasource.sql.struct.TableRecords)21 Test (org.junit.jupiter.api.Test)21 ArrayList (java.util.ArrayList)13 SQLUndoLog (io.seata.rm.datasource.undo.SQLUndoLog)10 TableMeta (io.seata.rm.datasource.sql.struct.TableMeta)8 List (java.util.List)8 ShouldNeverHappenException (io.seata.common.exception.ShouldNeverHappenException)6 CollectionUtils (io.seata.common.util.CollectionUtils)6 ColumnUtils (io.seata.rm.datasource.ColumnUtils)6 AbstractUndoExecutor (io.seata.rm.datasource.undo.AbstractUndoExecutor)6 JdbcConstants (io.seata.sqlparser.util.JdbcConstants)6 Collectors (java.util.stream.Collectors)6 Map (java.util.Map)4 SqlGenerateUtils (io.seata.rm.datasource.SqlGenerateUtils)3 UndoExecutorTest (io.seata.rm.datasource.undo.UndoExecutorTest)3 BaseUndoLogParserTest (io.seata.rm.datasource.undo.BaseUndoLogParserTest)2 BigDecimal (java.math.BigDecimal)2 PreparedStatement (java.sql.PreparedStatement)2