| -- |
| -- Test named and nameless parameters |
| -- |
| CREATE FUNCTION test_param_names0(integer, integer) RETURNS int AS $$ |
| return args[0] + args[1] |
| $$ LANGUAGE plpythonu; |
| CREATE FUNCTION test_param_names1(a0 integer, a1 text) RETURNS boolean AS $$ |
| assert a0 == args[0] |
| assert a1 == args[1] |
| return True |
| $$ LANGUAGE plpythonu; |
| CREATE FUNCTION test_param_names2(u users) RETURNS text AS $$ |
| assert u == args[0] |
| if isinstance(u, dict): |
| # stringify dict the hard way because otherwise the order is implementation-dependent |
| u_keys = list(u.keys()) |
| u_keys.sort() |
| s = '{' + ', '.join([repr(k) + ': ' + repr(u[k]) for k in u_keys]) + '}' |
| else: |
| s = str(u) |
| return s |
| $$ LANGUAGE plpythonu; |
| -- use deliberately wrong parameter names |
| CREATE FUNCTION test_param_names3(a0 integer) RETURNS boolean AS $$ |
| try: |
| assert a1 == args[0] |
| return False |
| except NameError as e: |
| assert e.args[0].find("a1") > -1 |
| return True |
| $$ LANGUAGE plpythonu; |
| SELECT test_param_names0(2,7); |
| test_param_names0 |
| ------------------- |
| 9 |
| (1 row) |
| |
| SELECT test_param_names1(1,'text'); |
| test_param_names1 |
| ------------------- |
| t |
| (1 row) |
| |
| SELECT test_param_names2(users) from users; |
| test_param_names2 |
| ----------------------------------------------------------------------- |
| {'fname': 'jane', 'lname': 'doe', 'userid': 1, 'username': 'j_doe'} |
| {'fname': 'john', 'lname': 'doe', 'userid': 2, 'username': 'johnd'} |
| {'fname': 'willem', 'lname': 'doe', 'userid': 3, 'username': 'w_doe'} |
| {'fname': 'rick', 'lname': 'smith', 'userid': 4, 'username': 'slash'} |
| (4 rows) |
| |
| SELECT test_param_names2(NULL); |
| test_param_names2 |
| ------------------- |
| None |
| (1 row) |
| |
| SELECT test_param_names3(1); |
| test_param_names3 |
| ------------------- |
| t |
| (1 row) |
| |