summaryrefslogtreecommitdiff
path: root/src/pl/tcl/pltcl.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2016-11-08 13:11:15 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2016-11-08 13:11:26 -0500
commit6d30fb1f75a57d80f80e27770d39d88f8aa32d28 (patch)
tree056042db35fa8ad69957dd54dda3c5dcaaa62d7c /src/pl/tcl/pltcl.c
parent36ac6d0e793087153a452df6502d0ef32a780db6 (diff)
Make SPI_fnumber() reject dropped columns.
There's basically no scenario where it's sensible for this to match dropped columns, so put a test for dropped-ness into SPI_fnumber() itself, and excise the test from the small number of callers that were paying attention to the case. (Most weren't :-(.) In passing, normalize tests at call sites: always reject attnum <= 0 if we're disallowing system columns. Previously there was a mixture of "< 0" and "<= 0" tests. This makes no practical difference since SPI_fnumber() never returns 0, but I'm feeling pedantic today. Also, in the places that are actually live user-facing code and not legacy cruft, distinguish "column not found" from "can't handle system column". Per discussion with Jim Nasby; thi supersedes his original patch that just changed the behavior at one call site. Discussion: <b2de8258-c4c0-1cb8-7b97-e8538e5c975c@BlueTreble.com>
Diffstat (limited to 'src/pl/tcl/pltcl.c')
-rw-r--r--src/pl/tcl/pltcl.c11
1 files changed, 1 insertions, 10 deletions
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index 3e52113ee25..20809102efb 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -603,6 +603,7 @@ pltcl_init_load_unknown(Tcl_Interp *interp)
* leave this code as DString - it's only executed once per session
************************************************************/
fno = SPI_fnumber(SPI_tuptable->tupdesc, "modsrc");
+ Assert(fno > 0);
Tcl_DStringInit(&unknown_src);
@@ -1260,12 +1261,6 @@ pltcl_trigger_handler(PG_FUNCTION_ARGS, pltcl_call_state *call_state,
ret_name)));
/************************************************************
- * Ignore dropped columns
- ************************************************************/
- if (tupdesc->attrs[attnum - 1]->attisdropped)
- continue;
-
- /************************************************************
* Lookup the attribute type's input function
************************************************************/
getTypeInputInfo(tupdesc->attrs[attnum - 1]->atttypid,
@@ -3077,10 +3072,6 @@ pltcl_build_tuple_result(Tcl_Interp *interp, Tcl_Obj **kvObjv, int kvObjc,
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]));
}