diff -r 80b455066c9a -r f65743cc53e4 schemas/_regproc_bss.postgres.sql --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schemas/_regproc_bss.postgres.sql Fri Jan 22 08:49:16 2010 +0100 @@ -0,0 +1,38 @@ +/* -*- sql -*- + + postgres specific registered procedures for the Bytes File System storage, + require the plpythonu language installed + +*/ + + +CREATE OR REPLACE FUNCTION _fsopen(bytea) RETURNS bytea AS $$ + fpath = args[0] + if fpath: + try: + data = file(fpath, 'rb').read() + #/* XXX due to plpython bug we have to replace some characters... */ + return data.replace("\\", r"\134").replace("\000", r"\000").replace("'", r"\047") #' + except Exception, ex: + plpy.warning('failed to get content for %s: %s', fpath, ex) + return None +$$ LANGUAGE plpythonu +/* WITH(ISCACHABLE) XXX does postgres handle caching of large data nicely */ +;; + +/* fspath(eid, entity type, attribute) */ +CREATE OR REPLACE FUNCTION fspath(bigint, text, text) RETURNS bytea AS $$ + pkey = 'plan%s%s' % (args[1], args[2]) + try: + plan = SD[pkey] + except KeyError: + #/* then prepare and cache plan to get versioned file information from a + # version content eid */ + plan = plpy.prepare( + 'SELECT X.cw_%s FROM cw_%s as X WHERE X.cw_eid=$1' % (args[2], args[1]), + ['bigint']) + SD[pkey] = plan + return plpy.execute(plan, [args[0]])[0] +$$ LANGUAGE plpythonu +/* WITH(ISCACHABLE) XXX does postgres handle caching of large data nicely */ +;;