diff options
Diffstat (limited to 'src/backend/commands')
| -rw-r--r-- | src/backend/commands/copy.c | 12 | ||||
| -rw-r--r-- | src/backend/commands/copyfrom.c | 8 | ||||
| -rw-r--r-- | src/backend/commands/copyto.c | 5 |
3 files changed, 15 insertions, 10 deletions
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index f14fae33083..c5d7d78645a 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -512,9 +512,11 @@ ProcessCopyOptions(ParseState *pstate, } else if (strcmp(defel->defname, "force_not_null") == 0) { - if (opts_out->force_notnull) + if (opts_out->force_notnull || opts_out->force_notnull_all) errorConflictingDefElem(defel, pstate); - if (defel->arg && IsA(defel->arg, List)) + if (defel->arg && IsA(defel->arg, A_Star)) + opts_out->force_notnull_all = true; + else if (defel->arg && IsA(defel->arg, List)) opts_out->force_notnull = castNode(List, defel->arg); else ereport(ERROR, @@ -525,9 +527,11 @@ ProcessCopyOptions(ParseState *pstate, } else if (strcmp(defel->defname, "force_null") == 0) { - if (opts_out->force_null) + if (opts_out->force_null || opts_out->force_null_all) errorConflictingDefElem(defel, pstate); - if (defel->arg && IsA(defel->arg, List)) + if (defel->arg && IsA(defel->arg, A_Star)) + opts_out->force_null_all = true; + else if (defel->arg && IsA(defel->arg, List)) opts_out->force_null = castNode(List, defel->arg); else ereport(ERROR, diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c index 70871ed8190..2d1567d0e42 100644 --- a/src/backend/commands/copyfrom.c +++ b/src/backend/commands/copyfrom.c @@ -1393,7 +1393,9 @@ BeginCopyFrom(ParseState *pstate, /* Convert FORCE_NOT_NULL name list to per-column flags, check validity */ cstate->opts.force_notnull_flags = (bool *) palloc0(num_phys_attrs * sizeof(bool)); - if (cstate->opts.force_notnull) + if (cstate->opts.force_notnull_all) + MemSet(cstate->opts.force_notnull_flags, true, num_phys_attrs * sizeof(bool)); + else if (cstate->opts.force_notnull) { List *attnums; ListCell *cur; @@ -1416,7 +1418,9 @@ BeginCopyFrom(ParseState *pstate, /* Convert FORCE_NULL name list to per-column flags, check validity */ cstate->opts.force_null_flags = (bool *) palloc0(num_phys_attrs * sizeof(bool)); - if (cstate->opts.force_null) + if (cstate->opts.force_null_all) + MemSet(cstate->opts.force_null_flags, true, num_phys_attrs * sizeof(bool)); + else if (cstate->opts.force_null) { List *attnums; ListCell *cur; diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c index eaa3172793a..0378f0ade09 100644 --- a/src/backend/commands/copyto.c +++ b/src/backend/commands/copyto.c @@ -582,10 +582,7 @@ BeginCopyTo(ParseState *pstate, cstate->opts.force_quote_flags = (bool *) palloc0(num_phys_attrs * sizeof(bool)); if (cstate->opts.force_quote_all) { - int i; - - for (i = 0; i < num_phys_attrs; i++) - cstate->opts.force_quote_flags[i] = true; + MemSet(cstate->opts.force_quote_flags, true, num_phys_attrs * sizeof(bool)); } else if (cstate->opts.force_quote) { |
