@Override
public PostgresStatement finishGenerating(PostgresServerSession server,
String sql, StatementNode stmt,
List<ParameterNode> params, int[] paramTypes) {
CopyStatementNode copyStmt = (CopyStatementNode)stmt;
String schemaName = copyStmt.getTableName().getSchemaName();
String tableName = copyStmt.getTableName().getTableName();
if (schemaName == null)
schemaName = server.getDefaultSchemaName();
toTable = server.getAIS().getTable(schemaName, tableName);
if (toTable == null)
throw new NoSuchTableException(schemaName, tableName,
copyStmt.getTableName());
if (copyStmt.getColumnList() == null)
toColumns = toTable.getColumns();
else {
toColumns = new ArrayList<>(copyStmt.getColumnList().size());
for (ResultColumn rc : copyStmt.getColumnList()) {
ColumnReference cref = rc.getReference();
Column column = toTable.getColumn(cref.getColumnName());
if (column == null)
throw new NoSuchColumnException(cref.getColumnName(), cref);
toColumns.add(column);
}
}
if (copyStmt.getFilename() != null)
fromFile = new File(copyStmt.getFilename());
format = copyStmt.getFormat();
if (format == null)
format = CopyStatementNode.Format.CSV;
switch (format) {
case CSV:
csvFormat = csvFormat(copyStmt, server);
if (copyStmt.isHeader()) {
skipRows = 1;
}
break;
case MYSQL_DUMP:
encoding = copyStmt.getEncoding();
if (encoding == null)
encoding = server.getMessenger().getEncoding();
break;
default:
throw new UnsupportedSQLException("COPY FORMAT " + format);
}
commitFrequency = copyStmt.getCommitFrequency();
if (commitFrequency == 0) {
commitFrequency = server.getTransactionPeriodicallyCommit() == ServerTransaction.PeriodicallyCommit.OFF ?
ExternalDataService.COMMIT_FREQUENCY_NEVER :
ExternalDataService.COMMIT_FREQUENCY_PERIODICALLY;
}
maxRetries = copyStmt.getMaxRetries();
return this;
}