/*
* Copyright (c) 2016, PostgreSQL Global Development Group
* See the LICENSE file in the project root for more information.
*/
package org.postgresql.replication.fluent;
import org.postgresql.replication.fluent.logical.ChainedLogicalStreamBuilder;
import org.postgresql.replication.fluent.physical.ChainedPhysicalStreamBuilder;
/**
* Start point for fluent API that build replication stream(logical or physical).
* Api not thread safe, and can be use only for crate single stream.
*/
public interface ChainedStreamBuilder {
/**
* Create logical replication stream that decode raw wal logs by output plugin to logical form.
* Default about logical decoding you can see by following link
* <a href="http://www.postgresql.org/docs/current/static/logicaldecoding-explanation.html">
* Logical Decoding Concepts
* </a>.
*
* Example usage:
* <pre>
* {@code
*
* PGReplicationStream stream =
* pgConnection
* .getReplicationAPI()
* .replicationStream()
* .logical()
* .withSlotName("test_decoding")
* .withSlotOption("include-xids", false)
* .withSlotOption("skip-empty-xacts", true)
* .start();
*
* while (true) {
* ByteBuffer buffer = stream.read();
* //process logical changes
* }
*
* }
* </pre>
* @return not null fluent api
*/
ChainedLogicalStreamBuilder logical();
/**
* Create physical replication stream for process wal logs in binary form.
*
* Example usage:
* <pre>
* {@code
*
* LogSequenceNumber lsn = getCurrentLSN();
*
* PGReplicationStream stream =
* pgConnection
* .getReplicationAPI()
* .replicationStream()
* .physical()
* .withStartPosition(lsn)
* .start();
*
* while (true) {
* ByteBuffer buffer = stream.read();
* //process binary WAL logs
* }
*
* }
* </pre>
* @return not null fluent api
*/
ChainedPhysicalStreamBuilder physical();
}