public CopyToStatement()

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();
    }
  }