Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

394 lines (341 sloc) 9.413 kb
\unset ECHO
\i test_setup.sql
SELECT plan(132);
--SELECT * FROM no_plan();
-- This will be rolled back. :-)
SET client_min_messages = warning;
CREATE TABLE public.sometab(
id INT NOT NULL PRIMARY KEY,
name TEXT DEFAULT '',
numb NUMERIC(10, 2),
myint NUMERIC(8)
);
CREATE RULE ins_me AS ON INSERT TO public.sometab DO NOTHING;
CREATE RULE upd_me AS ON UPDATE TO public.sometab DO ALSO SELECT now();
CREATE TABLE public.toview ( id INT );
CREATE RULE "_RETURN" AS ON SELECT TO public.toview DO INSTEAD SELECT 42 AS id;
CREATE TABLE public.widgets (id int);
CREATE RULE del_me AS ON DELETE TO public.widgets DO NOTHING;
CREATE RULE ins_me AS ON INSERT TO public.widgets DO NOTHING;
RESET client_min_messages;
/****************************************************************************/
-- Test has_rule() and hasnt_rule().
SELECT * FROM check_test(
has_rule( 'public', 'sometab', 'ins_me', 'whatever' ),
true,
'has_rule(schema, table, rule, desc)',
'whatever',
''
);
SELECT * FROM check_test(
has_rule( 'public', 'sometab', 'ins_me'::name ),
true,
'has_rule(schema, table, rule)',
'Relation public.sometab should have rule ins_me',
''
);
SELECT * FROM check_test(
has_rule( 'public', 'sometab', 'del_me', 'whatever' ),
false,
'has_rule(schema, table, rule, desc) fail',
'whatever',
''
);
SELECT * FROM check_test(
has_rule( 'sometab', 'ins_me', 'whatever' ),
true,
'has_rule(table, rule, desc)',
'whatever',
''
);
SELECT * FROM check_test(
has_rule( 'sometab', 'ins_me'::name ),
true,
'has_rule(table, rule)',
'Relation sometab should have rule ins_me',
''
);
SELECT * FROM check_test(
has_rule( 'sometab', 'del_me', 'whatever' ),
false,
'has_rule(table, rule, desc) fail',
'whatever',
''
);
SELECT * FROM check_test(
hasnt_rule( 'public', 'sometab', 'ins_me', 'whatever' ),
false,
'hasnt_rule(schema, table, rule, desc)',
'whatever',
''
);
SELECT * FROM check_test(
hasnt_rule( 'public', 'sometab', 'ins_me'::name ),
false,
'hasnt_rule(schema, table, rule)',
'Relation public.sometab should not have rule ins_me',
''
);
SELECT * FROM check_test(
hasnt_rule( 'public', 'sometab', 'del_me', 'whatever' ),
true,
'hasnt_rule(schema, table, rule, desc) fail',
'whatever',
''
);
SELECT * FROM check_test(
hasnt_rule( 'sometab', 'ins_me', 'whatever' ),
false,
'hasnt_rule(table, rule, desc)',
'whatever',
''
);
SELECT * FROM check_test(
hasnt_rule( 'sometab', 'ins_me'::name ),
false,
'hasnt_rule(table, rule)',
'Relation sometab should not have rule ins_me',
''
);
SELECT * FROM check_test(
hasnt_rule( 'sometab', 'del_me', 'whatever' ),
true,
'hasnt_rule(table, rule, desc) fail',
'whatever',
''
);
/****************************************************************************/
-- Test rule_is_instead().
SELECT * FROM check_test(
rule_is_instead( 'public', 'toview', '_RETURN', 'whatever' ),
true,
'rule_is_instead(schema, table, rule, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_instead( 'public', 'toview', '_RETURN'::name ),
true,
'rule_is_instead(schema, table, rule)',
'Rule "_RETURN" on relation public.toview should be an INSTEAD rule',
''
);
SELECT * FROM check_test(
rule_is_instead( 'public', 'sometab', 'ins_me', 'whatever' ),
false,
'rule_is_instead(schema, table, nothing rule, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_instead( 'public', 'sometab', 'upd_me', 'whatever' ),
false,
'rule_is_instead(schema, table, also rule, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_instead( 'toview', '_RETURN', 'whatever' ),
true,
'rule_is_instead(table, rule, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_instead( 'toview', '_RETURN'::name ),
true,
'rule_is_instead(table, rule)',
'Rule "_RETURN" on relation toview should be an INSTEAD rule',
''
);
SELECT * FROM check_test(
rule_is_instead( 'sometab', 'ins_me', 'whatever' ),
false,
'rule_is_instead(table, nothing rule, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_instead( 'sometab', 'upd_me', 'whatever' ),
false,
'rule_is_instead(table, also rule, desc)',
'whatever',
''
);
-- Check failure diagnostics for non-existent rules.
SELECT * FROM check_test(
rule_is_instead( 'public', 'sometab', 'blah', 'whatever' ),
false,
'rule_is_instead(schema, table, non-existent rule, desc)',
'whatever',
' Rule blah does not exist'
);
SELECT * FROM check_test(
rule_is_instead( 'sometab', 'blah', 'whatever' ),
false,
'rule_is_instead(table, non-existent rule, desc)',
'whatever',
' Rule blah does not exist'
);
/****************************************************************************/
-- Test rule_is_on().
SELECT * FROM check_test(
rule_is_on( 'public', 'sometab', 'ins_me', 'insert', 'whatever' ),
true,
'rule_is_on(schema, table, rule, insert, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'public', 'sometab', 'upd_me', 'update', 'whatever' ),
true,
'rule_is_on(schema, table, rule, update, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'public', 'toview', '_RETURN', 'SELECT', 'whatever' ),
true,
'rule_is_on(schema, table, rule, SELECT, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'public', 'widgets', 'del_me', 'delete', 'whatever' ),
true,
'rule_is_on(schema, table, rule, delete, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'public', 'widgets', 'ins_me', 'insert', 'whatever' ),
true,
'rule_is_on(schema, table, dupe rule, insert, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'public', 'sometab', 'ins_me', 'INSERT', 'whatever' ),
true,
'rule_is_on(schema, table, rule, INSERT, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'public', 'sometab', 'ins_me', 'i', 'whatever' ),
true,
'rule_is_on(schema, table, rule, i, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'public', 'sometab', 'ins_me', 'indigo', 'whatever' ),
true,
'rule_is_on(schema, table, rule, indigo, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'public', 'sometab', 'ins_me'::name, 'i' ),
true,
'rule_is_on(schema, table, rule, i, desc)',
'Rule ins_me should be on INSERT to public.sometab',
''
);
SELECT * FROM check_test(
rule_is_on( 'public', 'sometab', 'ins_me'::name, 'u' ),
false,
'rule_is_on(schema, table, rule, u, desc) fail',
'Rule ins_me should be on UPDATE to public.sometab',
' have: INSERT
want: UPDATE'
);
SELECT * FROM check_test(
rule_is_on( 'public', 'sometab', 'foo_me'::name, 'u' ),
false,
'rule_is_on(schema, table, invalid rule, u, desc)',
'Rule foo_me should be on UPDATE to public.sometab',
' Rule foo_me does not exist on public.sometab'
);
SELECT * FROM check_test(
rule_is_on( 'sometab', 'ins_me', 'insert', 'whatever' ),
true,
'rule_is_on(table, rule, insert, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'sometab', 'upd_me', 'update', 'whatever' ),
true,
'rule_is_on(table, rule, update, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'toview', '_RETURN', 'SELECT', 'whatever' ),
true,
'rule_is_on(table, rule, SELECT, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'widgets', 'del_me', 'delete', 'whatever' ),
true,
'rule_is_on(table, rule, delete, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'widgets', 'ins_me', 'insert', 'whatever' ),
true,
'rule_is_on(table, dupe rule, insert, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'sometab', 'ins_me', 'INSERT', 'whatever' ),
true,
'rule_is_on(table, rule, INSERT, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'sometab', 'ins_me', 'i', 'whatever' ),
true,
'rule_is_on(table, rule, i, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'sometab', 'ins_me', 'indigo', 'whatever' ),
true,
'rule_is_on(table, rule, indigo, desc)',
'whatever',
''
);
SELECT * FROM check_test(
rule_is_on( 'sometab', 'ins_me'::name, 'i' ),
true,
'rule_is_on(table, rule, i, desc)',
'Rule ins_me should be on INSERT to sometab',
''
);
SELECT * FROM check_test(
rule_is_on( 'sometab', 'ins_me'::name, 'u' ),
false,
'rule_is_on(table, rule, u, desc) fail',
'Rule ins_me should be on UPDATE to sometab',
' have: INSERT
want: UPDATE'
);
SELECT * FROM check_test(
rule_is_on( 'sometab', 'foo_me'::name, 'u' ),
false,
'rule_is_on(table, invalid rule, u, desc)',
'Rule foo_me should be on UPDATE to sometab',
' Rule foo_me does not exist on sometab'
);
/****************************************************************************/
-- Finish the tests and clean up.
SELECT * FROM finish();
ROLLBACK;
Jump to Line
Something went wrong with that request. Please try again.