EXECUTE ''DELETE FROM authorization_table WHERE expires < now()'';
-#ifdef HAS_SCHEMAS
SELECT c.oid INTO mytoid FROM pg_class c, pg_namespace n
WHERE c.relname = mytable
AND c.relnamespace = n.oid
AND n.nspname = myschema;
-#else
- SELECT c.oid INTO mytoid FROM pg_class c
- WHERE c.relname = mytable;
-#endif
-- RAISE NOTICE ''toid: %'', mytoid;
CREATEFUNCTION LockRow(text, text, text)
RETURNS int
AS
-#ifdef HAS_SCHEMAS
'SELECT LockRow(current_schema(), $1, $2, $3, now()::timestamp+''1:00'');'
-#else
-'SELECT LockRow('''', $1, $2, $3, now()::timestamp+''1:00'');'
-#endif
LANGUAGE 'sql' _VOLATILE_STRICT;
-- LockRow(schema, table, rid, expires);
CREATEFUNCTION LockRow(text, text, text, timestamp)
RETURNS int
AS
-#ifdef HAS_SCHEMAS
'SELECT LockRow(current_schema(), $1, $2, $3, $4);'
-#else
-'SELECT LockRow('''', $1, $2, $3, $4);'
-#endif
LANGUAGE 'sql' _VOLATILE_STRICT;
RETURNS INT
AS '
DECLARE
-#ifdef HAS_SCHEMAS
schema text;
-#endif
BEGIN
IF NOT LongTransactionsEnabled() THEN
RAISE EXCEPTION ''Long transaction support disabled, use EnableLongTransaction() to enable.'';
END IF;
-#ifdef HAS_SCHEMAS
if ( $1 != '''' ) THEN
schema = $1;
ELSE
SELECT current_schema() into schema;
END IF;
-#endif
-- TODO: check for an already existing trigger ?
EXECUTE ''CREATE TRIGGER check_auth BEFORE UPDATE OR DELETE ON ''
-#ifdef HAS_SCHEMAS
|| quote_ident(schema) || ''.'' || quote_ident($2)
-#else
- || quote_ident($2)
-#endif
||'' FOR EACH ROW EXECUTE PROCEDURE CheckAuthTrigger(''
|| quote_literal($3) || '')'';
IF NOT exists THEN
"query" = ''CREATE VIEW authorized_tables AS '' ||
''SELECT '' ||
-#ifdef HAS_SCHEMAS
''n.nspname as schema, '' ||
-#endif
''c.relname as table, trim('' ||
quote_literal(chr(92) || ''000'') ||
'' from t.tgargs) as id_column '' ||
''FROM pg_trigger t, pg_class c, pg_proc p '' ||
-#ifdef HAS_SCHEMAS
'', pg_namespace n '' ||
-#endif
''WHERE p.proname = '' || quote_literal(''checkauthtrigger'') ||
-#ifdef HAS_SCHEMAS
'' AND c.relnamespace = n.oid'' ||
-#endif
'' AND t.tgfoid = p.oid and t.tgrelid = c.oid'';
EXECUTE "query";
END IF;