From c639d240c00f8d2b6684c03597b30d179d4ab31c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 5 Jul 2011 18:21:12 -0400 Subject: [PATCH] Call FDW validator functions even when the options list is empty. This is useful since a validator might want to require certain options to be provided. The passed array is an empty text array in this case. Per suggestion by Laurenz Albe, though this is not quite his patch. --- src/backend/commands/foreigncmds.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index 21d52e06ba0..643ba91bfe1 100644 --- a/src/backend/commands/foreigncmds.c +++ b/src/backend/commands/foreigncmds.c @@ -165,8 +165,18 @@ transformGenericOptions(Oid catalogId, result = optionListToArray(resultOptions); - if (OidIsValid(fdwvalidator) && DatumGetPointer(result) != NULL) - OidFunctionCall2(fdwvalidator, result, ObjectIdGetDatum(catalogId)); + if (OidIsValid(fdwvalidator)) + { + Datum valarg = result; + + /* + * Pass a null options list as an empty array, so that validators + * don't have to be declared non-strict to handle the case. + */ + if (DatumGetPointer(valarg) == NULL) + valarg = PointerGetDatum(construct_empty_array(TEXTOID)); + OidFunctionCall2(fdwvalidator, valarg, ObjectIdGetDatum(catalogId)); + } return result; }