[jOOQ/jOOQ#16965] org.jooq.impl.Alias not Serializable, due to Lambda

wrapInParantheses
This commit is contained in:
Lukas Eder 2024-07-11 16:15:47 +02:00
parent 021dff0c52
commit 8085a92d2c
6 changed files with 28 additions and 21 deletions

View File

@ -141,13 +141,13 @@ final class Alias<Q extends QueryPart> extends AbstractQueryPart implements UEmp
final Q wrapping;
final Name alias;
final Name[] fieldAliases;
final Predicate<Context<?>> wrapInParentheses;
final boolean wrapInParentheses;
Alias(Q wrapped, Q wrapping, Name alias) {
this(wrapped, wrapping, alias, null, c -> false);
this(wrapped, wrapping, alias, null, false);
}
Alias(Q wrapped, Q wrapping, Name alias, Name[] fieldAliases, Predicate<Context<?>> wrapInParentheses) {
Alias(Q wrapped, Q wrapping, Name alias, Name[] fieldAliases, boolean wrapInParentheses) {
this.wrapped = wrapped;
this.wrapping = wrapping;
this.alias = alias;
@ -411,12 +411,10 @@ final class Alias<Q extends QueryPart> extends AbstractQueryPart implements UEmp
}
private final void toSQLWrapped(Context<?> ctx) {
boolean wrap = wrapInParentheses.test(ctx);
if (wrap)
ctx.data(DATA_WRAP_DERIVED_TABLES_IN_PARENTHESES, false, c -> toSQLWrapped(c, wrap));
if (wrapInParentheses)
ctx.data(DATA_WRAP_DERIVED_TABLES_IN_PARENTHESES, false, c -> toSQLWrapped(c, wrapInParentheses));
else
toSQLWrapped(ctx, wrap);
toSQLWrapped(ctx, wrapInParentheses);
}
private final void toSQLWrapped(Context<?> ctx, boolean wrap) {

View File

@ -108,12 +108,12 @@ final class AliasedSelect<R extends Record> extends AbstractTable<R> implements
else
return query.asTable(alias, aliases);
else
return new TableAlias<>(this, alias, c -> true);
return new TableAlias<>(this, alias, true);
}
@Override
public final Table<R> as(Name alias, Name... fieldAliases) {
return new TableAlias<>(this, alias, fieldAliases, c -> true);
return new TableAlias<>(this, alias, fieldAliases, true);
}
@Override

View File

@ -86,12 +86,12 @@ class DerivedTable<R extends Record> extends AbstractTable<R> implements QOM.Der
@Override
public final Table<R> as(Name alias) {
return new TableAlias<>(this, alias, c -> true);
return new TableAlias<>(this, alias, true);
}
@Override
public final Table<R> as(Name alias, Name... fieldAliases) {
return new TableAlias<>(this, alias, fieldAliases, c -> true);
return new TableAlias<>(this, alias, fieldAliases, true);
}
@Override

View File

@ -717,12 +717,12 @@ abstract class JoinTable<J extends JoinTable<J>> extends AbstractJoinTable<J> {
@Override
public final Table<Record> as(Name alias) {
return new TableAlias<>(this, alias, c -> true);
return new TableAlias<>(this, alias, true);
}
@Override
public final Table<Record> as(Name alias, Name... fieldAliases) {
return new TableAlias<>(this, alias, fieldAliases, c -> true);
return new TableAlias<>(this, alias, fieldAliases, true);
}
@Override

View File

@ -37,6 +37,9 @@
*/
package org.jooq.impl;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.function.Supplier;
/**
@ -60,14 +63,14 @@ import java.util.function.Supplier;
*
* @author Lukas Eder
*/
final class Lazy<T> {
final class Lazy<T> implements Serializable {
static <T> Lazy<T> of(Supplier<? extends T> supplier) {
return new Lazy<>(supplier);
}
private final Supplier<? extends T> supplier;
private volatile T value;
private transient Supplier<? extends T> supplier;
private volatile T value;
private Lazy(Supplier<? extends T> supplier) {
this.supplier = supplier;
@ -84,4 +87,10 @@ final class Lazy<T> {
return value;
}
private void writeObject(ObjectOutputStream oos) throws IOException {
get();
oos.defaultWriteObject();
}
}

View File

@ -74,18 +74,18 @@ implements
transient FieldsImpl<R> aliasedFields;
TableAlias(Table<R> table, Name alias) {
this(table, alias, null, c -> false);
this(table, alias, null, false);
}
TableAlias(Table<R> table, Name alias, Predicate<Context<?>> wrapInParentheses) {
TableAlias(Table<R> table, Name alias, boolean wrapInParentheses) {
this(table, alias, null, wrapInParentheses);
}
TableAlias(Table<R> table, Name alias, Name[] fieldAliases) {
this(table, alias, fieldAliases, c -> false);
this(table, alias, fieldAliases, false);
}
TableAlias(Table<R> table, Name alias, Name[] fieldAliases, Predicate<Context<?>> wrapInParentheses) {
TableAlias(Table<R> table, Name alias, Name[] fieldAliases, boolean wrapInParentheses) {
super(table.getOptions(), alias, table.getSchema());
this.alias = new Alias<>(table, this, alias, fieldAliases, wrapInParentheses);