in src/main/java/com/google/cloud/spanner/pgadapter/statements/CopyToStatement.java [61:136]
public CopyToStatement(
ConnectionHandler connectionHandler,
OptionsMetadata options,
String name,
ParsedCopyStatement parsedCopyStatement) {
super(
name,
new IntermediatePreparedStatement(
connectionHandler,
options,
name,
NO_PARAMETER_TYPES,
createParsedStatement(parsedCopyStatement),
createSelectStatement(parsedCopyStatement)),
NO_PARAMS,
NO_FORMAT_CODES,
NO_FORMAT_CODES);
this.parsedCopyStatement = parsedCopyStatement;
if (parsedCopyStatement.format == CopyStatement.Format.BINARY) {
this.csvFormat = null;
} else {
CSVFormat baseFormat =
parsedCopyStatement.format == Format.TEXT
? CSVFormat.POSTGRESQL_TEXT
: CSVFormat.POSTGRESQL_CSV;
CSVFormat.Builder formatBuilder =
CSVFormat.Builder.create(baseFormat)
.setNullString(
parsedCopyStatement.nullString == null
? baseFormat.getNullString()
: parsedCopyStatement.nullString)
.setRecordSeparator('\n')
.setDelimiter(
parsedCopyStatement.delimiter == null
? baseFormat.getDelimiterString().charAt(0)
: parsedCopyStatement.delimiter)
.setQuote(
parsedCopyStatement.quote == null
? baseFormat.getQuoteCharacter()
: parsedCopyStatement.quote)
.setEscape(
parsedCopyStatement.escape == null
? baseFormat.getEscapeCharacter()
: parsedCopyStatement.escape);
if (parsedCopyStatement.format == Format.TEXT) {
formatBuilder.setQuoteMode(QuoteMode.NONE);
} else {
if (parsedCopyStatement.forceQuote == null) {
formatBuilder.setQuoteMode(QuoteMode.MINIMAL);
} else if (parsedCopyStatement.forceQuote.isEmpty()) {
formatBuilder.setQuoteMode(QuoteMode.ALL_NON_NULL);
} else {
// The CSV parser does not support different quote modes per column.
throw PGExceptionFactory.newPGException(
"PGAdapter does not support force_quote modes per column", SQLState.InternalError);
}
}
if (parsedCopyStatement.header) {
if (parsedCopyStatement.columns == null) {
formatBuilder.setHeader(
retrieveHeader(
connectionHandler
.getExtendedQueryProtocolHandler()
.getBackendConnection()
.getSpannerConnection(),
parsedCopyStatement));
} else {
formatBuilder.setHeader(
parsedCopyStatement.columns.stream()
.map(TableOrIndexName::getUnquotedName)
.toArray(String[]::new));
}
}
this.csvFormat = formatBuilder.build();
}
}