-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfunction.sql
More file actions
50 lines (44 loc) · 1.32 KB
/
function.sql
File metadata and controls
50 lines (44 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
CREATE OR REPLACE FUNCTION cant_execute_srf()
RETURNS SETOF int LANGUAGE SQL AS
'SELECT 1';
CREATE OR REPLACE FUNCTION cant_execute_poly(anyelement)
RETURNS anyelement LANGUAGE SQL AS
'SELECT $1';
CREATE OR REPLACE FUNCTION cant_execute_trig()
RETURNS TRIGGER LANGUAGE python AS
$python$
pass
$python$;
CREATE OR REPLACE FUNCTION check_not_implemented() RETURNS text language python AS
$python$
funcs = [
proc('cant_execute_srf()'),
proc('cant_execute_poly(anyelement)'),
proc('cant_execute_trig()'),
]
def main():
i = 0
for x in funcs:
i = i + 1
try:
x()
return 'fail @ ' + str(i)
except NotImplementedError:
pass
return 'success'
$python$;
-- Make sure we can't directly execute SRFs, polymorphic,
-- and trigger returning functions.
SELECT check_not_implemented();
-- Check that the schema is being properly quoted
DROP SCHEMA IF EXISTS "need""quote" CASCADE;
CREATE SCHEMA "need""quote";
CREATE FUNCTION "need""quote".funcname(int, text) RETURNS VOID LANGUAGE python AS
$python$
nspname = prepare('select nspname from pg_catalog.pg_namespace WHERE oid = $1').first
def main(i, t):
assert nspname(__func__.namespace) == __func__.nspname
raise ValueError("look at the filename:" + __func__.filename)
$python$;
SELECT "need""quote".funcname(1,'t');
-- The fun part is where the original nspname is no longer up-to-date.