[jOOQ/jOOQ#9574] Add org.jooq.Synonym

This includes:

- DDL export implementation
- Interpreter implementation
- FilteredMeta implementation
- Snapshot implementation

Still missing

- Correctly support CASCADE / RESTRICT semantics (interpreter)
- Correct serialisation in case foreign keys reference synonyms
- Interpretation in case foreign keys reference synonyms
This commit is contained in:
Lukas Eder 2024-09-25 18:16:24 +02:00
parent a4d5a7ae24
commit 0317bdada9
14 changed files with 563 additions and 25 deletions

View File

@ -90,6 +90,7 @@ public final class DDLExportConfiguration {
private final boolean respectCatalogOrder;
private final boolean respectSchemaOrder;
private final boolean respectTableOrder;
@ -102,6 +103,7 @@ public final class DDLExportConfiguration {
private final boolean defaultSequenceFlags;
private final boolean includeConstraintsOnViews;
@ -127,6 +129,7 @@ public final class DDLExportConfiguration {
false,
false,
false,
@ -139,6 +142,7 @@ public final class DDLExportConfiguration {
false,
false,
@ -162,6 +166,7 @@ public final class DDLExportConfiguration {
boolean respectCatalogOrder,
boolean respectSchemaOrder,
boolean respectTableOrder,
@ -174,6 +179,7 @@ public final class DDLExportConfiguration {
boolean defaultSequenceFlags,
boolean includeConstraintsOnViews,
@ -194,6 +200,7 @@ public final class DDLExportConfiguration {
this.respectCatalogOrder = respectCatalogOrder;
this.respectSchemaOrder = respectSchemaOrder;
this.respectTableOrder = respectTableOrder;
@ -206,6 +213,7 @@ public final class DDLExportConfiguration {
this.defaultSequenceFlags = defaultSequenceFlags;
this.includeConstraintsOnViews = includeConstraintsOnViews;
@ -244,6 +252,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -255,6 +264,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -290,6 +300,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -301,6 +312,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -336,6 +348,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -347,6 +360,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -382,6 +396,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -393,6 +408,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -428,6 +444,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -439,6 +456,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -474,6 +492,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -485,6 +504,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -520,6 +540,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -531,6 +552,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -566,6 +588,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -577,6 +600,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -612,6 +636,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -623,6 +648,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -658,6 +684,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -669,6 +696,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -702,6 +730,54 @@ public final class DDLExportConfiguration {
@ -750,6 +826,7 @@ public final class DDLExportConfiguration {
newRespectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -761,6 +838,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -794,6 +872,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
newRespectSchemaOrder,
respectTableOrder,
@ -805,6 +884,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -838,6 +918,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
newRespectTableOrder,
@ -849,6 +930,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -882,6 +964,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -893,6 +976,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -926,6 +1010,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -937,6 +1022,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -970,6 +1056,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -981,6 +1068,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -1014,6 +1102,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -1025,6 +1114,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -1058,6 +1148,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -1069,6 +1160,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -1100,6 +1192,52 @@ public final class DDLExportConfiguration {
@ -1148,6 +1286,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -1159,6 +1298,7 @@ public final class DDLExportConfiguration {
newDefaultSequenceFlags,
includeConstraintsOnViews,
inlineForeignKeyConstraints
@ -1190,6 +1330,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -1201,6 +1342,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
newIncludeConstraintsOnViews,
inlineForeignKeyConstraints
@ -1234,6 +1376,7 @@ public final class DDLExportConfiguration {
respectCatalogOrder,
respectSchemaOrder,
respectTableOrder,
@ -1245,6 +1388,7 @@ public final class DDLExportConfiguration {
defaultSequenceFlags,
includeConstraintsOnViews,
newInlineForeignKeyConstraints

View File

@ -101,4 +101,9 @@ public enum DDLFlag {
}

View File

@ -237,6 +237,39 @@ public interface Meta extends Scope {
@ -443,6 +476,13 @@ public interface Meta extends Scope {
/**
* Create a wrapper {@link Meta} instance filtering out some sequences.
*/

View File

@ -282,6 +282,32 @@ public interface Schema extends Named {

View File

@ -47,3 +47,10 @@ package org.jooq;

View File

@ -66,6 +66,7 @@ import org.jooq.Query;
import org.jooq.Record;
import org.jooq.Schema;
import org.jooq.Sequence;
// ...
import org.jooq.Table;
import org.jooq.TableField;
// ...
@ -90,6 +91,7 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
final Predicate<? super Catalog> catalogFilter;
final Predicate<? super Schema> schemaFilter;
@ -288,6 +290,39 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
@ -495,6 +530,7 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
null,
@ -514,6 +550,7 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
null,
@ -533,6 +570,7 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
null,
@ -552,6 +590,7 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
null,
@ -579,6 +618,25 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
@Override
@ -592,6 +650,7 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
filter,
null,
null,
@ -611,6 +670,7 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
filter,
null,
@ -630,6 +690,7 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
filter,
@ -649,6 +710,7 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
null,
@ -668,6 +730,7 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
null,

View File

@ -112,6 +112,7 @@ import org.jooq.Schema;
import org.jooq.Select;
import org.jooq.Sequence;
import org.jooq.SortOrder;
// ...
import org.jooq.Table;
import org.jooq.TableOptions;
import org.jooq.TableOptions.OnCommit;
@ -415,6 +416,15 @@ final class DDL {
@ -616,6 +626,11 @@ final class DDL {
return ctx.queries(queries);
}

View File

@ -14128,6 +14128,10 @@ public class DSL {

View File

@ -55,6 +55,7 @@ import org.jooq.QueryPart;
import org.jooq.Record;
import org.jooq.Schema;
import org.jooq.Sequence;
// ...
import org.jooq.Table;
import org.jooq.TableField;
// ...
@ -75,6 +76,7 @@ final class FilteredMeta extends AbstractMeta {
private final Predicate<? super Sequence<?>> sequenceFilter;
private final Predicate<? super UniqueKey<?>> primaryKeyFilter;
private final Predicate<? super UniqueKey<?>> uniqueKeyFilter;
@ -90,6 +92,7 @@ final class FilteredMeta extends AbstractMeta {
Predicate<? super Sequence<?>> sequenceFilter,
Predicate<? super UniqueKey<?>> primaryKeyFilter,
Predicate<? super UniqueKey<?>> uniqueKeyFilter,
@ -104,6 +107,7 @@ final class FilteredMeta extends AbstractMeta {
this.sequenceFilter = sequenceFilter;
this.primaryKeyFilter = primaryKeyFilter;
this.uniqueKeyFilter = uniqueKeyFilter;
@ -138,6 +142,7 @@ final class FilteredMeta extends AbstractMeta {
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
@ -157,6 +162,7 @@ final class FilteredMeta extends AbstractMeta {
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
@ -176,6 +182,7 @@ final class FilteredMeta extends AbstractMeta {
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
@ -195,6 +202,7 @@ final class FilteredMeta extends AbstractMeta {
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
@ -222,6 +230,25 @@ final class FilteredMeta extends AbstractMeta {
@Override
@ -235,6 +262,7 @@ final class FilteredMeta extends AbstractMeta {
and(sequenceFilter, filter),
primaryKeyFilter,
uniqueKeyFilter,
@ -254,6 +282,7 @@ final class FilteredMeta extends AbstractMeta {
sequenceFilter,
and(primaryKeyFilter, filter),
uniqueKeyFilter,
@ -273,6 +302,7 @@ final class FilteredMeta extends AbstractMeta {
sequenceFilter,
primaryKeyFilter,
and(uniqueKeyFilter, filter),
@ -292,6 +322,7 @@ final class FilteredMeta extends AbstractMeta {
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
@ -311,6 +342,7 @@ final class FilteredMeta extends AbstractMeta {
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
@ -377,6 +409,7 @@ final class FilteredMeta extends AbstractMeta {
private FilteredSchema(FilteredCatalog catalog, Schema delegate) {
super(delegate.getQualifiedName(), catalog, delegate.getCommentPart());
@ -440,6 +473,20 @@ final class FilteredMeta extends AbstractMeta {

View File

@ -109,6 +109,7 @@ import org.jooq.Sequence;
import org.jooq.SortField;
import org.jooq.SortOrder;
import org.jooq.Statement;
// ...
import org.jooq.Table;
import org.jooq.TableElement;
import org.jooq.TableField;
@ -160,6 +161,8 @@ final class Interpreter {
Interpreter(Configuration configuration) {
this.configuration = configuration;
this.delayForeignKeyDeclarations = TRUE.equals(configuration.settings().isInterpreterDelayForeignKeyDeclarations());
@ -249,6 +252,10 @@ final class Interpreter {
else if (query instanceof CommentOnImpl q)
accept0(q);
@ -449,20 +456,16 @@ final class Interpreter {
}
}
private final <N extends MutableNamed> void drop(List<N> list, N item) {
Iterator<N> it = list.iterator();
while (it.hasNext()) {
if (it.next().nameEquals(item.name())) {
it.remove();
break;
}
}
}
private final void dropColumns(MutableTable table, List<MutableField> fields, Cascade cascade) {
Iterator<MutableIndex> it1 = table.indexes.iterator();
@ -1053,6 +1056,30 @@ final class Interpreter {
@ -1712,6 +1739,10 @@ final class Interpreter {
List<MutableDomain> domains = new MutableNamedList<>();
List<MutableSequence> sequences = new MutableNamedList<>();
MutableSchema(UnqualifiedName name, MutableCatalog catalog) {
super(name);
@ -1721,15 +1752,23 @@ final class Interpreter {
@Override
final void onDrop() {
for (MutableTable table : tables)
for (MutableTable table : tables) {
for (MutableForeignKey referencingKey : table.referencingKeys())
referencingKey.table.foreignKeys.remove(referencingKey);
}
// TODO: Cascade domains?
tables.clear();
domains.clear();
sequences.clear();
}
@Override
@ -1757,6 +1796,15 @@ final class Interpreter {
return find(sequences, s);
}
private final class InterpretedSchema extends SchemaImpl {
InterpretedSchema(MutableCatalog.InterpretedCatalog catalog) {
super(MutableSchema.this.name(), catalog, MutableSchema.this.comment());
@ -1776,18 +1824,28 @@ final class Interpreter {
public final List<Sequence<?>> getSequences() {
return map(sequences, s -> s.interpretedSequence());
}
}
}
private final class MutableTable extends MutableNamed {
private final class MutableTable extends MutableNamed {
MutableSchema schema;
TableOptions options;
List<MutableField> fields = new MutableNamedList<>();
List<MutableField> fields = new MutableNamedList<>();
MutableUniqueKey primaryKey;
List<MutableUniqueKey> uniqueKeys = new MutableNamedList<>();
List<MutableForeignKey> foreignKeys = new MutableNamedList<>();
List<MutableCheck> checks = new MutableNamedList<>();
List<MutableIndex> indexes = new MutableNamedList<>();
List<MutableUniqueKey> uniqueKeys = new MutableNamedList<>();
List<MutableForeignKey> foreignKeys = new MutableNamedList<>();
List<MutableCheck> checks = new MutableNamedList<>();
List<MutableIndex> indexes = new MutableNamedList<>();
@ -2078,6 +2136,49 @@ final class Interpreter {

View File

@ -38,8 +38,6 @@
package org.jooq.impl;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Predicate;
import java.util.stream.Stream;
import org.jooq.Catalog;
@ -47,19 +45,19 @@ import org.jooq.Comment;
import org.jooq.Context;
import org.jooq.Domain;
import org.jooq.ForeignKey;
import org.jooq.Function1;
import org.jooq.Index;
import org.jooq.Internal;
import org.jooq.Name;
import org.jooq.QueryPart;
// ...
import org.jooq.Schema;
import org.jooq.Sequence;
// ...
import org.jooq.Table;
// ...
// ...
import org.jooq.UDT;
import org.jooq.UniqueKey;
import org.jooq.QueryPart;
// ...
/**
* A schema that references a lazy initialisable {@link Schema} singleton, for
@ -228,6 +226,21 @@ public final class LazySchema extends AbstractNamed implements Schema {
@ -293,6 +306,11 @@ public final class LazySchema extends AbstractNamed implements Schema {
@Override
public final Stream<Sequence<?>> sequenceStream() {
return schema().sequenceStream();

View File

@ -61,6 +61,7 @@ import org.jooq.Index;
import org.jooq.Name;
import org.jooq.Schema;
import org.jooq.Sequence;
// ...
import org.jooq.Table;
// ...
import org.jooq.UDT;
@ -223,6 +224,16 @@ implements
@ -323,6 +334,16 @@ implements
@ -382,6 +403,11 @@ implements
@Override
public final Stream<Sequence<?>> sequenceStream() {
return getSequences().stream();

View File

@ -58,6 +58,7 @@ import org.jooq.Record;
import org.jooq.Schema;
import org.jooq.Sequence;
import org.jooq.SortField;
// ...
import org.jooq.Table;
import org.jooq.TableField;
// ...
@ -129,6 +130,7 @@ final class Snapshot extends AbstractMeta {
SnapshotSchema(SnapshotCatalog catalog, Schema schema) {
super(schema.getQualifiedName(), catalog, schema.getCommentPart());
@ -139,6 +141,7 @@ final class Snapshot extends AbstractMeta {
}
final void resolveReferences() {
@ -174,6 +177,11 @@ final class Snapshot extends AbstractMeta {
}
private class SnapshotDomain<T> extends DomainImpl<T> {
@ -320,6 +328,17 @@ final class Snapshot extends AbstractMeta {

View File

@ -68,6 +68,29 @@ package org.jooq.impl;