summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane2016-11-07 00:22:12 +0000
committerTom Lane2016-11-07 00:22:12 +0000
commit7f1bcfb93df90adcf3c7230234fc123096e2a639 (patch)
tree7d40a73d2eb60ab1cd18710f6315c617091cd38f /src
parent26abb50c490dee191df21282bc940b94118550aa (diff)
Sync pltcl_build_tuple_result's error handling with pltcl_trigger_handler.
Meant to do this in 26abb50c4, but forgot.
Diffstat (limited to 'src')
-rw-r--r--src/pl/tcl/pltcl.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index 3d529c2e7df..3e52113ee25 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -3057,11 +3057,29 @@ pltcl_build_tuple_result(Tcl_Interp *interp, Tcl_Obj **kvObjv, int kvObjc,
char *fieldName = utf_e2u(Tcl_GetString(kvObjv[i]));
int attn = SPI_fnumber(call_state->ret_tupdesc, fieldName);
- if (attn <= 0 || call_state->ret_tupdesc->attrs[attn - 1]->attisdropped)
+ /*
+ * As in pltcl_trigger_handler, silently ignore ".tupno" if it's in
+ * the list but doesn't match any column name.
+ */
+ if (attn == SPI_ERROR_NOATTRIBUTE)
+ {
+ if (strcmp(fieldName, ".tupno") == 0)
+ continue;
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_COLUMN),
errmsg("column name/value list contains nonexistent column name \"%s\"",
fieldName)));
+ }
+
+ if (attn <= 0)
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("cannot set system attribute \"%s\"",
+ fieldName)));
+
+ /* Ignore dropped attributes */
+ if (call_state->ret_tupdesc->attrs[attn - 1]->attisdropped)
+ continue;
values[attn - 1] = utf_e2u(Tcl_GetString(kvObjv[i + 1]));
}