[jOOQ/jOOQ#3035] INSERT .. RETURNING does not return any value in H2, when no AUTO_INCREMENT column is involved
This commit is contained in:
parent
e61471a22c
commit
203341cf9d
@ -1198,17 +1198,22 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
|
||||
) {
|
||||
if (values != null && values.length > 0) {
|
||||
|
||||
// This shouldn't be null, as relevant dialects should
|
||||
// return empty generated keys ResultSet
|
||||
if (table.getIdentity() != null) {
|
||||
final Field<Object> field = (Field<Object>) table.getIdentity().getField();
|
||||
// [#3035] Support identity columns and single column primary keys
|
||||
final Field<?> identity =
|
||||
table.getIdentity() != null
|
||||
? (Field<Object>) table.getIdentity().getField()
|
||||
: table.getPrimaryKey() != null && table.getPrimaryKey().getFields().size() == 1
|
||||
? table.getPrimaryKey().getFields().get(0)
|
||||
: null;
|
||||
|
||||
if (identity != null) {
|
||||
Object[] ids = new Object[values.length];
|
||||
for (int i = 0; i < values.length; i++)
|
||||
ids[i] = field.getDataType().convert(values[i]);
|
||||
ids[i] = identity.getDataType().convert(values[i]);
|
||||
|
||||
// Only the IDENTITY value was requested. No need for an
|
||||
// additional query
|
||||
if (returningResolvedAsterisks.size() == 1 && new Fields<>(returningResolvedAsterisks).field(field) != null) {
|
||||
if (returningResolvedAsterisks.size() == 1 && new Fields<>(returningResolvedAsterisks).field(identity) != null) {
|
||||
for (final Object id : ids) {
|
||||
((Result) getResult()).add(
|
||||
Tools.newRecord(
|
||||
@ -1237,7 +1242,7 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
|
||||
.from(table)
|
||||
|
||||
// [#5050] [#9946] Table.getIdentity() doesn't produce aliased fields yet
|
||||
.where(table.field(field).in(ids))
|
||||
.where(table.field((Field) identity).in(ids))
|
||||
.fetch();
|
||||
|
||||
returnedResult.attach(originalConfiguration);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user