Hi there!
In case when I use a SELECT
statement as the source of values for the INSERT
statement I don't have ability to return the inserted record.
I need to implement a query like this:
INSERT INTO test
(text)
SELECT '1234567890123456789'
WHERE
NOT EXISTS (
SELECT id FROM test WHERE text = '1234567890123456789'
) returning id;
And I use this approach ( by the way, it would be great, if we had an ability to do it via InsertQuery) :
List<Param<?>> params = new LinkedList<>();
params.add(DSL.val("1234567890123456789"));
List<Field<?>> fields = new LinkedList<>();
fields.add(TEST.TEXT);
SelectConditionStep<Record1<TEXT>> notExistsSelect = context.select(TEST.TEXT).from(TEST).where(TEST.TEXT.eq("1234567890123456789"));
SelectConditionStep<Record> insertIntoSelect = context.select(params).whereNotExists(notExistsSelect);
context.insertInto(TEST, fields).select(insertIntoSelect).execute();
But I can't return inserted value, because Insert interface, which is returned by select(insertIntoSelect), doesn't have returning() method.
Are there any reason why it hasn't been implemented? Or maybe there is another approach to execute my query?