0001-experiement-on-top-of-v27.patch
application/octet-stream
Filename: 0001-experiement-on-top-of-v27.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v27-0001
Subject: experiement on top of v27
| File | + | − |
|---|---|---|
| src/backend/nodes/queryjumblefuncs.c | 12 | 28 |
From 405911ce6e0a2e1de1b138e2ec5f24adaf52272d Mon Sep 17 00:00:00 2001
From: "Sami Imseih (AWS)"
<simseih@dev-dsk-simseih-1d-3940b79e.us-east-1.amazon.com>
Date: Mon, 17 Feb 2025 19:47:26 +0000
Subject: [PATCH 1/1] experiement on top of v27
---
src/backend/nodes/queryjumblefuncs.c | 40 +++++++++-------------------
1 file changed, 12 insertions(+), 28 deletions(-)
diff --git a/src/backend/nodes/queryjumblefuncs.c b/src/backend/nodes/queryjumblefuncs.c
index c3c5edff32..0c03bf0dbf 100644
--- a/src/backend/nodes/queryjumblefuncs.c
+++ b/src/backend/nodes/queryjumblefuncs.c
@@ -262,7 +262,7 @@ RecordConstLocation(JumbleState *jstate, int location, bool merged)
* test them for being Const expression for simplicity.
*/
static bool
-IsMergeableConst(Node *element, List **known_immutable_funcs)
+IsMergeableConst(Node *element)
{
if (IsA(element, RelabelType))
element = (Node *) ((RelabelType *) element)->arg;
@@ -275,37 +275,24 @@ IsMergeableConst(Node *element, List **known_immutable_funcs)
FuncExpr *func = (FuncExpr *) element;
ListCell *temp;
- if (func->funcid > FirstGenbkiObjectId)
- return false;
-
- if (func->funcformat != COERCE_IMPLICIT_CAST)
- return false;
-
- if (!list_member_oid(*known_immutable_funcs, func->funcid))
- {
- /* Not found in the cache, verify and add if needed */
- if(func_volatile(func->funcid) != PROVOLATILE_IMMUTABLE)
- return false;
-
- *known_immutable_funcs = lappend_oid(*known_immutable_funcs,
- func->funcid);
- }
-
foreach(temp, func->args)
{
Node *arg = lfirst(temp);
- if (!IsA(arg, Const))
- return false;
+ if (IsA(arg, Const))
+ return true;
}
-
+ } else if (IsA(element, Const))
return true;
- }
+ else if (IsA(element, Param))
+ {
+ Param *p = (Param *) element;
- if (!IsA(element, Const))
- return false;
+ if (p->paramkind == PARAM_EXTERN)
+ return true;
+ }
- return true;
+ return false;
}
/*
@@ -322,9 +309,6 @@ IsMergeableConstList(List *elements, Node **firstExpr, Node **lastExpr)
{
ListCell *temp;
- /* To keep track of immutable functions in elements */
- List *immutable_funcs = NIL;
-
/* A mergeable list needs to contain at least two elements */
if (elements == NIL || list_length(elements) < 2)
return false;
@@ -337,7 +321,7 @@ IsMergeableConstList(List *elements, Node **firstExpr, Node **lastExpr)
foreach(temp, elements)
{
- if (!IsMergeableConst(lfirst(temp), &immutable_funcs))
+ if (!IsMergeableConst(lfirst(temp)))
return false;
}
*firstExpr = linitial(elements);
--
2.47.1