[jOOQ/jOOQ#11979] Add Configuration.deriveSettings(Function<Settings, Settings>)
This commit is contained in:
parent
ebe2a63a84
commit
431b7591df
@ -357,7 +357,6 @@ public abstract class AbstractDatabase implements Database {
|
||||
return DSL.using(configuration);
|
||||
}
|
||||
else {
|
||||
final Settings newSettings = SettingsTools.clone(configuration.settings()).withRenderFormatted(true);
|
||||
final ExecuteListener newListener = new DefaultExecuteListener() {
|
||||
|
||||
class SQLPerformanceWarning extends Exception {}
|
||||
@ -457,10 +456,11 @@ public abstract class AbstractDatabase implements Database {
|
||||
}
|
||||
|
||||
private String formatted(Query query) {
|
||||
return DSL.using(configuration.derive(newSettings)).renderInlined(query);
|
||||
return configuration.deriveSettings(s -> s.withRenderFormatted(true)).dsl().renderInlined(query);
|
||||
}
|
||||
};
|
||||
return DSL.using(configuration.deriveAppending(newListener));
|
||||
|
||||
return configuration.deriveAppending(newListener).dsl();
|
||||
}
|
||||
}
|
||||
|
||||
@ -3042,15 +3042,13 @@ public abstract class AbstractDatabase implements Database {
|
||||
continue viewLoop;
|
||||
|
||||
onError(ERROR, "Error while parsing view", () -> {
|
||||
final Settings settings = SettingsTools.clone(create().settings())
|
||||
.withParseWithMetaLookups(ParseWithMetaLookups.THROW_ON_FAILURE);
|
||||
|
||||
// TODO: Add a Meta implementation that is based on jOOQ-meta
|
||||
final Meta meta = create().meta();
|
||||
final List<Param<?>> params = new ArrayList<>();
|
||||
final Configuration configuration = create()
|
||||
.configuration()
|
||||
.derive(settings)
|
||||
.deriveSettings(s -> s.withParseWithMetaLookups(ParseWithMetaLookups.THROW_ON_FAILURE))
|
||||
.derive((MetaProvider) () -> meta);
|
||||
|
||||
// [#8722] [#11054] Before a public API is available, use this internal, undocumented
|
||||
|
||||
@ -293,7 +293,7 @@ public class PostgresDatabase extends AbstractDatabase implements ResultQueryDat
|
||||
try {
|
||||
return create()
|
||||
.configuration()
|
||||
.derive(SettingsTools.clone(create().settings()).withParseUnknownFunctions(ParseUnknownFunctions.IGNORE))
|
||||
.deriveSettings(s -> s.withParseUnknownFunctions(ParseUnknownFunctions.IGNORE))
|
||||
.dsl()
|
||||
.parser().parseField(string).getName();
|
||||
}
|
||||
|
||||
@ -299,7 +299,7 @@ public class SQLiteDatabase extends AbstractDatabase {
|
||||
protected void loadCheckConstraints(DefaultRelations r) throws SQLException {
|
||||
DSLContext ctx = create()
|
||||
.configuration()
|
||||
.derive(SettingsTools.clone(create().settings()).withInterpreterDelayForeignKeyDeclarations(true))
|
||||
.deriveSettings(s -> s.withInterpreterDelayForeignKeyDeclarations(true))
|
||||
.dsl();
|
||||
|
||||
SchemaDefinition schema = getSchemata().get(0);
|
||||
|
||||
@ -46,6 +46,7 @@ import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
@ -1871,6 +1872,18 @@ public interface Configuration extends Serializable {
|
||||
@NotNull
|
||||
Configuration derive(Settings newSettings);
|
||||
|
||||
/**
|
||||
* Create a derived configuration from this one, with new settings
|
||||
* constructed from a clone of the current settings.
|
||||
*
|
||||
* @param newSettings A function producing the new settings to be contained
|
||||
* in the derived configuration based on a clone of the current
|
||||
* settings.
|
||||
* @return The derived configuration.
|
||||
*/
|
||||
@NotNull
|
||||
Configuration deriveSettings(Function<? super Settings, ? extends Settings> newSettings);
|
||||
|
||||
/**
|
||||
* Whether this is a commercial edition of jOOQ.
|
||||
*/
|
||||
|
||||
@ -193,7 +193,7 @@ abstract class AbstractQueryPart implements QueryPartInternal {
|
||||
|
||||
// [#8355] Subtypes may have null configuration
|
||||
Configuration configuration = Tools.configuration(configuration());
|
||||
return create(configuration.derive(SettingsTools.clone(configuration.settings()).withRenderFormatted(true))).renderInlined(this);
|
||||
return create(configuration.deriveSettings(s -> s.withRenderFormatted(true))).renderInlined(this);
|
||||
}
|
||||
catch (SQLDialectNotSupportedException e) {
|
||||
return "[ ... " + e.getMessage() + " ... ]";
|
||||
|
||||
@ -50,6 +50,7 @@ import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.function.Function;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
@ -93,6 +94,8 @@ import org.jooq.exception.ConfigurationException;
|
||||
import org.jooq.impl.ThreadLocalTransactionProvider.ThreadLocalConnectionProvider;
|
||||
import org.jooq.migrations.xml.jaxb.MigrationsType;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import io.r2dbc.spi.ConnectionFactory;
|
||||
|
||||
/**
|
||||
@ -1087,6 +1090,11 @@ public class DefaultConfiguration extends AbstractConfiguration {
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Configuration deriveSettings(Function<? super Settings, ? extends Settings> newSettings) {
|
||||
return derive(newSettings.apply(SettingsTools.clone(settings)));
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// XXX: Changing configurations
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
@ -80,8 +80,7 @@ final class DiagnosticsConnection extends DefaultConnection {
|
||||
super(configuration.connectionProvider().acquire());
|
||||
|
||||
this.configuration = configuration;
|
||||
this.normalisingRenderer = configuration.derive(
|
||||
SettingsTools.clone(configuration.settings())
|
||||
this.normalisingRenderer = configuration.deriveSettings(s -> s
|
||||
|
||||
// Forcing all inline parameters to be indexed helps find opportunities to use bind variables
|
||||
.withParamType(FORCE_INDEXED)
|
||||
|
||||
@ -1048,7 +1048,7 @@ final class MetaImpl extends AbstractMeta {
|
||||
try {
|
||||
type = type.defaultValue(dsl()
|
||||
.configuration()
|
||||
.derive(SettingsTools.clone(dsl().settings()).withParseUnknownFunctions(ParseUnknownFunctions.IGNORE))
|
||||
.deriveSettings(s -> s.withParseUnknownFunctions(ParseUnknownFunctions.IGNORE))
|
||||
.dsl()
|
||||
.parser()
|
||||
.parseField(defaultValue)
|
||||
|
||||
@ -511,8 +511,8 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
|
||||
// statements.
|
||||
if (TRUE.equals(configuration().data("org.jooq.ddl.parse-for-ddldatabase"))) {
|
||||
if (query instanceof Select) {
|
||||
String s =
|
||||
configuration().derive(SettingsTools.clone(configuration().settings())
|
||||
String sql =
|
||||
configuration().deriveSettings(s -> s
|
||||
.withRenderFormatted(false)
|
||||
.withRenderKeywordCase(RenderKeywordCase.LOWER)
|
||||
.withRenderNameCase(RenderNameCase.LOWER)
|
||||
@ -523,7 +523,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
|
||||
|
||||
// [#8910] special treatment for PostgreSQL pg_dump's curious
|
||||
// usage of the SET SCHEMA command
|
||||
Matcher matcher = P_SEARCH_PATH.matcher(s);
|
||||
Matcher matcher = P_SEARCH_PATH.matcher(sql);
|
||||
String schema;
|
||||
if (matcher.find())
|
||||
if (!StringUtils.isBlank(schema = matcher.group(2)))
|
||||
|
||||
@ -76,8 +76,7 @@ final class ParsingConnectionFactory implements ConnectionFactory {
|
||||
if (configuration.connectionFactory() instanceof NoConnectionFactory)
|
||||
throw new DetachedException("ConnectionProvider did not provide an R2DBC ConnectionFactory");
|
||||
|
||||
this.configuration = configuration.derive();
|
||||
this.configuration.set(setParamType(configuration.dialect(), configuration.settings()));
|
||||
this.configuration = configuration.deriveSettings(s -> setParamType(configuration.dialect(), s));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -615,8 +615,8 @@ final class R2DBC {
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
static final Rendered rendered(Configuration configuration, Query query) {
|
||||
DefaultRenderContext render = new DefaultRenderContext(configuration.derive(
|
||||
setParamType(configuration.dialect(), configuration.settings())
|
||||
DefaultRenderContext render = new DefaultRenderContext(configuration.deriveSettings(s ->
|
||||
setParamType(configuration.dialect(), s)
|
||||
));
|
||||
|
||||
return new Rendered(render.paramType(NAMED).visit(query).render(), render.bindValues(), render.skipUpdateCounts());
|
||||
@ -1244,8 +1244,6 @@ final class R2DBC {
|
||||
}
|
||||
|
||||
static final Settings setParamType(SQLDialect dialect, Settings settings) {
|
||||
settings = SettingsTools.clone(settings);
|
||||
|
||||
switch (dialect.family()) {
|
||||
case MYSQL:
|
||||
return settings
|
||||
|
||||
@ -41,6 +41,7 @@ import java.sql.Connection;
|
||||
import java.time.Clock;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.function.Function;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
@ -72,6 +73,8 @@ import org.jooq.VisitListenerProvider;
|
||||
import org.jooq.conf.Settings;
|
||||
import org.jooq.impl.AbstractConfiguration;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import io.r2dbc.spi.ConnectionFactory;
|
||||
|
||||
/**
|
||||
@ -542,4 +545,9 @@ public class MockConfiguration extends AbstractConfiguration {
|
||||
public Configuration derive(Settings newSettings) {
|
||||
return delegate.derive(newSettings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Configuration deriveSettings(Function<? super Settings, ? extends Settings> newSettings) {
|
||||
return delegate.deriveSettings(newSettings);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user