All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.r2dbc.postgresql.client.PostgresStartupParameterProvider Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2022 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.r2dbc.postgresql.client;

import io.r2dbc.postgresql.message.frontend.StartupMessage;
import io.r2dbc.postgresql.util.Assert;
import reactor.util.annotation.Nullable;

import java.util.Map;
import java.util.TimeZone;

/**
 * {@link StartupMessage.StartupParameterProvider} for generic Postgres options.
 *
 * @since 1.0
 */
public final class PostgresStartupParameterProvider implements StartupMessage.StartupParameterProvider {

    private final String applicationName;

    private final TimeZone timeZone;

    @Nullable
    private final Map options;

    public PostgresStartupParameterProvider(String applicationName, TimeZone timeZone, @Nullable Map options) {
        this.applicationName = Assert.requireNonNull(applicationName, "applicationName must not be null");
        this.timeZone = Assert.requireNonNull(timeZone, "timeZone must not be null");
        this.options = options;
    }

    public PostgresStartupParameterProvider(String applicationName, TimeZone timeZone, ConnectionSettings settings) {
        this.applicationName = Assert.requireNonNull(applicationName, "applicationName must not be null");
        this.timeZone = Assert.requireNonNull(timeZone, "timeZone must not be null");
        this.options = settings.getStartupOptions();
    }

    @Override
    public void accept(StartupMessage.ParameterWriter writer) {

        writer.write("application_name", this.applicationName);
        writer.write("client_encoding", "utf8");
        writer.write("DateStyle", "ISO");
        writer.write("extra_float_digits", "2");
        writer.write("TimeZone", TimeZoneUtils.createPostgresTimeZone(this.timeZone));

        if (this.options != null) {
            for (Map.Entry option : this.options.entrySet()) {
                writer.write(option.getKey(), option.getValue());
            }
        }

    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy