[jOOQ/jOOQ#10386] Add Settings to govern unchanged TableRecord.insert() and UpdatableRecord.update() or store() calls

- TODO: The UpdatableRecord.merge() implementation is not yet correct
This commit is contained in:
Lukas Eder 2020-07-13 12:25:18 +02:00
parent 6191677da4
commit fd8a00bb33
3 changed files with 1119 additions and 2 deletions

View File

@ -0,0 +1,42 @@
package org.jooq.conf;
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java class for UpdateUnchangedRecords.
*
* <p>The following schema fragment specifies the expected content contained within this class.
* <p>
* <pre>
* &lt;simpleType name="UpdateUnchangedRecords"&gt;
* &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string"&gt;
* &lt;enumeration value="NEVER"/&gt;
* &lt;enumeration value="SET_PRIMARY_KEY_TO_ITSELF"/&gt;
* &lt;enumeration value="SET_NON_PRIMARY_KEY_TO_THEMSELVES"/&gt;
* &lt;enumeration value="SET_NON_PRIMARY_KEY_TO_RECORD_VALUES"/&gt;
* &lt;/restriction&gt;
* &lt;/simpleType&gt;
* </pre>
*
*/
@XmlType(name = "UpdateUnchangedRecords")
@XmlEnum
public enum UpdateUnchangedRecords {
NEVER,
SET_PRIMARY_KEY_TO_ITSELF,
SET_NON_PRIMARY_KEY_TO_THEMSELVES,
SET_NON_PRIMARY_KEY_TO_RECORD_VALUES;
public String value() {
return name();
}
public static UpdateUnchangedRecords fromValue(String v) {
return valueOf(v);
}
}

View File

@ -38,6 +38,7 @@
package org.jooq.impl;
import static java.lang.Boolean.TRUE;
import static java.util.Arrays.asList;
// ...
import static org.jooq.SQLDialect.SQLITE;
import static org.jooq.conf.SettingsTools.updatablePrimaryKeys;
@ -308,13 +309,15 @@ public class UpdatableRecordImpl<R extends UpdatableRecord<R>> extends TableReco
case SET_NON_PRIMARY_KEY_TO_THEMSELVES:
for (Field<?> field : storeFields)
query.addValue(field, (Field) field);
if (!asList(keys).contains(field))
query.addValue(field, (Field) field);
break;
case SET_NON_PRIMARY_KEY_TO_RECORD_VALUES:
for (Field<?> field : storeFields)
changed(field, true);
if (!asList(keys).contains(field))
changed(field, true);
addChangedValues(storeFields, query, merge);
break;

File diff suppressed because it is too large Load Diff