[jOOQ/jOOQ#5306] Parser support for <data change delta table>
This commit is contained in:
parent
8d543f668c
commit
19dfe15341
@ -162,6 +162,7 @@ import org.jooq.conf.RenderMapping;
|
||||
import org.jooq.conf.RenderNameCase;
|
||||
import org.jooq.conf.SettingsTools;
|
||||
import org.jooq.exception.DataAccessException;
|
||||
import org.jooq.impl.DataChangeDeltaTable.ResultOption;
|
||||
import org.jooq.impl.DefaultUnwrapperProvider.DefaultUnwrapper;
|
||||
import org.jooq.impl.Tools.BooleanDataKey;
|
||||
import org.jooq.impl.Tools.DataKey;
|
||||
|
||||
@ -10900,7 +10900,29 @@ public class DSL {
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ H2, POSTGRES })
|
||||
public static <R extends Record> Table<R> oldTable(DMLQuery<R> query) {
|
||||
public static <R extends Record> Table<R> oldTable(Update<R> query) {
|
||||
return new DataChangeDeltaTable<>(ResultOption.OLD, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data change delta table with result option <code>OLD</code> to
|
||||
* retrieve the modified data from before the {@link Update} or
|
||||
* {@link Delete} statement was applied.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ H2, POSTGRES })
|
||||
public static <R extends Record> Table<R> oldTable(Delete<R> query) {
|
||||
return new DataChangeDeltaTable<>(ResultOption.OLD, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data change delta table with result option <code>OLD</code> to
|
||||
* retrieve the modified data from before the {@link Update} or
|
||||
* {@link Delete} statement was applied.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ H2, POSTGRES })
|
||||
public static <R extends Record> Table<R> oldTable(Merge<R> query) {
|
||||
return new DataChangeDeltaTable<>(ResultOption.OLD, query);
|
||||
}
|
||||
|
||||
@ -10913,10 +10935,35 @@ public class DSL {
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ H2, POSTGRES })
|
||||
public static <R extends Record> Table<R> newTable(DMLQuery<R> query) {
|
||||
public static <R extends Record> Table<R> newTable(Insert<R> query) {
|
||||
return new DataChangeDeltaTable<R>(ResultOption.NEW, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data change delta table with result option <code>NEW</code> to
|
||||
* retrieve the modified data from after the {@link Update} or
|
||||
* {@link Insert} statement was applied.
|
||||
* <p>
|
||||
* This does not include trigger generated values.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ H2, POSTGRES })
|
||||
public static <R extends Record> Table<R> newTable(Update<R> query) {
|
||||
return new DataChangeDeltaTable<R>(ResultOption.NEW, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data change delta table with result option <code>NEW</code> to
|
||||
* retrieve the modified data from after the {@link Update} or
|
||||
* {@link Insert} statement was applied.
|
||||
* <p>
|
||||
* This does not include trigger generated values.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ H2, POSTGRES })
|
||||
public static <R extends Record> Table<R> newTable(Merge<R> query) {
|
||||
return new DataChangeDeltaTable<R>(ResultOption.NEW, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data change delta table with result option <code>NEW</code> to
|
||||
@ -10927,7 +10974,33 @@ public class DSL {
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ H2, POSTGRES })
|
||||
public static <R extends Record> Table<R> finalTable(DMLQuery<R> query) {
|
||||
public static <R extends Record> Table<R> finalTable(Insert<R> query) {
|
||||
return new DataChangeDeltaTable<>(ResultOption.FINAL, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data change delta table with result option <code>NEW</code> to
|
||||
* retrieve the modified data from after the {@link Update} or
|
||||
* {@link Insert} statement was applied.
|
||||
* <p>
|
||||
* This includes trigger generated values.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ H2, POSTGRES })
|
||||
public static <R extends Record> Table<R> finalTable(Update<R> query) {
|
||||
return new DataChangeDeltaTable<>(ResultOption.FINAL, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data change delta table with result option <code>NEW</code> to
|
||||
* retrieve the modified data from after the {@link Update} or
|
||||
* {@link Insert} statement was applied.
|
||||
* <p>
|
||||
* This includes trigger generated values.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ H2, POSTGRES })
|
||||
public static <R extends Record> Table<R> finalTable(Merge<R> query) {
|
||||
return new DataChangeDeltaTable<>(ResultOption.FINAL, query);
|
||||
}
|
||||
|
||||
|
||||
@ -174,6 +174,7 @@ import org.jooq.DSLContext;
|
||||
import org.jooq.DataType;
|
||||
import org.jooq.DatePart;
|
||||
// ...
|
||||
import org.jooq.Delete;
|
||||
import org.jooq.DeleteLimitStep;
|
||||
import org.jooq.DeleteOrderByStep;
|
||||
import org.jooq.DeleteReturningStep;
|
||||
@ -200,6 +201,7 @@ import org.jooq.GroupConcatSeparatorStep;
|
||||
import org.jooq.GroupField;
|
||||
// ...
|
||||
import org.jooq.Index;
|
||||
import org.jooq.Insert;
|
||||
import org.jooq.InsertOnConflictDoUpdateStep;
|
||||
import org.jooq.InsertOnConflictWhereIndexPredicateStep;
|
||||
import org.jooq.InsertOnConflictWhereStep;
|
||||
@ -276,6 +278,7 @@ import org.jooq.TablePartitionByStep;
|
||||
import org.jooq.Truncate;
|
||||
import org.jooq.TruncateCascadeStep;
|
||||
import org.jooq.TruncateIdentityStep;
|
||||
import org.jooq.Update;
|
||||
import org.jooq.UpdateFromStep;
|
||||
import org.jooq.UpdateLimitStep;
|
||||
import org.jooq.UpdateOrderByStep;
|
||||
@ -6140,9 +6143,50 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
|
||||
|
||||
|
||||
|
||||
// TODO [#5306] Support FINAL TABLE (<data change statement>)
|
||||
// TODIO ONLY ( table primary )
|
||||
if (parseFunctionNameIf("UNNEST", "TABLE")) {
|
||||
// TODO ONLY ( table primary )
|
||||
if (parseFunctionNameIf("OLD TABLE")) {
|
||||
parse('(');
|
||||
Query query = parseQuery(false, false);
|
||||
parse(')');
|
||||
|
||||
if (query instanceof Merge)
|
||||
result = oldTable((Merge<?>) query);
|
||||
else if (query instanceof Update)
|
||||
result = oldTable((Update<?>) query);
|
||||
else if (query instanceof Delete)
|
||||
result = oldTable((Delete<?>) query);
|
||||
else
|
||||
throw expected("UPDATE", "DELETE", "MERGE");
|
||||
}
|
||||
else if (parseFunctionNameIf("NEW TABLE")) {
|
||||
parse('(');
|
||||
Query query = parseQuery(false, false);
|
||||
parse(')');
|
||||
|
||||
if (query instanceof Merge)
|
||||
result = newTable((Merge<?>) query);
|
||||
else if (query instanceof Insert)
|
||||
result = newTable((Insert<?>) query);
|
||||
else if (query instanceof Update)
|
||||
result = newTable((Update<?>) query);
|
||||
else
|
||||
throw expected("INSERT", "UPDATE", "MERGE");
|
||||
}
|
||||
else if (parseFunctionNameIf("FINAL TABLE")) {
|
||||
parse('(');
|
||||
Query query = parseQuery(false, false);
|
||||
parse(')');
|
||||
|
||||
if (query instanceof Merge)
|
||||
result = finalTable((Merge<?>) query);
|
||||
else if (query instanceof Insert)
|
||||
result = finalTable((Insert<?>) query);
|
||||
else if (query instanceof Update)
|
||||
result = finalTable((Update<?>) query);
|
||||
else
|
||||
throw expected("INSERT", "UPDATE", "MERGE");
|
||||
}
|
||||
else if (parseFunctionNameIf("UNNEST", "TABLE")) {
|
||||
parse('(');
|
||||
|
||||
if (parseFunctionNameIf("GENERATOR")) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user