From 1758ca4bffdc9db6cd5ffc114ad668c15028a454 Mon Sep 17 00:00:00 2001
From: Sven Klemm <sven@timescale.com>
Date: Fri, 26 Mar 2021 19:33:50 +0100
Subject: [PATCH v1] Allow CustomScan nodes to signal projection support

Add a new flag CUSTOMPATH_SUPPORT_PROJECTION to allow CustomScan
nodes to control whether they support projection.
---
 src/backend/optimizer/plan/createplan.c | 4 ++++
 src/include/nodes/extensible.h          | 1 +
 2 files changed, 5 insertions(+)

diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index 906cab7053..32199bd6a3 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -7055,6 +7055,8 @@ is_projection_capable_path(Path *path)
 			 * get relaxed later.
 			 */
 			return false;
+		case T_CustomScan:
+			return castNode(CustomPath, path)->flags & CUSTOMPATH_SUPPORT_PROJECTION;
 		default:
 			break;
 	}
@@ -7092,6 +7094,8 @@ is_projection_capable_plan(Plan *plan)
 			 * get relaxed later.
 			 */
 			return false;
+		case T_CustomScan:
+			return castNode(CustomScan, plan)->flags & CUSTOMPATH_SUPPORT_PROJECTION;
 		default:
 			break;
 	}
diff --git a/src/include/nodes/extensible.h b/src/include/nodes/extensible.h
index 9e425e5651..7d3dc7e828 100644
--- a/src/include/nodes/extensible.h
+++ b/src/include/nodes/extensible.h
@@ -80,6 +80,7 @@ extern const ExtensibleNodeMethods *GetExtensibleNodeMethods(const char *name,
  */
 #define CUSTOMPATH_SUPPORT_BACKWARD_SCAN	0x0001
 #define CUSTOMPATH_SUPPORT_MARK_RESTORE		0x0002
+#define CUSTOMPATH_SUPPORT_PROJECTION			0x0004
 
 /*
  * Custom path methods.  Mostly, we just need to know how to convert a
-- 
2.30.0

