v1-0001-compute_common_attribute.patch
application/octet-stream
Filename: v1-0001-compute_common_attribute.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch v1-0001
Subject: compute_common_attribute
| File | + | − |
|---|---|---|
| src/backend/commands/functioncmds.c | 16 | 15 |
From b5f1d7cf8e48b7007e05e5cf6207644430ad810c Mon Sep 17 00:00:00 2001
From: Bharath Rupireddy <bharath.rupireddy@enterprisedb.com>
Date: Fri, 30 Apr 2021 07:57:36 +0530
Subject: [PATCH v1] compute_common_attribute
---
src/backend/commands/functioncmds.c | 31 +++++++++++++++--------------
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c
index 9548287217..e43044dba7 100644
--- a/src/backend/commands/functioncmds.c
+++ b/src/backend/commands/functioncmds.c
@@ -492,12 +492,14 @@ compute_common_attribute(ParseState *pstate,
DefElem **support_item,
DefElem **parallel_item)
{
+ DefElem *duplicate_item = NULL;
+
if (strcmp(defel->defname, "volatility") == 0)
{
if (is_procedure)
goto procedure_error;
if (*volatility_item)
- goto duplicate_error;
+ duplicate_item = defel;
*volatility_item = defel;
}
@@ -506,14 +508,14 @@ compute_common_attribute(ParseState *pstate,
if (is_procedure)
goto procedure_error;
if (*strict_item)
- goto duplicate_error;
+ duplicate_item = defel;
*strict_item = defel;
}
else if (strcmp(defel->defname, "security") == 0)
{
if (*security_item)
- goto duplicate_error;
+ duplicate_item = defel;
*security_item = defel;
}
@@ -522,7 +524,7 @@ compute_common_attribute(ParseState *pstate,
if (is_procedure)
goto procedure_error;
if (*leakproof_item)
- goto duplicate_error;
+ duplicate_item = defel;
*leakproof_item = defel;
}
@@ -535,7 +537,7 @@ compute_common_attribute(ParseState *pstate,
if (is_procedure)
goto procedure_error;
if (*cost_item)
- goto duplicate_error;
+ duplicate_item = defel;
*cost_item = defel;
}
@@ -544,7 +546,7 @@ compute_common_attribute(ParseState *pstate,
if (is_procedure)
goto procedure_error;
if (*rows_item)
- goto duplicate_error;
+ duplicate_item = defel;
*rows_item = defel;
}
@@ -553,7 +555,7 @@ compute_common_attribute(ParseState *pstate,
if (is_procedure)
goto procedure_error;
if (*support_item)
- goto duplicate_error;
+ duplicate_item = defel;
*support_item = defel;
}
@@ -562,23 +564,22 @@ compute_common_attribute(ParseState *pstate,
if (is_procedure)
goto procedure_error;
if (*parallel_item)
- goto duplicate_error;
+ duplicate_item = defel;
*parallel_item = defel;
}
else
return false;
+ if (duplicate_item)
+ ereport(ERROR,
+ (errcode(ERRCODE_SYNTAX_ERROR),
+ errmsg("option \"%s\" specified more than once", duplicate_item->defname),
+ parser_errposition(pstate, duplicate_item->location)));
+
/* Recognized an option */
return true;
-duplicate_error:
- ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("conflicting or redundant options"),
- parser_errposition(pstate, defel->location)));
- return false; /* keep compiler quiet */
-
procedure_error:
ereport(ERROR,
(errcode(ERRCODE_INVALID_FUNCTION_DEFINITION),
--
2.25.1