diff options
author | Michael Paquier <michael@paquier.xyz> | 2024-10-17 08:45:56 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2024-10-17 08:45:56 +0900 |
commit | c06a4746b1be841dee998a75f9a52b2d06348ca7 (patch) | |
tree | 30718279efc060d4b552a8457e2787b330552c8c /src/backend/commands/copy.c | |
parent | a30c1ca21c584cb0917a5e6fbe086164cd8bec6a (diff) |
Fix validation of COPY FORCE_NOT_NULL/FORCE_NULL for the all-column cases
This commit adds missing checks for COPY FORCE_NOT_NULL and FORCE_NULL
when applied to all columns via "*". These options now correctly
require CSV mode and are disallowed in COPY TO, making their behavior
consistent with FORCE_QUOTE.
Some regression tests are added to verify the correct behavior for the
all-columns case, including FORCE_QUOTE, which was not tested.
Backpatch down to 17, where support for the all-column grammar with
FORCE_NOT_NULL and FORCE_NULL has been added.
Author: Joel Jacobson
Reviewed-by: Zhang Mingli
Discussion: https://postgr.es/m/65030d1d-5f90-4fa4-92eb-f5f50389858e@app.fastmail.com
Backpatch-through: 17
Diffstat (limited to 'src/backend/commands/copy.c')
-rw-r--r-- | src/backend/commands/copy.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 3bb579a3a44..e557982071d 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -783,12 +783,14 @@ ProcessCopyOptions(ParseState *pstate, "COPY FROM"))); /* Check force_notnull */ - if (!opts_out->csv_mode && opts_out->force_notnull != NIL) + if (!opts_out->csv_mode && (opts_out->force_notnull != NIL || + opts_out->force_notnull_all)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), /*- translator: %s is the name of a COPY option, e.g. ON_ERROR */ errmsg("COPY %s requires CSV mode", "FORCE_NOT_NULL"))); - if (opts_out->force_notnull != NIL && !is_from) + if ((opts_out->force_notnull != NIL || opts_out->force_notnull_all) && + !is_from) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), /*- translator: first %s is the name of a COPY option, e.g. ON_ERROR, @@ -797,13 +799,15 @@ ProcessCopyOptions(ParseState *pstate, "COPY TO"))); /* Check force_null */ - if (!opts_out->csv_mode && opts_out->force_null != NIL) + if (!opts_out->csv_mode && (opts_out->force_null != NIL || + opts_out->force_null_all)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), /*- translator: %s is the name of a COPY option, e.g. ON_ERROR */ errmsg("COPY %s requires CSV mode", "FORCE_NULL"))); - if (opts_out->force_null != NIL && !is_from) + if ((opts_out->force_null != NIL || opts_out->force_null_all) && + !is_from) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), /*- translator: first %s is the name of a COPY option, e.g. ON_ERROR, |