diff options
Diffstat (limited to 'src/backend/commands')
-rw-r--r-- | src/backend/commands/copy.c | 38 | ||||
-rw-r--r-- | src/backend/commands/copyfrom.c | 20 | ||||
-rw-r--r-- | src/backend/commands/copyfromparse.c | 6 |
3 files changed, 34 insertions, 30 deletions
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index c36d7f1daaf..cc0786c6f4a 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -395,39 +395,39 @@ defGetCopyHeaderChoice(DefElem *def, bool is_from) } /* - * Extract a CopySaveErrorToChoice value from a DefElem. + * Extract a CopyOnErrorChoice value from a DefElem. */ -static CopySaveErrorToChoice -defGetCopySaveErrorToChoice(DefElem *def, ParseState *pstate, bool is_from) +static CopyOnErrorChoice +defGetCopyOnErrorChoice(DefElem *def, ParseState *pstate, bool is_from) { char *sval; if (!is_from) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("COPY SAVE_ERROR_TO cannot be used with COPY TO"), + errmsg("COPY ON_ERROR cannot be used with COPY TO"), parser_errposition(pstate, def->location))); /* * If no parameter value given, assume the default value. */ if (def->arg == NULL) - return COPY_SAVE_ERROR_TO_ERROR; + return COPY_ON_ERROR_STOP; /* - * Allow "error", or "none" values. + * Allow "stop", or "ignore" values. */ sval = defGetString(def); - if (pg_strcasecmp(sval, "error") == 0) - return COPY_SAVE_ERROR_TO_ERROR; - if (pg_strcasecmp(sval, "none") == 0) - return COPY_SAVE_ERROR_TO_NONE; + if (pg_strcasecmp(sval, "stop") == 0) + return COPY_ON_ERROR_STOP; + if (pg_strcasecmp(sval, "ignore") == 0) + return COPY_ON_ERROR_IGNORE; ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("COPY save_error_to \"%s\" not recognized", sval), + errmsg("COPY ON_ERROR \"%s\" not recognized", sval), parser_errposition(pstate, def->location))); - return COPY_SAVE_ERROR_TO_ERROR; /* keep compiler quiet */ + return COPY_ON_ERROR_STOP; /* keep compiler quiet */ } /* @@ -455,7 +455,7 @@ ProcessCopyOptions(ParseState *pstate, bool format_specified = false; bool freeze_specified = false; bool header_specified = false; - bool save_error_to_specified = false; + bool on_error_specified = false; ListCell *option; /* Support external use for option sanity checking */ @@ -608,12 +608,12 @@ ProcessCopyOptions(ParseState *pstate, defel->defname), parser_errposition(pstate, defel->location))); } - else if (strcmp(defel->defname, "save_error_to") == 0) + else if (strcmp(defel->defname, "on_error") == 0) { - if (save_error_to_specified) + if (on_error_specified) errorConflictingDefElem(defel, pstate); - save_error_to_specified = true; - opts_out->save_error_to = defGetCopySaveErrorToChoice(defel, pstate, is_from); + on_error_specified = true; + opts_out->on_error = defGetCopyOnErrorChoice(defel, pstate, is_from); } else ereport(ERROR, @@ -642,10 +642,10 @@ ProcessCopyOptions(ParseState *pstate, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("cannot specify DEFAULT in BINARY mode"))); - if (opts_out->binary && opts_out->save_error_to != COPY_SAVE_ERROR_TO_ERROR) + if (opts_out->binary && opts_out->on_error != COPY_ON_ERROR_STOP) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("cannot specify SAVE_ERROR_TO in BINARY mode"))); + errmsg("only ON_ERROR STOP is allowed in BINARY mode"))); /* Set defaults for omitted options */ if (!opts_out->delim) diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c index 50e245d555c..173a736ad52 100644 --- a/src/backend/commands/copyfrom.c +++ b/src/backend/commands/copyfrom.c @@ -657,7 +657,7 @@ CopyFrom(CopyFromState cstate) Assert(cstate->rel); Assert(list_length(cstate->range_table) == 1); - if (cstate->opts.save_error_to != COPY_SAVE_ERROR_TO_ERROR) + if (cstate->opts.on_error != COPY_ON_ERROR_STOP) Assert(cstate->escontext); /* @@ -996,14 +996,14 @@ CopyFrom(CopyFromState cstate) if (!NextCopyFrom(cstate, econtext, myslot->tts_values, myslot->tts_isnull)) break; - if (cstate->opts.save_error_to != COPY_SAVE_ERROR_TO_ERROR && + if (cstate->opts.on_error != COPY_ON_ERROR_STOP && cstate->escontext->error_occurred) { /* - * Soft error occured, skip this tuple and save error information - * according to SAVE_ERROR_TO. + * Soft error occured, skip this tuple and deal with error + * information according to ON_ERROR. */ - if (cstate->opts.save_error_to == COPY_SAVE_ERROR_TO_NONE) + if (cstate->opts.on_error == COPY_ON_ERROR_IGNORE) /* * Just make ErrorSaveContext ready for the next NextCopyFrom. @@ -1307,7 +1307,7 @@ CopyFrom(CopyFromState cstate) /* Done, clean up */ error_context_stack = errcallback.previous; - if (cstate->opts.save_error_to != COPY_SAVE_ERROR_TO_ERROR && + if (cstate->opts.on_error != COPY_ON_ERROR_STOP && cstate->num_errors > 0) ereport(NOTICE, errmsg_plural("%llu row was skipped due to data type incompatibility", @@ -1450,18 +1450,18 @@ BeginCopyFrom(ParseState *pstate, } } - /* Set up soft error handler for SAVE_ERROR_TO */ - if (cstate->opts.save_error_to != COPY_SAVE_ERROR_TO_ERROR) + /* Set up soft error handler for ON_ERROR */ + if (cstate->opts.on_error != COPY_ON_ERROR_STOP) { cstate->escontext = makeNode(ErrorSaveContext); cstate->escontext->type = T_ErrorSaveContext; cstate->escontext->error_occurred = false; /* - * Currently we only support COPY_SAVE_ERROR_TO_NONE. We'll add other + * Currently we only support COPY_ON_ERROR_IGNORE. We'll add other * options later */ - if (cstate->opts.save_error_to == COPY_SAVE_ERROR_TO_NONE) + if (cstate->opts.on_error == COPY_ON_ERROR_IGNORE) cstate->escontext->details_wanted = false; } else diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c index 7207eb26983..7cacd0b752c 100644 --- a/src/backend/commands/copyfromparse.c +++ b/src/backend/commands/copyfromparse.c @@ -956,7 +956,11 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext, values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]); } - /* If SAVE_ERROR_TO is specified, skip rows with soft errors */ + + /* + * If ON_ERROR is specified with IGNORE, skip rows with soft + * errors + */ else if (!InputFunctionCallSafe(&in_functions[m], string, typioparams[m], |