/* * Copyright (c) 2016, PostgreSQL Global Development Group * See the LICENSE file in the project root for more information. */ package org.postgresql.replication.fluent.logical; import org.postgresql.core.BaseConnection; import org.postgresql.replication.fluent.AbstractCreateSlotBuilder; import java.sql.SQLException; import java.sql.Statement; public class LogicalCreateSlotBuilder extends AbstractCreateSlotBuilder<ChainedLogicalCreateSlotBuilder> implements ChainedLogicalCreateSlotBuilder { private String outputPlugin; private BaseConnection connection; public LogicalCreateSlotBuilder(BaseConnection connection) { this.connection = connection; } @Override protected ChainedLogicalCreateSlotBuilder self() { return this; } @Override public ChainedLogicalCreateSlotBuilder withOutputPlugin(String outputPlugin) { this.outputPlugin = outputPlugin; return self(); } @Override public void make() throws SQLException { if (outputPlugin == null || outputPlugin.isEmpty()) { throw new IllegalArgumentException( "OutputPlugin required parameter for logical replication slot"); } if (slotName == null || slotName.isEmpty()) { throw new IllegalArgumentException("Replication slotName can't be null"); } Statement statement = connection.createStatement(); try { statement.execute(String.format("CREATE_REPLICATION_SLOT %s LOGICAL %s", slotName, outputPlugin)); } finally { statement.close(); } } }