=== Applying patches on top of PostgreSQL commit ID 43222b8e53f49f2cf0849947a02c6fbd74899332 === /etc/rc.d/jail: WARNING: Per-jail configuration via jail_* variables is obsolete. Please consider migrating to /etc/jail.conf. Mon Apr 6 23:22:27 UTC 2026 On branch cf/6623 nothing to commit, working tree clean === using 'git am' to apply patch ./v2-0001-Expose-helper-functions-scan_quoted_identifier-an.patch === Applying: Expose helper functions scan_quoted_identifier and scan_identifier. Using index info to reconstruct a base tree... M src/backend/utils/adt/varlena.c M src/include/utils/varlena.h Falling back to patching base and 3-way merge... No changes -- Patch already applied. === using 'git am' to apply patch ./v2-0002-Add-a-guc_check_handler-to-the-EXPLAIN-extension-.patch === Applying: Add a guc_check_handler to the EXPLAIN extension mechanism. Using index info to reconstruct a base tree... M contrib/pg_overexplain/pg_overexplain.c M contrib/pg_plan_advice/pg_plan_advice.c M src/backend/commands/explain_state.c M src/include/commands/explain_state.h Falling back to patching base and 3-way merge... No changes -- Patch already applied. === using 'git am' to apply patch ./v2-0003-auto_explain-Add-new-GUC-auto_explain.log_extensi.patch === Applying: auto_explain: Add new GUC, auto_explain.log_extension_options. Using index info to reconstruct a base tree... M contrib/auto_explain/Makefile M contrib/auto_explain/auto_explain.c M contrib/auto_explain/meson.build M contrib/auto_explain/t/001_auto_explain.pl M doc/src/sgml/auto-explain.sgml M src/tools/pgindent/typedefs.list Falling back to patching base and 3-way merge... Auto-merging src/tools/pgindent/typedefs.list Auto-merging contrib/auto_explain/auto_explain.c CONFLICT (content): Merge conflict in contrib/auto_explain/auto_explain.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 auto_explain: Add new GUC, auto_explain.log_extension_options. 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". === using patch(1) to apply patch ./v2-0003-auto_explain-Add-new-GUC-auto_explain.log_extensi.patch === patching file contrib/auto_explain/Makefile Hunk #1 FAILED at 6. 1 out of 1 hunk FAILED -- saving rejects to file contrib/auto_explain/Makefile.rej patching file contrib/auto_explain/auto_explain.c Hunk #1 FAILED at 15. Hunk #2 FAILED at 41. Hunk #3 FAILED at 88. Hunk #4 succeeded at 282 with fuzz 2 (offset 50 lines). Hunk #5 succeeded at 461 with fuzz 2 (offset 46 lines). Hunk #6 FAILED at 425. Hunk #7 succeeded at 839 with fuzz 2 (offset 381 lines). 4 out of 7 hunks FAILED -- saving rejects to file contrib/auto_explain/auto_explain.c.rej The next patch would create the file contrib/auto_explain/expected/extension_options.out, which already exists! Skipping patch. 1 out of 1 hunk ignored patching file contrib/auto_explain/meson.build Hunk #1 FAILED at 23. 1 out of 1 hunk FAILED -- saving rejects to file contrib/auto_explain/meson.build.rej The next patch would create the file contrib/auto_explain/sql/extension_options.sql, which already exists! Skipping patch. 1 out of 1 hunk ignored patching file contrib/auto_explain/t/001_auto_explain.pl Hunk #1 FAILED at 30. Hunk #2 succeeded at 188 with fuzz 2 (offset 16 lines). 1 out of 2 hunks FAILED -- saving rejects to file contrib/auto_explain/t/001_auto_explain.pl.rej patching file doc/src/sgml/auto-explain.sgml Hunk #1 succeeded at 268 (offset 23 lines). patching file src/tools/pgindent/typedefs.list Hunk #1 FAILED at 3566. 1 out of 1 hunk FAILED -- saving rejects to file src/tools/pgindent/typedefs.list.rej Unstaged changes after reset: M contrib/auto_explain/auto_explain.c M contrib/auto_explain/t/001_auto_explain.pl M doc/src/sgml/auto-explain.sgml Removing contrib/auto_explain/Makefile.rej Removing contrib/auto_explain/auto_explain.c.rej Removing contrib/auto_explain/meson.build.rej Removing contrib/auto_explain/t/001_auto_explain.pl.rej Removing src/tools/pgindent/typedefs.list.rej === using 'git apply' to apply patch ./v2-0003-auto_explain-Add-new-GUC-auto_explain.log_extensi.patch === Applied patch to 'contrib/auto_explain/Makefile' cleanly. Applied patch to 'contrib/auto_explain/auto_explain.c' with conflicts. Performing three-way merge... Applied patch to 'contrib/auto_explain/expected/extension_options.out' cleanly. Applied patch to 'contrib/auto_explain/meson.build' cleanly. Performing three-way merge... Applied patch to 'contrib/auto_explain/sql/extension_options.sql' cleanly. Applied patch to 'contrib/auto_explain/t/001_auto_explain.pl' cleanly. Applied patch to 'doc/src/sgml/auto-explain.sgml' cleanly. Applied patch to 'src/tools/pgindent/typedefs.list' cleanly. U contrib/auto_explain/auto_explain.c diff --cc contrib/auto_explain/auto_explain.c index 6ceae1c69ce,132c3025f33..00000000000 --- a/contrib/auto_explain/auto_explain.c +++ b/contrib/auto_explain/auto_explain.c @@@ -645,7 -651,7 +645,11 @@@ auto_explain_scan_literal(char **endp, * * Much of this logic is similar to SplitIdentifierString and friends, but our * needs are different enough that we roll our own parsing logic. The goal here ++<<<<<<< ours + * is to accept the same syntax that the main parser would accept inside of ++======= + * is to accept the same syntax that the main parser would accepts inside of ++>>>>>>> theirs * an EXPLAIN option list. While we can't do that perfectly without adding a * lot more code, the goal of this implementation is to be close enough that * users don't really notice the differences. @@@ -729,16 -735,7 +733,20 @@@ auto_explain_split_options(char *rawstr saved = *value_endp; *value_endp = '\0'; ++<<<<<<< ours + /* + * Integer, float, or neither? + * + * NB: Since we use strtol and strtod here rather than + * pg_strtoint64_safe, some syntax that would be accepted by + * the main parser is not accepted here, e.g. 100_000. On the + * plus side, strtol and strtod won't allocate, and + * pg_strtoint64_safe might. For now, it seems better to keep + * things simple here. + */ ++======= + /* Integer, float, or neither? */ ++>>>>>>> theirs errno = 0; intval = strtol(value, &endptr, 0); if (errno == 0 && *endptr == '\0' && endptr != value &&