v9-0001-Rename-cursor-exists-flag.patch

application/octet-stream

Filename: v9-0001-Rename-cursor-exists-flag.patch
Type: application/octet-stream
Part: 0
Message: Re: Bypassing cursors in postgres_fdw to enable parallel plans

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 v9-0001
Subject: postgres_fdw: Rename cursor_exists flag to scan_in_progress
File+
contrib/postgres_fdw/postgres_fdw.c 11 11
From e30dfe2e0b5062427ae647cdc63a5db38acf2d64 Mon Sep 17 00:00:00 2001
From: Rafia Sabih <rafia.sabih@cybertec.at>
Date: Tue, 5 May 2026 12:49:36 +0200
Subject: [PATCH] postgres_fdw: Rename cursor_exists flag to scan_in_progress

The cursor_exists flag in PgFdwScanState was named specifically for the
cursor-based tuple-fetching path.  A follow-up patch introduces a
cursor-free fetching mechanism, making the old name misleading in that
context.  Rename it to scan_in_progress to reflect its actual purpose:
tracking whether a scan has been started, regardless of the fetching
method in use.
---
 contrib/postgres_fdw/postgres_fdw.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c
index c42cb690c7b..350dc19f29a 100644
--- a/contrib/postgres_fdw/postgres_fdw.c
+++ b/contrib/postgres_fdw/postgres_fdw.c
@@ -155,7 +155,7 @@ typedef struct PgFdwScanState
 	PGconn	   *conn;			/* connection for the scan */
 	PgFdwConnState *conn_state; /* extra per-connection state */
 	unsigned int cursor_number; /* quasi-unique ID for my cursor */
-	bool		cursor_exists;	/* have we created the cursor? */
+	bool		scan_in_progress;	/* is there a scan in progress? */
 	int			numParams;		/* number of parameters passed to query */
 	FmgrInfo   *param_flinfo;	/* output conversion functions for them */
 	List	   *param_exprs;	/* executable expressions for param values */
@@ -1758,7 +1758,7 @@ postgresBeginForeignScan(ForeignScanState *node, int eflags)
 
 	/* Assign a unique ID for my cursor */
 	fsstate->cursor_number = GetCursorNumber(fsstate->conn);
-	fsstate->cursor_exists = false;
+	fsstate->scan_in_progress = false;
 
 	/* Get private info created by planner functions. */
 	fsstate->query = strVal(list_nth(fsplan->fdw_private,
@@ -1827,7 +1827,7 @@ postgresIterateForeignScan(ForeignScanState *node)
 	 * already created the cursor before we get here, even if this is the
 	 * first call after Begin or ReScan.
 	 */
-	if (!fsstate->cursor_exists)
+	if (!fsstate->scan_in_progress)
 		create_cursor(node);
 
 	/*
@@ -1867,8 +1867,8 @@ postgresReScanForeignScan(ForeignScanState *node)
 	char		sql[64];
 	PGresult   *res;
 
-	/* If we haven't created the cursor yet, nothing to do. */
-	if (!fsstate->cursor_exists)
+	/* If no scan is in progress, nothing to do. */
+	if (!fsstate->scan_in_progress)
 		return;
 
 	/*
@@ -1894,7 +1894,7 @@ postgresReScanForeignScan(ForeignScanState *node)
 	 */
 	if (node->ss.ps.chgParam != NULL)
 	{
-		fsstate->cursor_exists = false;
+		fsstate->scan_in_progress = false;
 		snprintf(sql, sizeof(sql), "CLOSE c%u",
 				 fsstate->cursor_number);
 	}
@@ -1905,7 +1905,7 @@ postgresReScanForeignScan(ForeignScanState *node)
 					 fsstate->cursor_number);
 		else
 		{
-			fsstate->cursor_exists = false;
+			fsstate->scan_in_progress = false;
 			snprintf(sql, sizeof(sql), "CLOSE c%u",
 					 fsstate->cursor_number);
 		}
@@ -1944,7 +1944,7 @@ postgresEndForeignScan(ForeignScanState *node)
 		return;
 
 	/* Close the cursor if open, to prevent accumulation of cursors */
-	if (fsstate->cursor_exists)
+	if (fsstate->scan_in_progress)
 		close_cursor(fsstate->conn, fsstate->cursor_number,
 					 fsstate->conn_state);
 
@@ -3994,8 +3994,8 @@ create_cursor(ForeignScanState *node)
 		pgfdw_report_error(res, conn, fsstate->query);
 	PQclear(res);
 
-	/* Mark the cursor as created, and show no tuples have been retrieved */
-	fsstate->cursor_exists = true;
+	/* Mark the scan as started, and show no tuples have been retrieved */
+	fsstate->scan_in_progress = true;
 	fsstate->tuples = NULL;
 	fsstate->num_tuples = 0;
 	fsstate->next_tuple = 0;
@@ -8332,7 +8332,7 @@ fetch_more_data_begin(AsyncRequest *areq)
 	Assert(!fsstate->conn_state->pendingAreq);
 
 	/* Create the cursor synchronously. */
-	if (!fsstate->cursor_exists)
+	if (!fsstate->scan_in_progress)
 		create_cursor(node);
 
 	/* We will send this query, but not wait for the response. */
-- 
2.39.5 (Apple Git-154)