Skip to content

Commit 5bec3a5

Browse files
committed
array set_eq polishing and tests
1 parent 5008c85 commit 5bec3a5

File tree

3 files changed

+86
-5
lines changed

3 files changed

+86
-5
lines changed

sql/pgtap--1.2.0--1.2.1.sql

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,16 +168,26 @@ RETURNS TEXT AS $$
168168
AND contype = 'x';
169169
$$ LANGUAGE sql;
170170

171+
-- _relcomp array-to-array
172+
CREATE OR REPLACE FUNCTION _relcomp( anyarray, anyarray, TEXT, TEXT )
173+
RETURNS TEXT AS $$
174+
SELECT _docomp(
175+
_temptable( $1, '__taphave__' ),
176+
_temptable( $2, '__tapwant__' ),
177+
$3, $4
178+
);
179+
$$ LANGUAGE sql;
180+
171181
-- set_eq( array, array, description )
172182
CREATE OR REPLACE FUNCTION set_eq(anyarray, anyarray, TEXT)
173183
RETURNS TEXT AS $$
174-
SELECT ok($1 @> $2 AND $2 @> $1, $3);
184+
SELECT _relcomp($1, $2, $3);
175185
$$ LANGUAGE sql;
176186

177187
-- set_eq( array, array )
178188
CREATE OR REPLACE FUNCTION set_eq(anyarray, anyarray)
179189
RETURNS TEXT AS $$
180-
SELECT set_eq($1, $2, 'arrays have identical contents')
190+
SELECT _relcomp($1, $2, '')
181191
$$ LANGUAGE sql;
182192

183193
-- table_comment_has(schema, table, comment, description)

sql/pgtap.sql.in

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6852,6 +6852,15 @@ RETURNS TEXT AS $$
68526852
);
68536853
$$ LANGUAGE sql;
68546854

6855+
CREATE OR REPLACE FUNCTION _relcomp( anyarray, anyarray, TEXT, TEXT )
6856+
RETURNS TEXT AS $$
6857+
SELECT _docomp(
6858+
_temptable( $1, '__taphave__' ),
6859+
_temptable( $2, '__tapwant__' ),
6860+
$3, $4
6861+
);
6862+
$$ LANGUAGE sql;
6863+
68556864
-- set_eq( sql, sql, description )
68566865
CREATE OR REPLACE FUNCTION set_eq( TEXT, TEXT, TEXT )
68576866
RETURNS TEXT AS $$
@@ -6879,13 +6888,13 @@ $$ LANGUAGE sql;
68796888
-- set_eq( array, array, description )
68806889
CREATE OR REPLACE FUNCTION set_eq(anyarray, anyarray, TEXT)
68816890
RETURNS TEXT AS $$
6882-
SELECT ok($1 @> $2 AND $2 @> $1, $3);
6891+
SELECT _relcomp( $1, $2, $3, '' );
68836892
$$ LANGUAGE sql;
68846893

68856894
-- set_eq( array, array )
68866895
CREATE OR REPLACE FUNCTION set_eq(anyarray, anyarray)
68876896
RETURNS TEXT AS $$
6888-
SELECT set_eq($1, $2, 'arrays have identical contents')
6897+
SELECT _relcomp( $1, $2, NULL::text, '' )
68896898
$$ LANGUAGE sql;
68906899

68916900
-- bag_eq( sql, sql, description )

test/sql/resultset.sql

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
\unset ECHO
22
\i test/setup.sql
33

4-
SELECT plan(545);
4+
SELECT plan(560);
55
--SELECT * FROM no_plan();
66

77
-- This will be rolled back. :-)
@@ -1672,6 +1672,68 @@ SELECT * FROM check_test(
16721672
want: (text)'
16731673
);
16741674

1675+
/****************************************************************************/
1676+
-- Test set_eq() with dual arrays.
1677+
SELECT * FROM check_test(
1678+
set_eq(
1679+
ARRAY['Angel', 'Andrea', 'Angelina', 'Antonio', 'Anthony', 'Anna', 'Andrew' ],
1680+
ARRAY['Andrew', 'Anna', 'Anthony', 'Antonio', 'Angelina', 'Andrea', 'Angel' ],
1681+
'whatever'
1682+
),
1683+
true,
1684+
'set_eq(array, array, desc)',
1685+
'whatever',
1686+
''
1687+
);
1688+
1689+
SELECT * FROM check_test(
1690+
set_eq(
1691+
ARRAY['Angel', 'Andrea', 'Angelina', 'Antonio', 'Anthony', 'Anna', 'Andrew' ],
1692+
ARRAY['Andrew', 'Anna', 'Anthony', 'Antonio', 'Angelina', 'Andrea', 'Angel' ]
1693+
),
1694+
true,
1695+
'set_eq(array, array)',
1696+
'',
1697+
''
1698+
);
1699+
1700+
SELECT * FROM check_test(
1701+
set_eq(
1702+
ARRAY['Angel', 'Andrea', 'Angelina', 'Antonio', 'Anthony', 'Anna', 'Andrew' ],
1703+
ARRAY['Andrew', 'Anna', 'Anthony', 'Antonio', 'Angelina', 'Andrea', 'Angel', 'Andrew', 'Anna' ]
1704+
),
1705+
true,
1706+
'set_eq(array, dupe array)',
1707+
'',
1708+
''
1709+
);
1710+
1711+
-- Fail with an extra record.
1712+
SELECT * FROM check_test(
1713+
set_eq(
1714+
ARRAY['Angel', 'Andrea', 'Angelina', 'Antonio', 'Anthony', 'Anna', 'Andrew' ],
1715+
ARRAY['Andrew', 'Anna', 'Antonio', 'Angelina', 'Andrea', 'Angel' ]
1716+
),
1717+
false,
1718+
'set_eq(array, array) extra record',
1719+
'',
1720+
' Extra records:
1721+
(Anthony)'
1722+
);
1723+
1724+
-- Fail with a missing record.
1725+
SELECT * FROM check_test(
1726+
set_eq(
1727+
ARRAY['Angel', 'Andrea', 'Angelina', 'Antonio', 'Anthony', 'Anna', 'Andrew' ],
1728+
ARRAY['Andrew', 'Anna', 'Anthony', 'Alan', 'Antonio', 'Angelina', 'Andrea', 'Angel' ]
1729+
),
1730+
false,
1731+
'set_eq(array, array) missing record',
1732+
'',
1733+
' Missing records:
1734+
(Alan)'
1735+
);
1736+
16751737
/****************************************************************************/
16761738
-- Test bag_eq() with an array argument.
16771739
SELECT * FROM check_test(

0 commit comments

Comments
 (0)