v2-0001-compute_common_attribute.patch
application/octet-stream
Filename: v2-0001-compute_common_attribute.patch
Type: application/octet-stream
Part: 1
Patch
Format: format-patch
Series: patch v2-0001
Subject: compute_common_attribute
| File | + | − |
|---|---|---|
| src/backend/commands/functioncmds.c | 30 | 29 |
From df3c467dd3842ade113e0a6443d332dc48996af1 Mon Sep 17 00:00:00 2001
From: Bharath Rupireddy <bharath.rupireddy@enterprisedb.com>
Date: Fri, 30 Apr 2021 10:39:28 +0530
Subject: [PATCH v2] compute_common_attribute
---
src/backend/commands/functioncmds.c | 59 +++++++++++++++--------------
1 file changed, 30 insertions(+), 29 deletions(-)
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c
index 9548287217..3b3ebf67c4 100644
--- a/src/backend/commands/functioncmds.c
+++ b/src/backend/commands/functioncmds.c
@@ -492,37 +492,40 @@ compute_common_attribute(ParseState *pstate,
DefElem **support_item,
DefElem **parallel_item)
{
+ bool is_duplicate_error = false;
+ bool is_procedure_error = false;
+
if (strcmp(defel->defname, "volatility") == 0)
{
if (is_procedure)
- goto procedure_error;
+ is_procedure_error = true;
if (*volatility_item)
- goto duplicate_error;
+ is_duplicate_error = true;
*volatility_item = defel;
}
else if (strcmp(defel->defname, "strict") == 0)
{
if (is_procedure)
- goto procedure_error;
+ is_procedure_error = true;
if (*strict_item)
- goto duplicate_error;
+ is_duplicate_error = true;
*strict_item = defel;
}
else if (strcmp(defel->defname, "security") == 0)
{
if (*security_item)
- goto duplicate_error;
+ is_duplicate_error = true;
*security_item = defel;
}
else if (strcmp(defel->defname, "leakproof") == 0)
{
if (is_procedure)
- goto procedure_error;
+ is_procedure_error = true;
if (*leakproof_item)
- goto duplicate_error;
+ is_duplicate_error = true;
*leakproof_item = defel;
}
@@ -533,58 +536,56 @@ compute_common_attribute(ParseState *pstate,
else if (strcmp(defel->defname, "cost") == 0)
{
if (is_procedure)
- goto procedure_error;
+ is_procedure_error = true;
if (*cost_item)
- goto duplicate_error;
+ is_duplicate_error = true;
*cost_item = defel;
}
else if (strcmp(defel->defname, "rows") == 0)
{
if (is_procedure)
- goto procedure_error;
+ is_procedure_error = true;
if (*rows_item)
- goto duplicate_error;
+ is_duplicate_error = true;
*rows_item = defel;
}
else if (strcmp(defel->defname, "support") == 0)
{
if (is_procedure)
- goto procedure_error;
+ is_procedure_error = true;
if (*support_item)
- goto duplicate_error;
+ is_duplicate_error = true;
*support_item = defel;
}
else if (strcmp(defel->defname, "parallel") == 0)
{
if (is_procedure)
- goto procedure_error;
+ is_procedure_error = true;
if (*parallel_item)
- goto duplicate_error;
+ is_duplicate_error = true;
*parallel_item = defel;
}
else
return false;
+ if (is_procedure_error)
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION),
+ errmsg("invalid attribute in procedure definition"),
+ parser_errposition(pstate, defel->location)));
+
+ if (is_duplicate_error)
+ ereport(ERROR,
+ (errcode(ERRCODE_SYNTAX_ERROR),
+ errmsg("option \"%s\" specified more than once", defel->defname),
+ parser_errposition(pstate, defel->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),
- errmsg("invalid attribute in procedure definition"),
- parser_errposition(pstate, defel->location)));
- return false;
}
static char
--
2.25.1