]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Test List macros in C++ extensions
authorPeter Eisentraut <peter@eisentraut.org>
Tue, 17 Feb 2026 09:06:32 +0000 (10:06 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Tue, 17 Feb 2026 09:17:57 +0000 (10:17 +0100)
All of these macros already work in C++ with Clang and GCC (the only
compilers we're currently testing C++ extension support for).  This
adds a regression test for them in our test C++ extension, so we can
safely change their implementation without accidentally breaking C++.
Some of the List macros didn't work in C++ in the past (see commit
d5ca15ee5), and this would have caught that.

Author: Jelte Fennema-Nio <postgres@jeltef.nl>
Discussion: https://www.postgresql.org/message-id/flat/CAGECzQR21OnnKiZO_1rLWO0-16kg1JBxnVq-wymYW0-_1cUNtg@mail.gmail.com

src/test/modules/test_cplusplusext/test_cplusplusext.cpp

index 435937c00d238d71e1c72b6baa3f61741315ffc2..f1a2ab7f2bf0216706e3b479f02ac3ece7f9f203 100644 (file)
@@ -17,6 +17,8 @@
 extern "C" {
 #include "postgres.h"
 #include "fmgr.h"
+#include "nodes/pg_list.h"
+#include "nodes/primnodes.h"
 
 PG_MODULE_MAGIC;
 
@@ -32,6 +34,21 @@ test_cplusplus_add(PG_FUNCTION_ARGS)
 {
        int32           a = PG_GETARG_INT32(0);
        int32           b = PG_GETARG_INT32(1);
+       RangeTblRef *node = makeNode(RangeTblRef);
+       List       *list = list_make1(node);
+
+       foreach_ptr(RangeTblRef, rtr, list)
+       {
+               (void) rtr;
+       }
+
+       foreach_node(RangeTblRef, rtr, list)
+       {
+               (void) rtr;
+       }
+
+       list_free(list);
+       pfree(node);
 
        PG_RETURN_INT32(a + b);
 }