[jOOQ/jOOQ#10546] Added Meta.filterUniqueKeys(), filterForeignKeys()

This commit is contained in:
Lukas Eder 2020-11-06 17:41:30 +01:00
parent a68a20cb0f
commit 89aee4ffeb
3 changed files with 129 additions and 12 deletions

View File

@ -407,6 +407,18 @@ public interface Meta extends Scope {
@NotNull
Meta filterPrimaryKeys(Predicate<? super UniqueKey<?>> filter);
/**
* Create a wrapper {@link Meta} instance filtering out some unique keys.
*/
@NotNull
Meta filterUniqueKeys(Predicate<? super UniqueKey<?>> filter);
/**
* Create a wrapper {@link Meta} instance filtering out some foreign keys.
*/
@NotNull
Meta filterForeignKeys(Predicate<? super ForeignKey<?, ?>> filter);
/**
* Create a wrapper {@link Meta} instance filtering out some indexes.
*/

View File

@ -516,6 +516,8 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
null,
null,
null,
null
);
}
@ -530,6 +532,8 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
null,
null,
null,
null
);
}
@ -544,6 +548,8 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
null,
null,
null,
null
);
}
@ -558,6 +564,8 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
filter,
null,
null,
null,
null,
null
);
}
@ -572,6 +580,8 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
filter,
null,
null,
null,
null
);
}
@ -586,6 +596,40 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
filter,
null,
null,
null
);
}
@Override
public Meta filterUniqueKeys(Predicate<? super UniqueKey<?>> filter) {
return new FilteredMeta(
this,
null,
null,
null,
null,
null,
null,
filter,
null,
null
);
}
@Override
public Meta filterForeignKeys(Predicate<? super ForeignKey<?, ?>> filter) {
return new FilteredMeta(
this,
null,
null,
null,
null,
null,
null,
null,
filter,
null
);
}
@ -600,6 +644,8 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
null,
null,
null,
null,
null,
filter
);
}

View File

@ -68,16 +68,18 @@ final class FilteredMeta extends AbstractMeta {
/**
* Generated UID
*/
private static final long serialVersionUID = 2589476339574534267L;
private static final long serialVersionUID = 2589476339574534267L;
private final AbstractMeta meta;
private final Predicate<? super Catalog> catalogFilter;
private final Predicate<? super Schema> schemaFilter;
private final Predicate<? super Table<?>> tableFilter;
private final Predicate<? super Domain<?>> domainFilter;
private final Predicate<? super Sequence<?>> sequenceFilter;
private final Predicate<? super UniqueKey<?>> primaryKeyFilter;
private final Predicate<? super Index> indexFilter;
private final AbstractMeta meta;
private final Predicate<? super Catalog> catalogFilter;
private final Predicate<? super Schema> schemaFilter;
private final Predicate<? super Table<?>> tableFilter;
private final Predicate<? super Domain<?>> domainFilter;
private final Predicate<? super Sequence<?>> sequenceFilter;
private final Predicate<? super UniqueKey<?>> primaryKeyFilter;
private final Predicate<? super UniqueKey<?>> uniqueKeyFilter;
private final Predicate<? super ForeignKey<?, ?>> foreignKeyFilter;
private final Predicate<? super Index> indexFilter;
FilteredMeta(
AbstractMeta meta,
@ -87,6 +89,8 @@ final class FilteredMeta extends AbstractMeta {
Predicate<? super Domain<?>> domainFilter,
Predicate<? super Sequence<?>> sequenceFilter,
Predicate<? super UniqueKey<?>> primaryKeyFilter,
Predicate<? super UniqueKey<?>> uniqueKeyFilter,
Predicate<? super ForeignKey<?, ?>> foreignKeyFilter,
Predicate<? super Index> indexFilter
) {
super(meta.configuration());
@ -98,6 +102,8 @@ final class FilteredMeta extends AbstractMeta {
this.domainFilter = domainFilter;
this.sequenceFilter = sequenceFilter;
this.primaryKeyFilter = primaryKeyFilter;
this.uniqueKeyFilter = uniqueKeyFilter;
this.foreignKeyFilter = foreignKeyFilter;
this.indexFilter = indexFilter;
}
@ -122,6 +128,8 @@ final class FilteredMeta extends AbstractMeta {
domainFilter,
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
foreignKeyFilter,
indexFilter
);
}
@ -136,6 +144,8 @@ final class FilteredMeta extends AbstractMeta {
domainFilter,
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
foreignKeyFilter,
indexFilter
);
}
@ -150,6 +160,8 @@ final class FilteredMeta extends AbstractMeta {
domainFilter,
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
foreignKeyFilter,
indexFilter
);
}
@ -164,6 +176,8 @@ final class FilteredMeta extends AbstractMeta {
domainFilter != null ? new And<>(domainFilter, filter) : filter,
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
foreignKeyFilter,
indexFilter
);
}
@ -178,6 +192,8 @@ final class FilteredMeta extends AbstractMeta {
domainFilter,
sequenceFilter != null ? new And<>(sequenceFilter, filter) : filter,
primaryKeyFilter,
uniqueKeyFilter,
foreignKeyFilter,
indexFilter
);
}
@ -192,6 +208,40 @@ final class FilteredMeta extends AbstractMeta {
domainFilter,
sequenceFilter,
primaryKeyFilter != null ? new And<>(primaryKeyFilter, filter) : filter,
uniqueKeyFilter,
foreignKeyFilter,
indexFilter
);
}
@Override
public final Meta filterUniqueKeys(Predicate<? super UniqueKey<?>> filter) {
return new FilteredMeta(
meta,
catalogFilter,
schemaFilter,
tableFilter,
domainFilter,
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter != null ? new And<>(uniqueKeyFilter, filter) : filter,
foreignKeyFilter,
indexFilter
);
}
@Override
public final Meta filterForeignKeys(Predicate<? super ForeignKey<?, ?>> filter) {
return new FilteredMeta(
meta,
catalogFilter,
schemaFilter,
tableFilter,
domainFilter,
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
foreignKeyFilter != null ? new And<>(foreignKeyFilter, filter) : filter,
indexFilter
);
}
@ -206,6 +256,8 @@ final class FilteredMeta extends AbstractMeta {
domainFilter,
sequenceFilter,
primaryKeyFilter,
uniqueKeyFilter,
foreignKeyFilter,
indexFilter != null ? new And<>(indexFilter, filter) : filter
);
}
@ -348,8 +400,9 @@ final class FilteredMeta extends AbstractMeta {
if (uniqueKeys == null) {
uniqueKeys = new ArrayList<>();
for (UniqueKey<R> key : delegate.getUniqueKeys())
uniqueKeys.add(key(key));
for (UniqueKey<R> uk : delegate.getUniqueKeys())
if (uniqueKeyFilter == null || uniqueKeyFilter.test(uk))
uniqueKeys.add(key(uk));
UniqueKey<R> pk = delegate.getPrimaryKey();
if (pk != null)
@ -389,10 +442,16 @@ final class FilteredMeta extends AbstractMeta {
fkLoop:
for (ForeignKey<R, ?> fk : delegate.getReferences()) {
UniqueKey<?> uk = lookupUniqueKey(fk);
if (foreignKeyFilter != null && !foreignKeyFilter.test(fk))
continue fkLoop;
UniqueKey<?> uk = lookupUniqueKey(fk);
if (uk == null)
continue fkLoop;
else if (uk.isPrimary() && primaryKeyFilter != null && !primaryKeyFilter.test(uk))
continue fkLoop;
else if (!uk.isPrimary() && uniqueKeyFilter != null && !uniqueKeyFilter.test(uk))
continue fkLoop;
TableField<R, ?>[] fields1 = fk.getFieldsArray();
TableField<R, ?>[] fields2 = new TableField[fields1.length];