/* * 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 * * http://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 com.facebook.presto.plugin.postgresql; import com.facebook.presto.plugin.jdbc.BaseJdbcClient; import com.facebook.presto.plugin.jdbc.BaseJdbcConfig; import com.facebook.presto.plugin.jdbc.JdbcConnectorId; import com.facebook.presto.plugin.jdbc.JdbcOutputTableHandle; import com.google.common.base.Throwables; import org.postgresql.Driver; import javax.inject.Inject; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class PostgreSqlClient extends BaseJdbcClient { @Inject public PostgreSqlClient(JdbcConnectorId connectorId, BaseJdbcConfig config) throws SQLException { super(connectorId, config, "\"", new Driver()); } @Override public void commitCreateTable(JdbcOutputTableHandle handle) { // PostgreSQL does not allow qualifying the target of a rename StringBuilder sql = new StringBuilder() .append("ALTER TABLE ") .append(quoted(handle.getCatalogName(), handle.getSchemaName(), handle.getTemporaryTableName())) .append(" RENAME TO ") .append(quoted(handle.getTableName())); try (Connection connection = getConnection(handle)) { execute(connection, sql.toString()); } catch (SQLException e) { throw Throwables.propagate(e); } } @Override public PreparedStatement getPreparedStatement(Connection connection, String sql) throws SQLException { connection.setAutoCommit(false); PreparedStatement statement = connection.prepareStatement(sql); statement.setFetchSize(1000); return statement; } @Override protected ResultSet getTables(Connection connection, String schemaName, String tableName) throws SQLException { DatabaseMetaData metadata = connection.getMetaData(); String escape = metadata.getSearchStringEscape(); return metadata.getTables( connection.getCatalog(), escapeNamePattern(schemaName, escape), escapeNamePattern(tableName, escape), new String[] {"TABLE", "VIEW", "MATERIALIZED VIEW"}); } }