diff options
Diffstat (limited to 'src/pl/plpython/plpython_function.sql')
-rw-r--r-- | src/pl/plpython/plpython_function.sql | 324 |
1 files changed, 0 insertions, 324 deletions
diff --git a/src/pl/plpython/plpython_function.sql b/src/pl/plpython/plpython_function.sql deleted file mode 100644 index c849c3e5b97..00000000000 --- a/src/pl/plpython/plpython_function.sql +++ /dev/null @@ -1,324 +0,0 @@ - - -CREATE FUNCTION global_test_one() returns text - AS -'if not SD.has_key("global_test"): - SD["global_test"] = "set by global_test_one" -if not GD.has_key("global_test"): - GD["global_test"] = "set by global_test_one" -return "SD: " + SD["global_test"] + ", GD: " + GD["global_test"]' - LANGUAGE plpythonu; - -CREATE FUNCTION global_test_two() returns text - AS -'if not SD.has_key("global_test"): - SD["global_test"] = "set by global_test_two" -if not GD.has_key("global_test"): - GD["global_test"] = "set by global_test_two" -return "SD: " + SD["global_test"] + ", GD: " + GD["global_test"]' - LANGUAGE plpythonu; - - -CREATE FUNCTION static_test() returns int4 - AS -'if SD.has_key("call"): - SD["call"] = SD["call"] + 1 -else: - SD["call"] = 1 -return SD["call"] -' - LANGUAGE plpythonu; - --- import python modules - -CREATE FUNCTION import_fail() returns text - AS -'try: - import foosocket -except Exception, ex: - plpy.notice("import socket failed -- %s" % str(ex)) - return "failed as expected" -return "succeeded, that wasn''t supposed to happen"' - LANGUAGE plpythonu; - - -CREATE FUNCTION import_succeed() returns text - AS -'try: - import array - import bisect - import calendar - import cmath - import errno - import math - import md5 - import operator - import random - import re - import sha - import string - import time - import whrandom -except Exception, ex: - plpy.notice("import failed -- %s" % str(ex)) - return "failed, that wasn''t supposed to happen" -return "succeeded, as expected"' - LANGUAGE plpythonu; - -CREATE FUNCTION import_test_one(text) RETURNS text - AS -'import sha -digest = sha.new(args[0]) -return digest.hexdigest()' - LANGUAGE plpythonu; - -CREATE FUNCTION import_test_two(users) RETURNS text - AS -'import sha -plain = args[0]["fname"] + args[0]["lname"] -digest = sha.new(plain); -return "sha hash of " + plain + " is " + digest.hexdigest()' - LANGUAGE plpythonu; - -CREATE FUNCTION argument_test_one(users, text, text) RETURNS text - AS -'keys = args[0].keys() -keys.sort() -out = [] -for key in keys: - out.append("%s: %s" % (key, args[0][key])) -words = args[1] + " " + args[2] + " => {" + ", ".join(out) + "}" -return words' - LANGUAGE plpythonu; - - --- these triggers are dedicated to HPHC of RI who --- decided that my kid's name was william not willem, and --- vigorously resisted all efforts at correction. they have --- since gone bankrupt... - -CREATE FUNCTION users_insert() returns trigger - AS -'if TD["new"]["fname"] == None or TD["new"]["lname"] == None: - return "SKIP" -if TD["new"]["username"] == None: - TD["new"]["username"] = TD["new"]["fname"][:1] + "_" + TD["new"]["lname"] - rv = "MODIFY" -else: - rv = None -if TD["new"]["fname"] == "william": - TD["new"]["fname"] = TD["args"][0] - rv = "MODIFY" -return rv' - LANGUAGE plpythonu; - - -CREATE FUNCTION users_update() returns trigger - AS -'if TD["event"] == "UPDATE": - if TD["old"]["fname"] != TD["new"]["fname"] and TD["old"]["fname"] == TD["args"][0]: - return "SKIP" -return None' - LANGUAGE plpythonu; - - -CREATE FUNCTION users_delete() RETURNS trigger - AS -'if TD["old"]["fname"] == TD["args"][0]: - return "SKIP" -return None' - LANGUAGE plpythonu; - - -CREATE TRIGGER users_insert_trig BEFORE INSERT ON users FOR EACH ROW - EXECUTE PROCEDURE users_insert ('willem'); - -CREATE TRIGGER users_update_trig BEFORE UPDATE ON users FOR EACH ROW - EXECUTE PROCEDURE users_update ('willem'); - -CREATE TRIGGER users_delete_trig BEFORE DELETE ON users FOR EACH ROW - EXECUTE PROCEDURE users_delete ('willem'); - - --- nested calls --- - -CREATE FUNCTION nested_call_one(text) RETURNS text - AS -'q = "SELECT nested_call_two(''%s'')" % args[0] -r = plpy.execute(q) -return r[0]' - LANGUAGE plpythonu ; - -CREATE FUNCTION nested_call_two(text) RETURNS text - AS -'q = "SELECT nested_call_three(''%s'')" % args[0] -r = plpy.execute(q) -return r[0]' - LANGUAGE plpythonu ; - -CREATE FUNCTION nested_call_three(text) RETURNS text - AS -'return args[0]' - LANGUAGE plpythonu ; - --- some spi stuff - -CREATE FUNCTION spi_prepared_plan_test_one(text) RETURNS text - AS -'if not SD.has_key("myplan"): - q = "SELECT count(*) FROM users WHERE lname = $1" - SD["myplan"] = plpy.prepare(q, [ "text" ]) -try: - rv = plpy.execute(SD["myplan"], [args[0]]) - return "there are " + str(rv[0]["count"]) + " " + str(args[0]) + "s" -except Exception, ex: - plpy.error(str(ex)) -return None -' - LANGUAGE plpythonu; - -CREATE FUNCTION spi_prepared_plan_test_nested(text) RETURNS text - AS -'if not SD.has_key("myplan"): - q = "SELECT spi_prepared_plan_test_one(''%s'') as count" % args[0] - SD["myplan"] = plpy.prepare(q) -try: - rv = plpy.execute(SD["myplan"]) - if len(rv): - return rv[0]["count"] -except Exception, ex: - plpy.error(str(ex)) -return None -' - LANGUAGE plpythonu; - - -/* really stupid function just to get the module loaded -*/ -CREATE FUNCTION stupid() RETURNS text AS 'return "zarkon"' LANGUAGE plpythonu; - -/* a typo -*/ -CREATE FUNCTION invalid_type_uncaught(text) RETURNS text - AS -'if not SD.has_key("plan"): - q = "SELECT fname FROM users WHERE lname = $1" - SD["plan"] = plpy.prepare(q, [ "test" ]) -rv = plpy.execute(SD["plan"], [ args[0] ]) -if len(rv): - return rv[0]["fname"] -return None -' - LANGUAGE plpythonu; - -/* for what it's worth catch the exception generated by - * the typo, and return None - */ -CREATE FUNCTION invalid_type_caught(text) RETURNS text - AS -'if not SD.has_key("plan"): - q = "SELECT fname FROM users WHERE lname = $1" - try: - SD["plan"] = plpy.prepare(q, [ "test" ]) - except plpy.SPIError, ex: - plpy.notice(str(ex)) - return None -rv = plpy.execute(SD["plan"], [ args[0] ]) -if len(rv): - return rv[0]["fname"] -return None -' - LANGUAGE plpythonu; - -/* for what it's worth catch the exception generated by - * the typo, and reraise it as a plain error - */ -CREATE FUNCTION invalid_type_reraised(text) RETURNS text - AS -'if not SD.has_key("plan"): - q = "SELECT fname FROM users WHERE lname = $1" - try: - SD["plan"] = plpy.prepare(q, [ "test" ]) - except plpy.SPIError, ex: - plpy.error(str(ex)) -rv = plpy.execute(SD["plan"], [ args[0] ]) -if len(rv): - return rv[0]["fname"] -return None -' - LANGUAGE plpythonu; - - -/* no typo no messing about -*/ -CREATE FUNCTION valid_type(text) RETURNS text - AS -'if not SD.has_key("plan"): - SD["plan"] = plpy.prepare("SELECT fname FROM users WHERE lname = $1", [ "text" ]) -rv = plpy.execute(SD["plan"], [ args[0] ]) -if len(rv): - return rv[0]["fname"] -return None -' - LANGUAGE plpythonu; -/* Flat out syntax error -*/ -CREATE FUNCTION sql_syntax_error() RETURNS text - AS -'plpy.execute("syntax error")' - LANGUAGE plpythonu; - -/* check the handling of uncaught python exceptions - */ -CREATE FUNCTION exception_index_invalid(text) RETURNS text - AS -'return args[1]' - LANGUAGE plpythonu; - -/* check handling of nested exceptions - */ -CREATE FUNCTION exception_index_invalid_nested() RETURNS text - AS -'rv = plpy.execute("SELECT test5(''foo'')") -return rv[0]' - LANGUAGE plpythonu; - - -CREATE FUNCTION join_sequences(sequences) RETURNS text - AS -'if not args[0]["multipart"]: - return args[0]["sequence"] -q = "SELECT sequence FROM xsequences WHERE pid = ''%s''" % args[0]["pid"] -rv = plpy.execute(q) -seq = args[0]["sequence"] -for r in rv: - seq = seq + r["sequence"] -return seq -' - LANGUAGE plpythonu; - -CREATE OR REPLACE FUNCTION read_file(text) RETURNS text AS ' - return open(args[0]).read() -' LANGUAGE plpythonu; - -CREATE OR REPLACE FUNCTION write_file(text,text) RETURNS text AS ' - open(args[0],"w").write(args[1]) - return "Wrote to file: %s" % args[0] -' LANGUAGE plpythonu; - --- --- Universal Newline Support --- - -CREATE OR REPLACE FUNCTION newline_lf() RETURNS integer AS -'x = 100\ny = 23\nreturn x + y\n' -LANGUAGE plpythonu; - -CREATE OR REPLACE FUNCTION newline_cr() RETURNS integer AS -'x = 100\ry = 23\rreturn x + y\r' -LANGUAGE plpythonu; - -CREATE OR REPLACE FUNCTION newline_crlf() RETURNS integer AS -'x = 100\r\ny = 23\r\nreturn x + y\r\n' -LANGUAGE plpythonu; |