parse
COPY t FROM STDIN
----
COPY t FROM STDIN
COPY t FROM STDIN -- fully parenthesized
COPY t FROM STDIN -- literals removed
COPY _ FROM STDIN -- identifiers removed

parse
COPY t (a, b, c) FROM STDIN
----
COPY t (a, b, c) FROM STDIN
COPY t (a, b, c) FROM STDIN -- fully parenthesized
COPY t (a, b, c) FROM STDIN -- literals removed
COPY _ (_, _, _) FROM STDIN -- identifiers removed

parse
COPY t FROM STDIN QUOTE '"'
----
COPY t FROM STDIN WITH (QUOTE '"') -- normalized!
COPY t FROM STDIN WITH (QUOTE ('"')) -- fully parenthesized
COPY t FROM STDIN WITH (QUOTE '_') -- literals removed
COPY _ FROM STDIN WITH (QUOTE '"') -- identifiers removed

parse
COPY crdb_internal.file_upload FROM STDIN WITH destination = 'filename'
----
COPY crdb_internal.file_upload FROM STDIN WITH (DESTINATION '*****') -- normalized!
COPY crdb_internal.file_upload FROM STDIN WITH (DESTINATION ('*****')) -- fully parenthesized
COPY crdb_internal.file_upload FROM STDIN WITH (DESTINATION '_') -- literals removed
COPY _._ FROM STDIN WITH (DESTINATION '*****') -- identifiers removed
COPY crdb_internal.file_upload FROM STDIN WITH (DESTINATION 'filename') -- passwords exposed

parse
COPY t (a, b, c) FROM STDIN WITH BINARY
----
COPY t (a, b, c) FROM STDIN WITH (FORMAT BINARY) -- normalized!
COPY t (a, b, c) FROM STDIN WITH (FORMAT BINARY) -- fully parenthesized
COPY t (a, b, c) FROM STDIN WITH (FORMAT BINARY) -- literals removed
COPY _ (_, _, _) FROM STDIN WITH (FORMAT BINARY) -- identifiers removed

parse
COPY crdb_internal.file_upload FROM STDIN WITH BINARY destination = 'filename'
----
COPY crdb_internal.file_upload FROM STDIN WITH (FORMAT BINARY, DESTINATION '*****') -- normalized!
COPY crdb_internal.file_upload FROM STDIN WITH (FORMAT BINARY, DESTINATION ('*****')) -- fully parenthesized
COPY crdb_internal.file_upload FROM STDIN WITH (FORMAT BINARY, DESTINATION '_') -- literals removed
COPY _._ FROM STDIN WITH (FORMAT BINARY, DESTINATION '*****') -- identifiers removed
COPY crdb_internal.file_upload FROM STDIN WITH (FORMAT BINARY, DESTINATION 'filename') -- passwords exposed

parse
COPY t (a, b, c) FROM STDIN WITH CSV DELIMITER ',' NULL 'NUL'
----
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER ',', NULL 'NUL') -- normalized!
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER (','), NULL ('NUL')) -- fully parenthesized
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER '_', NULL '_') -- literals removed
COPY _ (_, _, _) FROM STDIN WITH (FORMAT CSV, DELIMITER ',', NULL 'NUL') -- identifiers removed

parse
COPY t (a, b, c) FROM STDIN WITH CSV DELIMITER ',' destination = 'filename'
----
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER ',', DESTINATION '*****') -- normalized!
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER (','), DESTINATION ('*****')) -- fully parenthesized
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER '_', DESTINATION '_') -- literals removed
COPY _ (_, _, _) FROM STDIN WITH (FORMAT CSV, DELIMITER ',', DESTINATION '*****') -- identifiers removed
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER ',', DESTINATION 'filename') -- passwords exposed

parse
COPY t (a, b, c) FROM STDIN BINARY
----
COPY t (a, b, c) FROM STDIN WITH (FORMAT BINARY) -- normalized!
COPY t (a, b, c) FROM STDIN WITH (FORMAT BINARY) -- fully parenthesized
COPY t (a, b, c) FROM STDIN WITH (FORMAT BINARY) -- literals removed
COPY _ (_, _, _) FROM STDIN WITH (FORMAT BINARY) -- identifiers removed

parse
COPY t (a, b, c) FROM STDIN destination = 'filename' BINARY
----
COPY t (a, b, c) FROM STDIN WITH (FORMAT BINARY, DESTINATION '*****') -- normalized!
COPY t (a, b, c) FROM STDIN WITH (FORMAT BINARY, DESTINATION ('*****')) -- fully parenthesized
COPY t (a, b, c) FROM STDIN WITH (FORMAT BINARY, DESTINATION '_') -- literals removed
COPY _ (_, _, _) FROM STDIN WITH (FORMAT BINARY, DESTINATION '*****') -- identifiers removed
COPY t (a, b, c) FROM STDIN WITH (FORMAT BINARY, DESTINATION 'filename') -- passwords exposed

parse
COPY t (a, b, c) FROM STDIN destination = 'filename' CSV DELIMITER ' '
----
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER ' ', DESTINATION '*****') -- normalized!
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER (' '), DESTINATION ('*****')) -- fully parenthesized
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER '_', DESTINATION '_') -- literals removed
COPY _ (_, _, _) FROM STDIN WITH (FORMAT CSV, DELIMITER ' ', DESTINATION '*****') -- identifiers removed
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER ' ', DESTINATION 'filename') -- passwords exposed

parse
COPY t (a, b, c) FROM STDIN destination = 'filename' CSV DELIMITER ' ' ESCAPE 'x' HEADER ENCODING 'utf8'
----
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER ' ', ENCODING 'utf8', DESTINATION '*****', ESCAPE 'x', HEADER true) -- normalized!
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER (' '), ENCODING ('utf8'), DESTINATION ('*****'), ESCAPE ('x'), HEADER true) -- fully parenthesized
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER '_', ENCODING '_', DESTINATION '_', ESCAPE '_', HEADER true) -- literals removed
COPY _ (_, _, _) FROM STDIN WITH (FORMAT CSV, DELIMITER ' ', ENCODING 'utf8', DESTINATION '*****', ESCAPE 'x', HEADER true) -- identifiers removed
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER ' ', ENCODING 'utf8', DESTINATION 'filename', ESCAPE 'x', HEADER true) -- passwords exposed

parse
COPY t TO STDOUT
----
COPY t TO STDOUT
COPY t TO STDOUT -- fully parenthesized
COPY t TO STDOUT -- literals removed
COPY _ TO STDOUT -- identifiers removed

parse
COPY t TO STDOUT BINARY
----
COPY t TO STDOUT WITH (FORMAT BINARY) -- normalized!
COPY t TO STDOUT WITH (FORMAT BINARY) -- fully parenthesized
COPY t TO STDOUT WITH (FORMAT BINARY) -- literals removed
COPY _ TO STDOUT WITH (FORMAT BINARY) -- identifiers removed

error
COPY t TO 'file'
----
at or near "file": syntax error: unimplemented: this syntax
DETAIL: source SQL:
COPY t TO 'file'
          ^
HINT: You have attempted to use a feature that is not yet implemented.
See: https://go.crdb.dev/issue-v/97181/


parse
COPY t (a, b, c) TO STDOUT
----
COPY t (a, b, c) TO STDOUT
COPY t (a, b, c) TO STDOUT -- fully parenthesized
COPY t (a, b, c) TO STDOUT -- literals removed
COPY _ (_, _, _) TO STDOUT -- identifiers removed

parse
COPY (SELECT * FROM t) TO STDOUT
----
COPY (SELECT * FROM t) TO STDOUT
COPY (SELECT (*) FROM t) TO STDOUT -- fully parenthesized
COPY (SELECT * FROM t) TO STDOUT -- literals removed
COPY (SELECT * FROM _) TO STDOUT -- identifiers removed

parse
COPY (SELECT * FROM t) TO STDOUT BINARY
----
COPY (SELECT * FROM t) TO STDOUT WITH (FORMAT BINARY) -- normalized!
COPY (SELECT (*) FROM t) TO STDOUT WITH (FORMAT BINARY) -- fully parenthesized
COPY (SELECT * FROM t) TO STDOUT WITH (FORMAT BINARY) -- literals removed
COPY (SELECT * FROM _) TO STDOUT WITH (FORMAT BINARY) -- identifiers removed

error
COPY (SELECT * FROM t) TO 'file'
----
at or near "file": syntax error: unimplemented: this syntax
DETAIL: source SQL:
COPY (SELECT * FROM t) TO 'file'
                          ^
HINT: You have attempted to use a feature that is not yet implemented.
See: https://go.crdb.dev/issue-v/96590/

parse
COPY "copytab" FROM STDIN (DELIMITER '.', FORMAT csv)
----
COPY copytab FROM STDIN WITH (FORMAT CSV, DELIMITER '.') -- normalized!
COPY copytab FROM STDIN WITH (FORMAT CSV, DELIMITER ('.')) -- fully parenthesized
COPY copytab FROM STDIN WITH (FORMAT CSV, DELIMITER '_') -- literals removed
COPY _ FROM STDIN WITH (FORMAT CSV, DELIMITER '.') -- identifiers removed

parse
COPY "copytab" FROM STDIN (FORMAT text, HEADER)
----
COPY copytab FROM STDIN WITH (FORMAT TEXT, HEADER true) -- normalized!
COPY copytab FROM STDIN WITH (FORMAT TEXT, HEADER true) -- fully parenthesized
COPY copytab FROM STDIN WITH (FORMAT TEXT, HEADER true) -- literals removed
COPY _ FROM STDIN WITH (FORMAT TEXT, HEADER true) -- identifiers removed

parse
COPY "copytab" FROM STDIN (HEADER true, ESCAPE '%')
----
COPY copytab FROM STDIN WITH (ESCAPE '%', HEADER true) -- normalized!
COPY copytab FROM STDIN WITH (ESCAPE ('%'), HEADER true) -- fully parenthesized
COPY copytab FROM STDIN WITH (ESCAPE '_', HEADER true) -- literals removed
COPY _ FROM STDIN WITH (ESCAPE '%', HEADER true) -- identifiers removed

parse
COPY "copytab" FROM STDIN WITH (ESCAPE '%', HEADER false, NULL '.')
----
COPY copytab FROM STDIN WITH (NULL '.', ESCAPE '%', HEADER false) -- normalized!
COPY copytab FROM STDIN WITH (NULL ('.'), ESCAPE ('%'), HEADER false) -- fully parenthesized
COPY copytab FROM STDIN WITH (NULL '_', ESCAPE '_', HEADER false) -- literals removed
COPY _ FROM STDIN WITH (NULL '.', ESCAPE '%', HEADER false) -- identifiers removed

parse
COPY "copytab" FROM STDIN (FORMAT     binary)
----
COPY copytab FROM STDIN WITH (FORMAT BINARY) -- normalized!
COPY copytab FROM STDIN WITH (FORMAT BINARY) -- fully parenthesized
COPY copytab FROM STDIN WITH (FORMAT BINARY) -- literals removed
COPY _ FROM STDIN WITH (FORMAT BINARY) -- identifiers removed

parse
COPY "copytab" FROM STDIN (FORMAT  'text')
----
COPY copytab FROM STDIN WITH (FORMAT TEXT) -- normalized!
COPY copytab FROM STDIN WITH (FORMAT TEXT) -- fully parenthesized
COPY copytab FROM STDIN WITH (FORMAT TEXT) -- literals removed
COPY _ FROM STDIN WITH (FORMAT TEXT) -- identifiers removed

parse
COPY "copytab" FROM STDIN (FORMAT  'csv')
----
COPY copytab FROM STDIN WITH (FORMAT CSV) -- normalized!
COPY copytab FROM STDIN WITH (FORMAT CSV) -- fully parenthesized
COPY copytab FROM STDIN WITH (FORMAT CSV) -- literals removed
COPY _ FROM STDIN WITH (FORMAT CSV) -- identifiers removed

parse
COPY "copytab" FROM STDIN (FORMAT  'binary')
----
COPY copytab FROM STDIN WITH (FORMAT BINARY) -- normalized!
COPY copytab FROM STDIN WITH (FORMAT BINARY) -- fully parenthesized
COPY copytab FROM STDIN WITH (FORMAT BINARY) -- literals removed
COPY _ FROM STDIN WITH (FORMAT BINARY) -- identifiers removed

# Postgres does not normalize the format name to lower case, so this test
# verifies that CRDB also does not.
error
COPY "copytab" FROM STDIN (FORMAT  'TEXT')
----
at or near "TEXT": syntax error: COPY format "TEXT" not recognized
DETAIL: source SQL:
COPY "copytab" FROM STDIN (FORMAT  'TEXT')
                                   ^

error
COPY "copytab" FROM STDIN (FORMAT  'abc')
----
at or near "abc": syntax error: COPY format "abc" not recognized
DETAIL: source SQL:
COPY "copytab" FROM STDIN (FORMAT  'abc')
                                   ^

error
COPY "copytab" FROM STDIN (FORMAT     csv, DELIMITER '/', ESCAPE '.', DELIMITER '%')
----
at or near "%": syntax error: delimiter option specified multiple times
DETAIL: source SQL:
COPY "copytab" FROM STDIN (FORMAT     csv, DELIMITER '/', ESCAPE '.', DELIMITER '%')
                                                                                ^

error
COPY "copytab" FROM STDIN (FORMAT text, HEADER, FORMAT csv)
----
at or near "csv": syntax error: format option specified multiple times
DETAIL: source SQL:
COPY "copytab" FROM STDIN (FORMAT text, HEADER, FORMAT csv)
                                                       ^

error
COPY "copytab" FROM STDIN (ESCAPE '%', HEADER false, NULL '.', FORCE_NOT_NULL (column))
----
at or near "(": syntax error: unimplemented: this syntax
DETAIL: source SQL:
COPY "copytab" FROM STDIN (ESCAPE '%', HEADER false, NULL '.', FORCE_NOT_NULL (column))
                                                                              ^
HINT: You have attempted to use a feature that is not yet implemented.
See: https://go.crdb.dev/issue-v/41608/

error
COPY "copytab" FROM STDIN (FORMAT CSV, FORCE_NULL (c1, c2, c3))
----
at or near "(": syntax error: unimplemented: this syntax
DETAIL: source SQL:
COPY "copytab" FROM STDIN (FORMAT CSV, FORCE_NULL (c1, c2, c3))
                                                  ^
HINT: You have attempted to use a feature that is not yet implemented.
See: https://go.crdb.dev/issue-v/41608/

error
COPY "copytab" FROM STDIN (ESCAPE '/',     FORCE_QUOTE (c1, c2))
----
at or near "(": syntax error: unimplemented: this syntax
DETAIL: source SQL:
COPY "copytab" FROM STDIN (ESCAPE '/',     FORCE_QUOTE (c1, c2))
                                                       ^
HINT: You have attempted to use a feature that is not yet implemented.
See: https://go.crdb.dev/issue-v/41608/

error
COPY "copytab" FROM STDIN (HEADER, OIDS)
----
at or near ")": syntax error: unimplemented: this syntax
DETAIL: source SQL:
COPY "copytab" FROM STDIN (HEADER, OIDS)
                                       ^
HINT: You have attempted to use a feature that is not yet implemented.
See: https://go.crdb.dev/issue-v/41608/

parse
COPY (SELECT * FROM t) TO STDOUT (FORMAT csv)
----
COPY (SELECT * FROM t) TO STDOUT WITH (FORMAT CSV) -- normalized!
COPY (SELECT (*) FROM t) TO STDOUT WITH (FORMAT CSV) -- fully parenthesized
COPY (SELECT * FROM t) TO STDOUT WITH (FORMAT CSV) -- literals removed
COPY (SELECT * FROM _) TO STDOUT WITH (FORMAT CSV) -- identifiers removed

parse
COPY (SELECT * FROM "tAb") TO STDOUT (FORMAT text, HEADER)
----
COPY (SELECT * FROM "tAb") TO STDOUT WITH (FORMAT TEXT, HEADER true) -- normalized!
COPY (SELECT (*) FROM "tAb") TO STDOUT WITH (FORMAT TEXT, HEADER true) -- fully parenthesized
COPY (SELECT * FROM "tAb") TO STDOUT WITH (FORMAT TEXT, HEADER true) -- literals removed
COPY (SELECT * FROM _) TO STDOUT WITH (FORMAT TEXT, HEADER true) -- identifiers removed

parse
COPY (SELECT c1, c2 FROM t) TO STDOUT (HEADER true, ESCAPE '%')
----
COPY (SELECT c1, c2 FROM t) TO STDOUT WITH (ESCAPE '%', HEADER true) -- normalized!
COPY (SELECT (c1), (c2) FROM t) TO STDOUT WITH (ESCAPE ('%'), HEADER true) -- fully parenthesized
COPY (SELECT c1, c2 FROM t) TO STDOUT WITH (ESCAPE '_', HEADER true) -- literals removed
COPY (SELECT _, _ FROM _) TO STDOUT WITH (ESCAPE '%', HEADER true) -- identifiers removed

parse
COPY (SELECT * FROM t) TO STDOUT (ESCAPE '%', HEADER false, NULL '.')
----
COPY (SELECT * FROM t) TO STDOUT WITH (NULL '.', ESCAPE '%', HEADER false) -- normalized!
COPY (SELECT (*) FROM t) TO STDOUT WITH (NULL ('.'), ESCAPE ('%'), HEADER false) -- fully parenthesized
COPY (SELECT * FROM t) TO STDOUT WITH (NULL '_', ESCAPE '_', HEADER false) -- literals removed
COPY (SELECT * FROM _) TO STDOUT WITH (NULL '.', ESCAPE '%', HEADER false) -- identifiers removed

parse
COPY (SELECT * FROM t) TO STDOUT (FORMAT binary, DELIMITER '.')
----
COPY (SELECT * FROM t) TO STDOUT WITH (FORMAT BINARY, DELIMITER '.') -- normalized!
COPY (SELECT (*) FROM t) TO STDOUT WITH (FORMAT BINARY, DELIMITER ('.')) -- fully parenthesized
COPY (SELECT * FROM t) TO STDOUT WITH (FORMAT BINARY, DELIMITER '_') -- literals removed
COPY (SELECT * FROM _) TO STDOUT WITH (FORMAT BINARY, DELIMITER '.') -- identifiers removed

error
COPY (SELECT * FROM t) TO STDOUT (HEADER false, FORMAT CSV, HEADER true)
----
at or near "true": syntax error: header option specified multiple times
DETAIL: source SQL:
COPY (SELECT * FROM t) TO STDOUT (HEADER false, FORMAT CSV, HEADER true)
                                                                   ^

error
COPY (SELECT * FROM t) TO STDOUT (ESCAPE '%', HEADER false, NULL '.', FORCE_NOT_NULL (column))
----
at or near "(": syntax error: unimplemented: this syntax
DETAIL: source SQL:
COPY (SELECT * FROM t) TO STDOUT (ESCAPE '%', HEADER false, NULL '.', FORCE_NOT_NULL (column))
                                                                                     ^
HINT: You have attempted to use a feature that is not yet implemented.
See: https://go.crdb.dev/issue-v/41608/

error
COPY (SELECT * FROM t) TO STDOUT (FORMAT CSV, FORCE_NULL (c1, c2, c3))
----
at or near "(": syntax error: unimplemented: this syntax
DETAIL: source SQL:
COPY (SELECT * FROM t) TO STDOUT (FORMAT CSV, FORCE_NULL (c1, c2, c3))
                                                         ^
HINT: You have attempted to use a feature that is not yet implemented.
See: https://go.crdb.dev/issue-v/41608/

error
COPY (SELECT * FROM t) TO STDOUT (ESCAPE '/',     FORCE_QUOTE (c1, c2))
----
at or near "(": syntax error: unimplemented: this syntax
DETAIL: source SQL:
COPY (SELECT * FROM t) TO STDOUT (ESCAPE '/',     FORCE_QUOTE (c1, c2))
                                                              ^
HINT: You have attempted to use a feature that is not yet implemented.
See: https://go.crdb.dev/issue-v/41608/

error
COPY (SELECT * FROM t) TO STDOUT (HEADER, OIDS)
----
at or near ")": syntax error: unimplemented: this syntax
DETAIL: source SQL:
COPY (SELECT * FROM t) TO STDOUT (HEADER, OIDS)
                                              ^
HINT: You have attempted to use a feature that is not yet implemented.
See: https://go.crdb.dev/issue-v/41608/

error
COPY (EXPLAIN SELECT * FROM t) TO STDOUT
----
at or near "explain": syntax error
DETAIL: source SQL:
COPY (EXPLAIN SELECT * FROM t) TO STDOUT
      ^

parse
COPY "copytab" FROM STDIN (ENCODING 'utf8')
----
COPY copytab FROM STDIN WITH (ENCODING 'utf8') -- normalized!
COPY copytab FROM STDIN WITH (ENCODING ('utf8')) -- fully parenthesized
COPY copytab FROM STDIN WITH (ENCODING '_') -- literals removed
COPY _ FROM STDIN WITH (ENCODING 'utf8') -- identifiers removed

parse
COPY "copytab" FROM STDIN (HEADER true, ESCAPE '%', ENCODING 'utf8')
----
COPY copytab FROM STDIN WITH (ENCODING 'utf8', ESCAPE '%', HEADER true) -- normalized!
COPY copytab FROM STDIN WITH (ENCODING ('utf8'), ESCAPE ('%'), HEADER true) -- fully parenthesized
COPY copytab FROM STDIN WITH (ENCODING '_', ESCAPE '_', HEADER true) -- literals removed
COPY _ FROM STDIN WITH (ENCODING 'utf8', ESCAPE '%', HEADER true) -- identifiers removed

parse
COPY t (a, b, c) FROM STDIN destination = 'filename' CSV DELIMITER ' '
----
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER ' ', DESTINATION '*****') -- normalized!
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER (' '), DESTINATION ('*****')) -- fully parenthesized
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER '_', DESTINATION '_') -- literals removed
COPY _ (_, _, _) FROM STDIN WITH (FORMAT CSV, DELIMITER ' ', DESTINATION '*****') -- identifiers removed
COPY t (a, b, c) FROM STDIN WITH (FORMAT CSV, DELIMITER ' ', DESTINATION 'filename') -- passwords exposed

error
COPY "copytab" FROM STDIN (FORMAT     csv, ENCODING 'abc', ENCODING 'def')
----
at or near "def": syntax error: encoding option specified multiple times
DETAIL: source SQL:
COPY "copytab" FROM STDIN (FORMAT     csv, ENCODING 'abc', ENCODING 'def')
                                                                    ^
