=== Applying patches on top of PostgreSQL commit ID 6831cd9e3b082d7b830c3196742dd49e3540c49b === /etc/rc.d/jail: WARNING: Per-jail configuration via jail_* variables is obsolete. Please consider migrating to /etc/jail.conf. Sat Jan 17 07:06:23 UTC 2026 On branch cf/4716 nothing to commit, working tree clean === using 'git am' to apply patch ./v21-0001-introduce-CopyFormat-refactor-CopyFormatOptions.patch === Applying: introduce CopyFormat refactor CopyFormatOptions Using index info to reconstruct a base tree... M src/backend/commands/copy.c M src/backend/commands/copyfrom.c M src/backend/commands/copyfromparse.c M src/backend/commands/copyto.c M src/include/commands/copy.h M src/tools/pgindent/typedefs.list Falling back to patching base and 3-way merge... Auto-merging src/tools/pgindent/typedefs.list Auto-merging src/include/commands/copy.h Auto-merging src/backend/commands/copyto.c Auto-merging src/backend/commands/copyfromparse.c Auto-merging src/backend/commands/copyfrom.c Auto-merging src/backend/commands/copy.c === using 'git am' to apply patch ./v21-0002-json-format-for-COPY-TO.patch === Applying: json format for COPY TO Using index info to reconstruct a base tree... M src/backend/commands/copy.c M src/backend/commands/copyto.c M src/backend/parser/gram.y M src/backend/utils/adt/json.c M src/bin/psql/tab-complete.in.c M src/include/commands/copy.h M src/include/utils/json.h Falling back to patching base and 3-way merge... Auto-merging src/include/utils/json.h Auto-merging src/include/commands/copy.h Auto-merging src/bin/psql/tab-complete.in.c CONFLICT (content): Merge conflict in src/bin/psql/tab-complete.in.c Auto-merging src/backend/utils/adt/json.c Auto-merging src/backend/parser/gram.y Auto-merging src/backend/commands/copyto.c Auto-merging src/backend/commands/copy.c error: Failed to merge in the changes. hint: Use 'git am --show-current-patch=diff' to see the failed patch Patch failed at 0001 json format for COPY TO When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". Unstaged changes after reset: M doc/src/sgml/ref/copy.sgml M src/backend/commands/copy.c M src/backend/commands/copyto.c M src/backend/parser/gram.y M src/backend/utils/adt/json.c M src/bin/psql/tab-complete.in.c M src/include/commands/copy.h M src/include/utils/json.h M src/test/regress/expected/copy.out M src/test/regress/sql/copy.sql === using patch(1) to apply patch ./v21-0002-json-format-for-COPY-TO.patch === patching file doc/src/sgml/ref/copy.sgml patching file src/backend/commands/copy.c patching file src/backend/commands/copyto.c patching file src/backend/parser/gram.y Hunk #1 succeeded at 3609 (offset 52 lines). Hunk #2 succeeded at 3695 (offset 52 lines). patching file src/backend/utils/adt/json.c patching file src/bin/psql/tab-complete.in.c Hunk #1 FAILED at 3377. 1 out of 1 hunk FAILED -- saving rejects to file src/bin/psql/tab-complete.in.c.rej patching file src/include/commands/copy.h patching file src/include/utils/json.h patching file src/test/regress/expected/copy.out patching file src/test/regress/sql/copy.sql Unstaged changes after reset: M doc/src/sgml/ref/copy.sgml M src/backend/commands/copy.c M src/backend/commands/copyto.c M src/backend/parser/gram.y M src/backend/utils/adt/json.c M src/include/commands/copy.h M src/include/utils/json.h M src/test/regress/expected/copy.out M src/test/regress/sql/copy.sql Removing src/bin/psql/tab-complete.in.c.rej === using 'git apply' to apply patch ./v21-0002-json-format-for-COPY-TO.patch === Applied patch to 'doc/src/sgml/ref/copy.sgml' cleanly. Applied patch to 'src/backend/commands/copy.c' cleanly. Applied patch to 'src/backend/commands/copyto.c' cleanly. Applied patch to 'src/backend/parser/gram.y' cleanly. Applied patch to 'src/backend/utils/adt/json.c' cleanly. Applied patch to 'src/bin/psql/tab-complete.in.c' with conflicts. Applied patch to 'src/include/commands/copy.h' cleanly. Applied patch to 'src/include/utils/json.h' cleanly. Applied patch to 'src/test/regress/expected/copy.out' cleanly. Applied patch to 'src/test/regress/sql/copy.sql' cleanly. U src/bin/psql/tab-complete.in.c diff --cc src/bin/psql/tab-complete.in.c index 8b91bc00062,2029b1930c8..00000000000 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@@ -3390,50 -3364,30 +3390,57 @@@ match_previous_words(int pattern_id Matches("COPY|\\copy", MatchAny, "FROM", "PROGRAM", MatchAny)) COMPLETE_WITH("WITH (", "WHERE"); - /* Complete COPY FROM [PROGRAM] filename WITH ( */ - else if (Matches("COPY|\\copy", MatchAny, "FROM", MatchAnyExcept("PROGRAM"), "WITH", "(") || - Matches("COPY|\\copy", MatchAny, "FROM", "PROGRAM", MatchAny, "WITH", "(")) - COMPLETE_WITH(Copy_from_options); + /* Complete COPY FROM|TO [PROGRAM] filename WITH ( */ + else if (HeadMatches("COPY|\\copy", MatchAny, "FROM|TO", MatchAnyExcept("PROGRAM"), "WITH", "(*") || + HeadMatches("COPY|\\copy", MatchAny, "FROM|TO", "PROGRAM", MatchAny, "WITH", "(*")) + { + if (!HeadMatches("COPY|\\copy", MatchAny, "FROM|TO", MatchAnyExcept("PROGRAM"), "WITH", "(*)") && + !HeadMatches("COPY|\\copy", MatchAny, "FROM|TO", "PROGRAM", MatchAny, "WITH", "(*)")) + { + /* + * This fires if we're in an unfinished parenthesized option list. + * get_previous_words treats a completed parenthesized option list + * as one word, so the above tests are correct. + */ - /* Complete COPY TO [PROGRAM] filename WITH ( */ - else if (Matches("COPY|\\copy", MatchAny, "TO", MatchAnyExcept("PROGRAM"), "WITH", "(") || - Matches("COPY|\\copy", MatchAny, "TO", "PROGRAM", MatchAny, "WITH", "(")) - COMPLETE_WITH(Copy_to_options); + if (ends_with(prev_wd, '(') || ends_with(prev_wd, ',')) + { + if (HeadMatches("COPY|\\copy", MatchAny, "FROM")) + COMPLETE_WITH(Copy_from_options); + else + COMPLETE_WITH(Copy_to_options); + } + + /* Complete COPY FROM|TO filename WITH (FORMAT */ + else if (TailMatches("FORMAT")) + COMPLETE_WITH("binary", "csv", "text"); + + /* Complete COPY FROM|TO filename WITH (FREEZE */ + else if (TailMatches("FREEZE")) + COMPLETE_WITH("true", "false"); ++<<<<<<< ours + /* Complete COPY FROM|TO filename WITH (HEADER */ + else if (TailMatches("HEADER")) + COMPLETE_WITH("true", "false", "MATCH"); ++======= + /* Complete COPY FROM|TO [PROGRAM] WITH (FORMAT */ + else if (Matches("COPY|\\copy", MatchAny, "FROM|TO", MatchAnyExcept("PROGRAM"), "WITH", "(", "FORMAT") || + Matches("COPY|\\copy", MatchAny, "FROM|TO", "PROGRAM", MatchAny, "WITH", "(", "FORMAT")) + COMPLETE_WITH("binary", "csv", "text", "json"); ++>>>>>>> theirs - /* Complete COPY FROM [PROGRAM] filename WITH (ON_ERROR */ - else if (Matches("COPY|\\copy", MatchAny, "FROM", MatchAnyExcept("PROGRAM"), "WITH", "(", "ON_ERROR") || - Matches("COPY|\\copy", MatchAny, "FROM", "PROGRAM", MatchAny, "WITH", "(", "ON_ERROR")) - COMPLETE_WITH("stop", "ignore"); + /* Complete COPY FROM filename WITH (ON_ERROR */ + else if (TailMatches("ON_ERROR")) + COMPLETE_WITH("stop", "ignore"); - /* Complete COPY FROM [PROGRAM] filename WITH (LOG_VERBOSITY */ - else if (Matches("COPY|\\copy", MatchAny, "FROM", MatchAnyExcept("PROGRAM"), "WITH", "(", "LOG_VERBOSITY") || - Matches("COPY|\\copy", MatchAny, "FROM", "PROGRAM", MatchAny, "WITH", "(", "LOG_VERBOSITY")) - COMPLETE_WITH("silent", "default", "verbose"); + /* Complete COPY FROM filename WITH (LOG_VERBOSITY */ + else if (TailMatches("LOG_VERBOSITY")) + COMPLETE_WITH("silent", "default", "verbose"); + } + + /* A completed parenthesized option list should be caught below */ + } /* Complete COPY FROM [PROGRAM] WITH () */ else if (Matches("COPY|\\copy", MatchAny, "FROM", MatchAnyExcept("PROGRAM"), "WITH", MatchAny) ||