mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-09 03:57:37 +08:00
Create extension infrastructure for the core procedural languages.
This mostly just involves creating control, install, and update-from-unpackaged scripts for them. However, I had to adjust plperl and plpython to not share the same support functions between variants, because we can't put the same function into multiple extensions. catversion bump forced due to new contents of pg_pltemplate, and because initdb now installs plpgsql as an extension not a bare language. Add support for regression testing these as extensions not bare languages. Fix a couple of other issues that popped up while testing this: my initial hack at pg_dump binary-upgrade support didn't work right, and we don't want an extra schema permissions test after all. Documentation changes still to come, but I'm committing now to see whether the MSVC build scripts need work (likely they do).
This commit is contained in:
@ -37,8 +37,13 @@ override CPPFLAGS := -I. -I$(srcdir) $(python_includespec) $(CPPFLAGS)
|
||||
rpathdir = $(python_libdir)
|
||||
|
||||
NAME = plpython$(python_majorversion)
|
||||
|
||||
OBJS = plpython.o
|
||||
|
||||
DATA = plpythonu.control plpythonu--1.0.sql plpythonu--unpackaged--1.0.sql \
|
||||
plpython2u.control plpython2u--1.0.sql plpython2u--unpackaged--1.0.sql \
|
||||
plpython3u.control plpython3u--1.0.sql plpython3u--unpackaged--1.0.sql
|
||||
|
||||
|
||||
# Python on win32 ships with import libraries only for Microsoft Visual C++,
|
||||
# which are not compatible with mingw gcc. Therefore we need to build a
|
||||
@ -60,7 +65,7 @@ REGRESS_OPTS = --dbname=$(PL_TESTDB)
|
||||
# Only load plpythonu with Python 2. The test files themselves load
|
||||
# the versioned language plpython(2|3)u.
|
||||
ifeq ($(python_majorversion),2)
|
||||
REGRESS_OPTS += --load-language=plpythonu
|
||||
REGRESS_OPTS += --load-extension=plpythonu
|
||||
endif
|
||||
REGRESS = \
|
||||
plpython_schema \
|
||||
@ -98,18 +103,32 @@ all: all-lib
|
||||
|
||||
distprep: spiexceptions.h
|
||||
|
||||
install: all installdirs install-lib
|
||||
|
||||
install: all installdirs install-lib install-data
|
||||
ifeq ($(python_majorversion),2)
|
||||
cd '$(DESTDIR)$(pkglibdir)' && rm -f plpython$(DLSUFFIX) && $(LN_S) $(shlib) plpython$(DLSUFFIX)
|
||||
endif
|
||||
|
||||
installdirs: installdirs-lib
|
||||
$(MKDIR_P) '$(DESTDIR)$(datadir)/extension'
|
||||
|
||||
uninstall: uninstall-lib
|
||||
uninstall: uninstall-lib uninstall-data
|
||||
ifeq ($(python_majorversion),2)
|
||||
rm -f '$(DESTDIR)$(pkglibdir)/plpython$(DLSUFFIX)'
|
||||
endif
|
||||
|
||||
install-data:
|
||||
@for file in $(addprefix $(srcdir)/, $(DATA)); do \
|
||||
echo "$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/extension'"; \
|
||||
$(INSTALL_DATA) $$file '$(DESTDIR)$(datadir)/extension'; \
|
||||
done
|
||||
|
||||
uninstall-data:
|
||||
rm -f $(addprefix '$(DESTDIR)$(datadir)/extension'/, $(notdir $(DATA)))
|
||||
|
||||
.PHONY: install-data uninstall-data
|
||||
|
||||
|
||||
ifeq ($(python_majorversion),3)
|
||||
# Adjust regression tests for Python 3 compatibility
|
||||
prep3:
|
||||
@ -124,6 +143,8 @@ prep3:
|
||||
-e "s/def next/def __next__/g" \
|
||||
-e "s/LANGUAGE plpythonu/LANGUAGE plpython3u/g" \
|
||||
-e "s/LANGUAGE plpython2u/LANGUAGE plpython3u/g" \
|
||||
-e "s/EXTENSION plpythonu/EXTENSION plpython3u/g" \
|
||||
-e "s/EXTENSION plpython2u/EXTENSION plpython3u/g" \
|
||||
$$file >`echo $$file | sed 's,$(srcdir),python3,'`; \
|
||||
done
|
||||
|
||||
|
||||
@ -2,4 +2,5 @@
|
||||
-- For paranoia's sake, don't leave an untrusted language sitting around
|
||||
--
|
||||
SET client_min_messages = WARNING;
|
||||
DROP PROCEDURAL LANGUAGE plpythonu CASCADE;
|
||||
DROP EXTENSION plpythonu CASCADE;
|
||||
DROP EXTENSION IF EXISTS plpython2u CASCADE;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
-- first some tests of basic functionality
|
||||
CREATE LANGUAGE plpython2u;
|
||||
CREATE EXTENSION plpython2u;
|
||||
-- really stupid function just to get the module loaded
|
||||
CREATE FUNCTION stupid() RETURNS text AS 'return "zarkon"' LANGUAGE plpythonu;
|
||||
select stupid();
|
||||
|
||||
@ -4652,3 +4652,36 @@ PLyUnicode_FromString(const char *s)
|
||||
}
|
||||
|
||||
#endif /* PY_MAJOR_VERSION >= 3 */
|
||||
|
||||
#if PY_MAJOR_VERSION < 3
|
||||
|
||||
/* Define aliases plpython2_call_handler etc */
|
||||
Datum plpython2_call_handler(PG_FUNCTION_ARGS);
|
||||
Datum plpython2_inline_handler(PG_FUNCTION_ARGS);
|
||||
Datum plpython2_validator(PG_FUNCTION_ARGS);
|
||||
|
||||
PG_FUNCTION_INFO_V1(plpython2_call_handler);
|
||||
|
||||
Datum
|
||||
plpython2_call_handler(PG_FUNCTION_ARGS)
|
||||
{
|
||||
return plpython_call_handler(fcinfo);
|
||||
}
|
||||
|
||||
PG_FUNCTION_INFO_V1(plpython2_inline_handler);
|
||||
|
||||
Datum
|
||||
plpython2_inline_handler(PG_FUNCTION_ARGS)
|
||||
{
|
||||
return plpython_inline_handler(fcinfo);
|
||||
}
|
||||
|
||||
PG_FUNCTION_INFO_V1(plpython2_validator);
|
||||
|
||||
Datum
|
||||
plpython2_validator(PG_FUNCTION_ARGS)
|
||||
{
|
||||
return plpython_validator(fcinfo);
|
||||
}
|
||||
|
||||
#endif /* PY_MAJOR_VERSION < 3 */
|
||||
|
||||
9
src/pl/plpython/plpython2u--1.0.sql
Normal file
9
src/pl/plpython/plpython2u--1.0.sql
Normal file
@ -0,0 +1,9 @@
|
||||
/* src/pl/plpython/plpython2u--1.0.sql */
|
||||
|
||||
/*
|
||||
* Currently, all the interesting stuff is done by CREATE LANGUAGE.
|
||||
* Later we will probably "dumb down" that command and put more of the
|
||||
* knowledge into this script.
|
||||
*/
|
||||
|
||||
CREATE PROCEDURAL LANGUAGE plpython2u;
|
||||
7
src/pl/plpython/plpython2u--unpackaged--1.0.sql
Normal file
7
src/pl/plpython/plpython2u--unpackaged--1.0.sql
Normal file
@ -0,0 +1,7 @@
|
||||
/* src/pl/plpython/plpython2u--unpackaged--1.0.sql */
|
||||
|
||||
ALTER EXTENSION plpython2u ADD PROCEDURAL LANGUAGE plpython2u;
|
||||
-- ALTER ADD LANGUAGE doesn't pick up the support functions, so we have to.
|
||||
ALTER EXTENSION plpython2u ADD FUNCTION plpython2_call_handler();
|
||||
ALTER EXTENSION plpython2u ADD FUNCTION plpython2_inline_handler(internal);
|
||||
ALTER EXTENSION plpython2u ADD FUNCTION plpython2_validator(oid);
|
||||
7
src/pl/plpython/plpython2u.control
Normal file
7
src/pl/plpython/plpython2u.control
Normal file
@ -0,0 +1,7 @@
|
||||
# plpython2u extension
|
||||
comment = 'PL/Python2U untrusted procedural language'
|
||||
default_version = '1.0'
|
||||
module_pathname = '$libdir/plpython2'
|
||||
relocatable = false
|
||||
schema = pg_catalog
|
||||
superuser = true
|
||||
9
src/pl/plpython/plpython3u--1.0.sql
Normal file
9
src/pl/plpython/plpython3u--1.0.sql
Normal file
@ -0,0 +1,9 @@
|
||||
/* src/pl/plpython/plpython3u--1.0.sql */
|
||||
|
||||
/*
|
||||
* Currently, all the interesting stuff is done by CREATE LANGUAGE.
|
||||
* Later we will probably "dumb down" that command and put more of the
|
||||
* knowledge into this script.
|
||||
*/
|
||||
|
||||
CREATE PROCEDURAL LANGUAGE plpython3u;
|
||||
7
src/pl/plpython/plpython3u--unpackaged--1.0.sql
Normal file
7
src/pl/plpython/plpython3u--unpackaged--1.0.sql
Normal file
@ -0,0 +1,7 @@
|
||||
/* src/pl/plpython/plpython3u--unpackaged--1.0.sql */
|
||||
|
||||
ALTER EXTENSION plpython3u ADD PROCEDURAL LANGUAGE plpython3u;
|
||||
-- ALTER ADD LANGUAGE doesn't pick up the support functions, so we have to.
|
||||
ALTER EXTENSION plpython3u ADD FUNCTION plpython3_call_handler();
|
||||
ALTER EXTENSION plpython3u ADD FUNCTION plpython3_inline_handler(internal);
|
||||
ALTER EXTENSION plpython3u ADD FUNCTION plpython3_validator(oid);
|
||||
7
src/pl/plpython/plpython3u.control
Normal file
7
src/pl/plpython/plpython3u.control
Normal file
@ -0,0 +1,7 @@
|
||||
# plpython3u extension
|
||||
comment = 'PL/Python3U untrusted procedural language'
|
||||
default_version = '1.0'
|
||||
module_pathname = '$libdir/plpython3'
|
||||
relocatable = false
|
||||
schema = pg_catalog
|
||||
superuser = true
|
||||
9
src/pl/plpython/plpythonu--1.0.sql
Normal file
9
src/pl/plpython/plpythonu--1.0.sql
Normal file
@ -0,0 +1,9 @@
|
||||
/* src/pl/plpython/plpythonu--1.0.sql */
|
||||
|
||||
/*
|
||||
* Currently, all the interesting stuff is done by CREATE LANGUAGE.
|
||||
* Later we will probably "dumb down" that command and put more of the
|
||||
* knowledge into this script.
|
||||
*/
|
||||
|
||||
CREATE PROCEDURAL LANGUAGE plpythonu;
|
||||
7
src/pl/plpython/plpythonu--unpackaged--1.0.sql
Normal file
7
src/pl/plpython/plpythonu--unpackaged--1.0.sql
Normal file
@ -0,0 +1,7 @@
|
||||
/* src/pl/plpython/plpythonu--unpackaged--1.0.sql */
|
||||
|
||||
ALTER EXTENSION plpythonu ADD PROCEDURAL LANGUAGE plpythonu;
|
||||
-- ALTER ADD LANGUAGE doesn't pick up the support functions, so we have to.
|
||||
ALTER EXTENSION plpythonu ADD FUNCTION plpython_call_handler();
|
||||
ALTER EXTENSION plpythonu ADD FUNCTION plpython_inline_handler(internal);
|
||||
ALTER EXTENSION plpythonu ADD FUNCTION plpython_validator(oid);
|
||||
7
src/pl/plpython/plpythonu.control
Normal file
7
src/pl/plpython/plpythonu.control
Normal file
@ -0,0 +1,7 @@
|
||||
# plpythonu extension
|
||||
comment = 'PL/PythonU untrusted procedural language'
|
||||
default_version = '1.0'
|
||||
module_pathname = '$libdir/plpython2'
|
||||
relocatable = false
|
||||
schema = pg_catalog
|
||||
superuser = true
|
||||
@ -3,4 +3,6 @@
|
||||
--
|
||||
SET client_min_messages = WARNING;
|
||||
|
||||
DROP PROCEDURAL LANGUAGE plpythonu CASCADE;
|
||||
DROP EXTENSION plpythonu CASCADE;
|
||||
|
||||
DROP EXTENSION IF EXISTS plpython2u CASCADE;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
-- first some tests of basic functionality
|
||||
CREATE LANGUAGE plpython2u;
|
||||
CREATE EXTENSION plpython2u;
|
||||
|
||||
-- really stupid function just to get the module loaded
|
||||
CREATE FUNCTION stupid() RETURNS text AS 'return "zarkon"' LANGUAGE plpythonu;
|
||||
|
||||
Reference in New Issue
Block a user