diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertOnDuplicateUpdateExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertOnDuplicateUpdateExecutor.java index 3a7b37f4584..2e1e35993c9 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertOnDuplicateUpdateExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/mysql/MySQLInsertOnDuplicateUpdateExecutor.java @@ -290,7 +290,7 @@ public String buildImageSQL(TableMeta tableMeta) { paramAppenderList = new ArrayList<>(); } SQLInsertRecognizer recognizer = (SQLInsertRecognizer) sqlRecognizer; - int insertNum = recognizer.getInsertParamsValue().size(); + int insertNum = recognizer.getInsertRows(getPkIndex().values()).size(); Map> imageParameterMap = buildImageParameters(recognizer); String prefix = "SELECT * "; StringBuilder suffix = new StringBuilder(" FROM ").append(getFromTableInSQL()); diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertOnDuplicateUpdateExecutorTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertOnDuplicateUpdateExecutorTest.java index 280298baa84..38da2d6e435 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertOnDuplicateUpdateExecutorTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/exec/MySQLInsertOnDuplicateUpdateExecutorTest.java @@ -105,10 +105,11 @@ public void TestBuildImageParameters(){ public void TestBuildImageParameters_contain_constant(){ mockImageParameterMap_contain_constant(); List> insertRows = new ArrayList<>(); - insertRows.add(Arrays.asList("?,?,?,userStatus1")); - insertRows.add(Arrays.asList("?,?,?,userStatus2")); + insertRows.add(Arrays.asList("?","?","?","userStatus1")); + insertRows.add(Arrays.asList("?","?","?","userStatus2")); when(sqlInsertRecognizer.getInsertRows(pkIndexMap.values())).thenReturn(insertRows); mockInsertColumns(); + doReturn(pkIndexMap).when(insertOrUpdateExecutor).getPkIndex(); Map> imageParameterMap = insertOrUpdateExecutor.buildImageParameters(sqlInsertRecognizer); Assertions.assertEquals(imageParameterMap.toString(),mockImageParameterMap().toString()); } @@ -119,11 +120,12 @@ public void testBuildImageSQL(){ String paramAppenderListStr = "[[userId1, 100], [userId2, 101]]"; mockImageParameterMap_contain_constant(); List> insertRows = new ArrayList<>(); - insertRows.add(Arrays.asList("?,?,?,userStatus1")); - insertRows.add(Arrays.asList("?,?,?,userStatus2")); + insertRows.add(Arrays.asList("?","?","?","userStatus1")); + insertRows.add(Arrays.asList("?","?","?","userStatus2")); when(sqlInsertRecognizer.getInsertRows(pkIndexMap.values())).thenReturn(insertRows); mockInsertColumns(); mockAllIndexes(); + doReturn(pkIndexMap).when(insertOrUpdateExecutor).getPkIndex(); String selectSQL = insertOrUpdateExecutor.buildImageSQL(tableMeta); Assertions.assertEquals(selectSQLStr,selectSQL); Assertions.assertEquals(paramAppenderListStr,insertOrUpdateExecutor.getParamAppenderList().toString());