Skip to content

Commit 2311f19

Browse files
committed
Remove circular #include's between plpython.h and plpy_util.h.
plpython.h included plpy_util.h, simply on the grounds that "it's easier to just include it everywhere". However, plpy_util.h must include plpython.h, or it won't pass headerscheck. While the resulting circularity doesn't have any immediate bad effect, it's poor design. We have seen serious messes arise in the past from overly-broad inclusion footprints created by such circularities, so let's establish a project policy against it. To fix, just replace *.c files' inclusions of plpython.h with plpy_util.h. They'll pull in plpython.h indirectly; indeed, almost all have already done so via inclusions of other plpy_xxx.h headers. (Any extensions using plpython.h can do likewise without breaking the compatibility of their code with prior Postgres versions.) Reported-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com> Author: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com> Discussion: https://postgr.es/m/aAxQ6fcY5QQV1lo3@ip-10-97-1-34.eu-west-3.compute.internal
1 parent e8ca9ed commit 2311f19

16 files changed

+18
-20
lines changed

contrib/hstore_plpython/hstore_plpython.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include "fmgr.h"
44
#include "hstore/hstore.h"
55
#include "plpy_typeio.h"
6-
#include "plpython.h"
6+
#include "plpy_util.h"
77

88
PG_MODULE_MAGIC_EXT(
99
.name = "hstore_plpython",

contrib/jsonb_plpython/jsonb_plpython.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
#include "plpy_elog.h"
44
#include "plpy_typeio.h"
5-
#include "plpython.h"
5+
#include "plpy_util.h"
66
#include "utils/fmgrprotos.h"
77
#include "utils/jsonb.h"
88
#include "utils/numeric.h"

contrib/ltree_plpython/ltree_plpython.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
#include "fmgr.h"
44
#include "ltree/ltree.h"
5-
#include "plpython.h"
5+
#include "plpy_util.h"
66

77
PG_MODULE_MAGIC_EXT(
88
.name = "ltree_plpython",

src/pl/plpython/plpy_cursorobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#include "plpy_planobject.h"
1717
#include "plpy_resultobject.h"
1818
#include "plpy_spi.h"
19-
#include "plpython.h"
19+
#include "plpy_util.h"
2020
#include "utils/memutils.h"
2121

2222
static PyObject *PLy_cursor_query(const char *query);

src/pl/plpython/plpy_elog.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include "plpy_elog.h"
1111
#include "plpy_main.h"
1212
#include "plpy_procedure.h"
13-
#include "plpython.h"
13+
#include "plpy_util.h"
1414

1515
PyObject *PLy_exc_error = NULL;
1616
PyObject *PLy_exc_fatal = NULL;

src/pl/plpython/plpy_exec.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#include "plpy_main.h"
1818
#include "plpy_procedure.h"
1919
#include "plpy_subxactobject.h"
20-
#include "plpython.h"
20+
#include "plpy_util.h"
2121
#include "utils/fmgrprotos.h"
2222
#include "utils/rel.h"
2323

src/pl/plpython/plpy_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#include "plpy_plpymodule.h"
1919
#include "plpy_procedure.h"
2020
#include "plpy_subxactobject.h"
21-
#include "plpython.h"
21+
#include "plpy_util.h"
2222
#include "utils/guc.h"
2323
#include "utils/memutils.h"
2424
#include "utils/rel.h"

src/pl/plpython/plpy_planobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "plpy_cursorobject.h"
1010
#include "plpy_planobject.h"
1111
#include "plpy_spi.h"
12-
#include "plpython.h"
12+
#include "plpy_util.h"
1313
#include "utils/memutils.h"
1414

1515
static void PLy_plan_dealloc(PLyPlanObject *self);

src/pl/plpython/plpy_plpymodule.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include "plpy_resultobject.h"
1515
#include "plpy_spi.h"
1616
#include "plpy_subxactobject.h"
17-
#include "plpython.h"
17+
#include "plpy_util.h"
1818
#include "utils/builtins.h"
1919

2020
HTAB *PLy_spi_exceptions = NULL;

src/pl/plpython/plpy_procedure.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include "plpy_elog.h"
1414
#include "plpy_main.h"
1515
#include "plpy_procedure.h"
16-
#include "plpython.h"
16+
#include "plpy_util.h"
1717
#include "utils/builtins.h"
1818
#include "utils/hsearch.h"
1919
#include "utils/memutils.h"

src/pl/plpython/plpy_resultobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
#include "plpy_elog.h"
1010
#include "plpy_resultobject.h"
11-
#include "plpython.h"
11+
#include "plpy_util.h"
1212

1313
static void PLy_result_dealloc(PLyResultObject *self);
1414
static PyObject *PLy_result_colnames(PyObject *self, PyObject *unused);

src/pl/plpython/plpy_spi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#include "plpy_plpymodule.h"
2020
#include "plpy_resultobject.h"
2121
#include "plpy_spi.h"
22-
#include "plpython.h"
22+
#include "plpy_util.h"
2323
#include "utils/memutils.h"
2424

2525
static PyObject *PLy_spi_execute_query(char *query, long limit);

src/pl/plpython/plpy_subxactobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "access/xact.h"
1010
#include "plpy_elog.h"
1111
#include "plpy_subxactobject.h"
12-
#include "plpython.h"
12+
#include "plpy_util.h"
1313
#include "utils/memutils.h"
1414

1515
List *explicit_subtransactions = NIL;

src/pl/plpython/plpy_typeio.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include "plpy_elog.h"
1515
#include "plpy_main.h"
1616
#include "plpy_typeio.h"
17-
#include "plpython.h"
17+
#include "plpy_util.h"
1818
#include "utils/array.h"
1919
#include "utils/builtins.h"
2020
#include "utils/fmgroids.h"

src/pl/plpython/plpy_util.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#include "mb/pg_wchar.h"
1010
#include "plpy_elog.h"
1111
#include "plpy_util.h"
12-
#include "plpython.h"
1312

1413
/*
1514
* Convert a Python unicode object to a Python string/bytes object in

src/pl/plpython/plpython.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
*
33
* plpython.h - Python as a procedural language for PostgreSQL
44
*
5+
* Note: this file is #include'd by each of the sub-module header files
6+
* (plpy_elog.h, etc). It's therefore unnecessary for any plpython *.c
7+
* files to include it directly.
8+
*
59
* Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
610
* Portions Copyright (c) 1994, Regents of the University of California
711
*
@@ -38,9 +42,4 @@
3842
#undef TEXTDOMAIN
3943
#define TEXTDOMAIN PG_TEXTDOMAIN("plpython")
4044

41-
/*
42-
* Used throughout, so it's easier to just include it everywhere.
43-
*/
44-
#include "plpy_util.h"
45-
4645
#endif /* PLPYTHON_H */

0 commit comments

Comments
 (0)