in rm-datasource/src/main/java/org/apache/seata/rm/datasource/exec/BaseInsertExecutor.java [403:480]
protected boolean checkPkValuesForSinglePk(List<Object> pkValues, boolean ps) {
/*
ps = true
-----------------------------------------------
one more
null O O
value O O
method O O
sequence O O
default O O
-----------------------------------------------
ps = false
-----------------------------------------------
one more
null O X
value O O
method X X
sequence O X
default O X
-----------------------------------------------
*/
int n = 0, v = 0, m = 0, s = 0, d = 0;
for (Object pkValue : pkValues) {
if (pkValue instanceof Null) {
n++;
continue;
}
if (pkValue instanceof SqlMethodExpr) {
m++;
continue;
}
if (pkValue instanceof SqlSequenceExpr) {
s++;
continue;
}
if (pkValue instanceof SqlDefaultExpr) {
d++;
continue;
}
v++;
}
if (!ps) {
if (m > 0) {
return false;
}
if (n == 1 && v == 0 && m == 0 && s == 0 && d == 0) {
return true;
}
if (n == 0 && v > 0 && m == 0 && s == 0 && d == 0) {
return true;
}
if (n == 0 && v == 0 && m == 0 && s == 1 && d == 0) {
return true;
}
if (n == 0 && v == 0 && m == 0 && s == 0 && d == 1) {
return true;
}
return false;
}
if (n > 0 && v == 0 && m == 0 && s == 0 && d == 0) {
return true;
}
if (n == 0 && v > 0 && m == 0 && s == 0 && d == 0) {
return true;
}
if (n == 0 && v == 0 && m > 0 && s == 0 && d == 0) {
return true;
}
if (n == 0 && v == 0 && m == 0 && s > 0 && d == 0) {
return true;
}
if (n == 0 && v == 0 && m == 0 && s == 0 && d > 0) {
return true;
}
return false;
}