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

io.r2dbc.postgresql.api.PostgresqlConnection Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2019 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.api;

import io.netty.buffer.ByteBuf;
import io.r2dbc.postgresql.message.frontend.CancelRequest;
import io.r2dbc.spi.Connection;
import io.r2dbc.spi.IsolationLevel;
import io.r2dbc.spi.R2dbcNonTransientResourceException;
import io.r2dbc.spi.TransactionDefinition;
import io.r2dbc.spi.ValidationDepth;
import org.reactivestreams.Publisher;
import org.reactivestreams.Subscriber;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.time.Duration;

/**
 * A {@link Connection} for connecting to a PostgreSQL database.
 */
public interface PostgresqlConnection extends Connection {

    /**
     * {@inheritDoc}
     */
    @Override
    Mono beginTransaction();

    /**
     * {@inheritDoc}
     *
     * @see PostgresTransactionDefinition
     */
    @Override
    Mono beginTransaction(TransactionDefinition definition);

    /**
     * {@inheritDoc}
     */
    @Override
    Mono close();

    /**
     * {@inheritDoc}
     */
    @Override
    Mono commitTransaction();

    /**
     * Obtain a {@link CopyInBuilder} to configure a {@code COPY FROM STDIN} operation for very fast copying into a database table.
     *
     * @param sql the COPY … FROM STDIN sql statement
     * @return the builder to configure the copy operation.
     * @since 1.0
     */
    CopyInBuilder copyIn(String sql);

    /**
     * Use {@code COPY FROM STDIN} for very fast copying into a database table.
     *
     * @param sql   the COPY … FROM STDIN sql statement
     * @param stdin the ByteBuf publisher
     * @return a {@link Mono} with the amount of rows inserted
     * @see CopyInBuilder
     * @since 1.0
     */
    default Mono copyIn(String sql, Publisher stdin) {
        return copyIn(sql).from(stdin).build();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    PostgresqlBatch createBatch();

    /**
     * {@inheritDoc}
     */
    @Override
    Mono createSavepoint(String name);

    /**
     * {@inheritDoc}
     */
    @Override
    PostgresqlStatement createStatement(String sql);

    /**
     * Return a {@link Flux} of {@link Notification} received from {@code LISTEN} registrations. The stream is a hot stream producing messages as they are received. Notifications received by this
     * connection are published as they are received. When the client gets {@link #close() closed}, the subscription {@link Subscriber#onComplete() completes normally}. Otherwise (transport
     * connection disconnected unintentionally) with an {@link R2dbcNonTransientResourceException error}.
     *
     * @return a hot {@link Flux} of {@link Notification Notifications}
     */
    Flux getNotifications();

    /**
     * Cancel currently running query by sending {@link CancelRequest} to a server.
     *
     * @return a {@link Mono} that indicates that a cancel frame was delivered to the backend
     * @since 0.9
     */
    Mono cancelRequest();

    /**
     * {@inheritDoc}
     */
    @Override
    PostgresqlConnectionMetadata getMetadata();

    /**
     * {@inheritDoc}
     */
    @Override
    IsolationLevel getTransactionIsolationLevel();

    /**
     * {@inheritDoc}
     */
    @Override
    boolean isAutoCommit();

    /**
     * {@inheritDoc}
     */
    @Override
    Mono releaseSavepoint(String name);

    /**
     * {@inheritDoc}
     */
    @Override
    Mono rollbackTransaction();

    /**
     * {@inheritDoc}
     */
    @Override
    Mono rollbackTransactionToSavepoint(String name);

    /**
     * {@inheritDoc}
     */
    @Override
    Mono setAutoCommit(boolean autoCommit);

    /**
     * Sets Lock Acquisition Timeout through {@code SET LOCK_TIMEOUT}.
     *
     * @return a {@link Mono} that indicates that a lockTimeout frame was delivered to the backend
     * @since 0.8.9
     */
    Mono setLockWaitTimeout(Duration lockTimeout);

    /**
     * Sets Statement Timeout through {@code SET STATEMENT_TIMEOUT}.
     *
     * @return a {@link Mono} that indicates that a statementTimeout frame was delivered to the backend
     * @since 0.8.9
     */
    Mono setStatementTimeout(Duration statementTimeout);

    /**
     * {@inheritDoc}
     */
    @Override
    Mono setTransactionIsolationLevel(IsolationLevel isolationLevel);

    /**
     * {@inheritDoc}
     */
    @Override
    String toString();

    /**
     * {@inheritDoc}
     */
    @Override
    Mono validate(ValidationDepth depth);

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy