@@ -2418,6 +2418,18 @@ RETURNS TEXT AS $$
24182418 SELECT col_has_check( $1, $2, 'Column ' || quote_ident($1) || '(' || quote_ident($2) || ') should have a check constraint' );
24192419$$ LANGUAGE sql;
24202420
2421+ -- col_has_exclusion(schema, table, columns, description)
2422+ CREATE OR REPLACE FUNCTION col_has_exclusion(TEXT, TEXT, TEXT[], TEXT)
2423+ RETURNS TEXT AS $$
2424+ SELECT ok(array_agg(attr.attname)::TEXT[] @> $3 AND $3 @> array_agg(attr.attname)::TEXT[])
2425+ FROM pg_constraint AS con
2426+ JOIN LATERAL unnest(con.conkey) AS attnums (num) ON TRUE
2427+ JOIN pg_attribute AS attr ON attr.attrelid = con.conrelid
2428+ AND attr.attnum = attnums.num
2429+ WHERE conrelid = format('%1$I.%2$I', $1, $2)::regclass
2430+ AND contype = 'x';
2431+ $$ LANGUAGE sql;
2432+
24212433-- fk_ok( fk_schema, fk_table, fk_column[], pk_schema, pk_table, pk_column[], description )
24222434CREATE OR REPLACE FUNCTION fk_ok ( NAME, NAME, NAME[], NAME, NAME, NAME[], TEXT )
24232435RETURNS TEXT AS $$
@@ -6864,6 +6876,18 @@ RETURNS TEXT AS $$
68646876 SELECT _relcomp( $1, $2, NULL::text, '' );
68656877$$ LANGUAGE sql;
68666878
6879+ -- set_eq( array, array, description )
6880+ CREATE OR REPLACE FUNCTION set_eq(anyarray, anyarray, TEXT)
6881+ RETURNS TEXT AS $$
6882+ SELECT ok($1 @> $2 AND $2 @> $1, $3);
6883+ $$ LANGUAGE sql;
6884+
6885+ -- set_eq( array, array )
6886+ CREATE OR REPLACE FUNCTION set_eq(anyarray, anyarray)
6887+ RETURNS TEXT AS $$
6888+ SELECT set_eq($1, $2, 'arrays have identical contents')
6889+ $$ LANGUAGE sql;
6890+
68676891-- bag_eq( sql, sql, description )
68686892CREATE OR REPLACE FUNCTION bag_eq( TEXT, TEXT, TEXT )
68696893RETURNS TEXT AS $$
@@ -11366,3 +11390,65 @@ RETURNS TEXT AS $$
1136611390 'Function ' || quote_ident($1) || '() should not be a procedure'
1136711391 );
1136811392$$ LANGUAGE sql;
11393+
11394+ -- table_comment_has(schema, table, comment, description)
11395+ CREATE OR REPLACE FUNCTION table_comment_has(TEXT, TEXT, TEXT, TEXT)
11396+ RETURNS TEXT AS $$
11397+ SELECT ok(COUNT(*) >= 1, $4)
11398+ FROM pg_description
11399+ JOIN LATERAL regexp_split_to_table(description, '\n') AS lines (line) ON TRUE
11400+ WHERE objoid = format('%1$I.%2$I', $1, $2)::regclass
11401+ AND objsubid = 0
11402+ AND trim(line) ILIKE $3
11403+ $$ LANGUAGE sql;
11404+
11405+ -- table_comment_has(schema, table, comment)
11406+ CREATE OR REPLACE FUNCTION table_comment_has(TEXT, TEXT, TEXT)
11407+ RETURNS TEXT AS $$
11408+ SELECT table_comment_has($1, $2, $3, 'table comment contains expected line');
11409+ $$ LANGUAGE sql;
11410+
11411+ -- column_comment_has(schema, table, column, comment, description)
11412+ CREATE OR REPLACE FUNCTION column_comment_has(TEXT, TEXT, TEXT, TEXT, TEXT)
11413+ RETURNS TEXT AS $$
11414+ SELECT ok(COUNT(*) >= 1, $5)
11415+ FROM pg_description
11416+ JOIN pg_attribute AS attr
11417+ ON attr.attrelid = pg_description.objoid
11418+ AND attr.attnum = pg_description.objsubid
11419+ JOIN LATERAL regexp_split_to_table(description, '\n') AS lines (line) ON TRUE
11420+ WHERE objoid = format('%1$I.%2$I', $1, $2)::regclass
11421+ AND attr.attname = $3::name
11422+ AND trim(line) ILIKE $4
11423+ $$ LANGUAGE sql;
11424+
11425+ -- column_comment_has(schema, table, column, comment)
11426+ CREATE OR REPLACE FUNCTION column_comment_has(TEXT, TEXT, TEXT, TEXT)
11427+ RETURNS TEXT AS $$
11428+ SELECT column_comment_has($1, $2, $3, $4, 'column comment contains expected line');
11429+ $$ LANGUAGE sql;
11430+
11431+ -- function_comment_has(schema, function, comment, description)
11432+ CREATE OR REPLACE FUNCTION function_comment_has(TEXT, TEXT, TEXT, TEXT)
11433+ RETURNS TEXT AS $$
11434+ SELECT ok(COUNT(*) >= 1, $4)
11435+ FROM pg_description
11436+ JOIN LATERAL regexp_split_to_table(description, '\n') AS lines (line) ON TRUE
11437+ WHERE objoid = format('%1$I.%2$I', $1, $2)::regproc
11438+ AND objsubid = 0
11439+ AND trim(line) ILIKE $3
11440+ $$ LANGUAGE sql;
11441+
11442+ -- function_comment_has(schema, function, comment)
11443+ CREATE OR REPLACE FUNCTION function_comment_has(TEXT, TEXT, TEXT)
11444+ RETURNS TEXT AS $$
11445+ SELECT function_comment_has($1, $2, $3, 'function comment contains expected line');
11446+ $$ LANGUAGE sql;
11447+
11448+ -- rls_is_enabled(schema, table, desired_value)
11449+ CREATE OR REPLACE FUNCTION rls_is_enabled(TEXT, TEXT, BOOLEAN)
11450+ RETURNS TEXT AS $$
11451+ SELECT ok(relrowsecurity IS NOT DISTINCT FROM $3)
11452+ FROM pg_class
11453+ WHERE oid = format('%1$I.%2$I', $1, $2)::regclass
11454+ $$ LANGUAGE sql;
0 commit comments