Re: contrib/tablefunc regression test - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: contrib/tablefunc regression test
Date
Msg-id 200209120014.g8C0EX713695@candle.pha.pa.us
Whole thread Raw
In response to contrib/tablefunc regression test  (Joe Conway <mail@joeconway.com>)
List pgsql-patches
Patch applied.  Thanks.

---------------------------------------------------------------------------


Joe Conway wrote:
> The attached removes the current non-standard file
> "contrib/tablefunc/tablefunc-test.sql", and adds a standard regression
> test suite to contrib/tablefunc.
>
> If there are no objections, please apply.
>
> Thanks,
>
> Joe

> Index: contrib/tablefunc/Makefile
> ===================================================================
> RCS file: /opt/src/cvs/pgsql-server/contrib/tablefunc/Makefile,v
> retrieving revision 1.1
> diff -c -r1.1 Makefile
> *** contrib/tablefunc/Makefile    30 Jul 2002 16:31:11 -0000    1.1
> --- contrib/tablefunc/Makefile    5 Sep 2002 22:07:58 -0000
> ***************
> *** 5,9 ****
> --- 5,10 ----
>   MODULES = tablefunc
>   DATA_built = tablefunc.sql
>   DOCS = README.tablefunc
> + REGRESS = tablefunc
>
>   include $(top_srcdir)/contrib/contrib-global.mk
> Index: contrib/tablefunc/tablefunc-test.sql
> ===================================================================
> RCS file: contrib/tablefunc/tablefunc-test.sql
> diff -N contrib/tablefunc/tablefunc-test.sql
> *** contrib/tablefunc/tablefunc-test.sql    2 Sep 2002 05:44:04 -0000    1.3
> --- /dev/null    1 Jan 1970 00:00:00 -0000
> ***************
> *** 1,85 ****
> - --
> - -- normal_rand()
> - --
> - SELECT * FROM normal_rand(100, 250, 5, EXTRACT(SECONDS FROM CURRENT_TIME(0))::int);
> -
> - --
> - -- crosstab()
> - --
> - create table ct(id serial, rowclass text, rowid text, attribute text, value text);
> -
> - insert into ct(rowclass, rowid, attribute, value) values('group1','test1','att1','val1');
> - insert into ct(rowclass, rowid, attribute, value) values('group1','test1','att2','val2');
> - insert into ct(rowclass, rowid, attribute, value) values('group1','test1','att3','val3');
> - insert into ct(rowclass, rowid, attribute, value) values('group1','test1','att4','val4');
> - insert into ct(rowclass, rowid, attribute, value) values('group1','test2','att1','val5');
> - insert into ct(rowclass, rowid, attribute, value) values('group1','test2','att2','val6');
> - insert into ct(rowclass, rowid, attribute, value) values('group1','test2','att3','val7');
> - insert into ct(rowclass, rowid, attribute, value) values('group1','test2','att4','val8');
> - insert into ct(rowclass, rowid, attribute, value) values('group2','test3','att1','val1');
> - insert into ct(rowclass, rowid, attribute, value) values('group2','test3','att2','val2');
> - insert into ct(rowclass, rowid, attribute, value) values('group2','test3','att3','val3');
> - insert into ct(rowclass, rowid, attribute, value) values('group2','test4','att1','val4');
> - insert into ct(rowclass, rowid, attribute, value) values('group2','test4','att2','val5');
> - insert into ct(rowclass, rowid, attribute, value) values('group2','test4','att3','val6');
> -
> - select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute =
''att2''or attribute = ''att3'') order by 1,2;'); 
> - select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute =
''att2''or attribute = ''att3'') order by 1,2;'); 
> - select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute =
''att2''or attribute = ''att3'') order by 1,2;'); 
> -
> - select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;');
> - select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;');
> - select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;');
> -
> - select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute =
''att1''or attribute = ''att2'') order by 1,2;'); 
> - select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute =
''att1''or attribute = ''att2'') order by 1,2;'); 
> - select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute =
''att1''or attribute = ''att2'') order by 1,2;'); 
> -
> - select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;');
> - select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;');
> - select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;');
> -
> - select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 2) as
c(rowidtext, att1 text, att2 text); 
> - select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 3) as
c(rowidtext, att1 text, att2 text, att3 text); 
> - select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 4) as
c(rowidtext, att1 text, att2 text, att3 text, att4 text); 
> -
> - -- test connectby with text based hierarchy
> - DROP TABLE connectby_tree;
> - CREATE TABLE connectby_tree(keyid text, parent_keyid text);
> -
> - INSERT INTO connectby_tree VALUES('row1',NULL);
> - INSERT INTO connectby_tree VALUES('row2','row1');
> - INSERT INTO connectby_tree VALUES('row3','row1');
> - INSERT INTO connectby_tree VALUES('row4','row2');
> - INSERT INTO connectby_tree VALUES('row5','row2');
> - INSERT INTO connectby_tree VALUES('row6','row4');
> - INSERT INTO connectby_tree VALUES('row7','row3');
> - INSERT INTO connectby_tree VALUES('row8','row6');
> - INSERT INTO connectby_tree VALUES('row9','row5');
> -
> - -- with branch
> - SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'row2', 0, '~') AS t(keyid text, parent_keyid
text,level int, branch text); 
> -
> - -- without branch
> - SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'row2', 0) AS t(keyid text, parent_keyid text,
levelint); 
> -
> - -- test connectby with int based hierarchy
> - DROP TABLE connectby_tree;
> - CREATE TABLE connectby_tree(keyid int, parent_keyid int);
> -
> - INSERT INTO connectby_tree VALUES(1,NULL);
> - INSERT INTO connectby_tree VALUES(2,1);
> - INSERT INTO connectby_tree VALUES(3,1);
> - INSERT INTO connectby_tree VALUES(4,2);
> - INSERT INTO connectby_tree VALUES(5,2);
> - INSERT INTO connectby_tree VALUES(6,4);
> - INSERT INTO connectby_tree VALUES(7,3);
> - INSERT INTO connectby_tree VALUES(8,6);
> - INSERT INTO connectby_tree VALUES(9,5);
> -
> - -- with branch
> - SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', '2', 0, '~') AS t(keyid int, parent_keyid int,
levelint, branch text); 
> -
> - -- without branch
> - SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', '2', 0) AS t(keyid int, parent_keyid int, level
int);
> -
> --- 0 ----
> Index: contrib/tablefunc/data/connectby_int.data
> ===================================================================
> RCS file: contrib/tablefunc/data/connectby_int.data
> diff -N contrib/tablefunc/data/connectby_int.data
> *** /dev/null    1 Jan 1970 00:00:00 -0000
> --- contrib/tablefunc/data/connectby_int.data    5 Sep 2002 22:06:23 -0000
> ***************
> *** 0 ****
> --- 1,9 ----
> + 1    \N
> + 2    1
> + 3    1
> + 4    2
> + 5    2
> + 6    4
> + 7    3
> + 8    6
> + 9    5
> Index: contrib/tablefunc/data/connectby_text.data
> ===================================================================
> RCS file: contrib/tablefunc/data/connectby_text.data
> diff -N contrib/tablefunc/data/connectby_text.data
> *** /dev/null    1 Jan 1970 00:00:00 -0000
> --- contrib/tablefunc/data/connectby_text.data    5 Sep 2002 22:04:47 -0000
> ***************
> *** 0 ****
> --- 1,9 ----
> + row1    \N
> + row2    row1
> + row3    row1
> + row4    row2
> + row5    row2
> + row6    row4
> + row7    row3
> + row8    row6
> + row9    row5
> Index: contrib/tablefunc/data/ct.data
> ===================================================================
> RCS file: contrib/tablefunc/data/ct.data
> diff -N contrib/tablefunc/data/ct.data
> *** /dev/null    1 Jan 1970 00:00:00 -0000
> --- contrib/tablefunc/data/ct.data    5 Sep 2002 22:17:16 -0000
> ***************
> *** 0 ****
> --- 1,14 ----
> + 1    group1    test1    att1    val1
> + 2    group1    test1    att2    val2
> + 3    group1    test1    att3    val3
> + 4    group1    test1    att4    val4
> + 5    group1    test2    att1    val5
> + 6    group1    test2    att2    val6
> + 7    group1    test2    att3    val7
> + 8    group1    test2    att4    val8
> + 9    group2    test3    att1    val1
> + 10    group2    test3    att2    val2
> + 11    group2    test3    att3    val3
> + 12    group2    test4    att1    val4
> + 13    group2    test4    att2    val5
> + 14    group2    test4    att3    val6
> Index: contrib/tablefunc/expected/tablefunc.out
> ===================================================================
> RCS file: contrib/tablefunc/expected/tablefunc.out
> diff -N contrib/tablefunc/expected/tablefunc.out
> *** /dev/null    1 Jan 1970 00:00:00 -0000
> --- contrib/tablefunc/expected/tablefunc.out    5 Sep 2002 23:08:45 -0000
> ***************
> *** 0 ****
> --- 1,179 ----
> + --
> + -- first, define the functions.  Turn off echoing so that expected file
> + -- does not depend on contents of seg.sql.
> + --
> + \set ECHO none
> + --
> + -- normal_rand()
> + -- no easy way to do this for regression testing
> + --
> + SELECT avg(normal_rand)::int FROM normal_rand(100, 250, 0.2, EXTRACT(SECONDS FROM CURRENT_TIME(0))::int);
> +  avg
> + -----
> +  250
> + (1 row)
> +
> + --
> + -- crosstab()
> + --
> + create table ct(id int, rowclass text, rowid text, attribute text, value text);
> + \copy ct from 'data/ct.data'
> + select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute =
''att2''or attribute = ''att3'') order by 1,2;'); 
> +  row_name | category_1 | category_2
> + ----------+------------+------------
> +  test1    | val2       | val3
> +  test2    | val6       | val7
> + (2 rows)
> +
> + select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute =
''att2''or attribute = ''att3'') order by 1,2;'); 
> +  row_name | category_1 | category_2 | category_3
> + ----------+------------+------------+------------
> +  test1    | val2       | val3       |
> +  test2    | val6       | val7       |
> + (2 rows)
> +
> + select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute =
''att2''or attribute = ''att3'') order by 1,2;'); 
> +  row_name | category_1 | category_2 | category_3 | category_4
> + ----------+------------+------------+------------+------------
> +  test1    | val2       | val3       |            |
> +  test2    | val6       | val7       |            |
> + (2 rows)
> +
> + select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;');
> +  row_name | category_1 | category_2
> + ----------+------------+------------
> +  test1    | val1       | val2
> +  test2    | val5       | val6
> + (2 rows)
> +
> + select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;');
> +  row_name | category_1 | category_2 | category_3
> + ----------+------------+------------+------------
> +  test1    | val1       | val2       | val3
> +  test2    | val5       | val6       | val7
> + (2 rows)
> +
> + select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;');
> +  row_name | category_1 | category_2 | category_3 | category_4
> + ----------+------------+------------+------------+------------
> +  test1    | val1       | val2       | val3       | val4
> +  test2    | val5       | val6       | val7       | val8
> + (2 rows)
> +
> + select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute =
''att1''or attribute = ''att2'') order by 1,2;'); 
> +  row_name | category_1 | category_2
> + ----------+------------+------------
> +  test3    | val1       | val2
> +  test4    | val4       | val5
> + (2 rows)
> +
> + select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute =
''att1''or attribute = ''att2'') order by 1,2;'); 
> +  row_name | category_1 | category_2 | category_3
> + ----------+------------+------------+------------
> +  test3    | val1       | val2       |
> +  test4    | val4       | val5       |
> + (2 rows)
> +
> + select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute =
''att1''or attribute = ''att2'') order by 1,2;'); 
> +  row_name | category_1 | category_2 | category_3 | category_4
> + ----------+------------+------------+------------+------------
> +  test3    | val1       | val2       |            |
> +  test4    | val4       | val5       |            |
> + (2 rows)
> +
> + select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;');
> +  row_name | category_1 | category_2
> + ----------+------------+------------
> +  test3    | val1       | val2
> +  test4    | val4       | val5
> + (2 rows)
> +
> + select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;');
> +  row_name | category_1 | category_2 | category_3
> + ----------+------------+------------+------------
> +  test3    | val1       | val2       | val3
> +  test4    | val4       | val5       | val6
> + (2 rows)
> +
> + select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;');
> +  row_name | category_1 | category_2 | category_3 | category_4
> + ----------+------------+------------+------------+------------
> +  test3    | val1       | val2       | val3       |
> +  test4    | val4       | val5       | val6       |
> + (2 rows)
> +
> + select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 2) as
c(rowidtext, att1 text, att2 text); 
> +  rowid | att1 | att2
> + -------+------+------
> +  test1 | val1 | val2
> +  test2 | val5 | val6
> + (2 rows)
> +
> + select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 3) as
c(rowidtext, att1 text, att2 text, att3 text); 
> +  rowid | att1 | att2 | att3
> + -------+------+------+------
> +  test1 | val1 | val2 | val3
> +  test2 | val5 | val6 | val7
> + (2 rows)
> +
> + select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 4) as
c(rowidtext, att1 text, att2 text, att3 text, att4 text); 
> +  rowid | att1 | att2 | att3 | att4
> + -------+------+------+------+------
> +  test1 | val1 | val2 | val3 | val4
> +  test2 | val5 | val6 | val7 | val8
> + (2 rows)
> +
> + -- test connectby with text based hierarchy
> + CREATE TABLE connectby_text(keyid text, parent_keyid text);
> + \copy connectby_text from 'data/connectby_text.data'
> + -- with branch
> + SELECT * FROM connectby('connectby_text', 'keyid', 'parent_keyid', 'row2', 0, '~') AS t(keyid text, parent_keyid
text,level int, branch text); 
> +  keyid | parent_keyid | level |       branch
> + -------+--------------+-------+---------------------
> +  row2  |              |     0 | row2
> +  row4  | row2         |     1 | row2~row4
> +  row6  | row4         |     2 | row2~row4~row6
> +  row8  | row6         |     3 | row2~row4~row6~row8
> +  row5  | row2         |     1 | row2~row5
> +  row9  | row5         |     2 | row2~row5~row9
> + (6 rows)
> +
> + -- without branch
> + SELECT * FROM connectby('connectby_text', 'keyid', 'parent_keyid', 'row2', 0) AS t(keyid text, parent_keyid text,
levelint); 
> +  keyid | parent_keyid | level
> + -------+--------------+-------
> +  row2  |              |     0
> +  row4  | row2         |     1
> +  row6  | row4         |     2
> +  row8  | row6         |     3
> +  row5  | row2         |     1
> +  row9  | row5         |     2
> + (6 rows)
> +
> + -- test connectby with int based hierarchy
> + CREATE TABLE connectby_int(keyid int, parent_keyid int);
> + \copy connectby_int from 'data/connectby_int.data'
> + -- with branch
> + SELECT * FROM connectby('connectby_int', 'keyid', 'parent_keyid', '2', 0, '~') AS t(keyid int, parent_keyid int,
levelint, branch text); 
> +  keyid | parent_keyid | level | branch
> + -------+--------------+-------+---------
> +      2 |              |     0 | 2
> +      4 |            2 |     1 | 2~4
> +      6 |            4 |     2 | 2~4~6
> +      8 |            6 |     3 | 2~4~6~8
> +      5 |            2 |     1 | 2~5
> +      9 |            5 |     2 | 2~5~9
> + (6 rows)
> +
> + -- without branch
> + SELECT * FROM connectby('connectby_int', 'keyid', 'parent_keyid', '2', 0) AS t(keyid int, parent_keyid int, level
int);
> +  keyid | parent_keyid | level
> + -------+--------------+-------
> +      2 |              |     0
> +      4 |            2 |     1
> +      6 |            4 |     2
> +      8 |            6 |     3
> +      5 |            2 |     1
> +      9 |            5 |     2
> + (6 rows)
> +
> Index: contrib/tablefunc/sql/tablefunc.sql
> ===================================================================
> RCS file: contrib/tablefunc/sql/tablefunc.sql
> diff -N contrib/tablefunc/sql/tablefunc.sql
> *** /dev/null    1 Jan 1970 00:00:00 -0000
> --- contrib/tablefunc/sql/tablefunc.sql    5 Sep 2002 22:25:35 -0000
> ***************
> *** 0 ****
> --- 1,60 ----
> + --
> + -- first, define the functions.  Turn off echoing so that expected file
> + -- does not depend on contents of seg.sql.
> + --
> + \set ECHO none
> + \i tablefunc.sql
> + \set ECHO all
> +
> + --
> + -- normal_rand()
> + -- no easy way to do this for regression testing
> + --
> + SELECT avg(normal_rand)::int FROM normal_rand(100, 250, 0.2, EXTRACT(SECONDS FROM CURRENT_TIME(0))::int);
> +
> + --
> + -- crosstab()
> + --
> + create table ct(id int, rowclass text, rowid text, attribute text, value text);
> + \copy ct from 'data/ct.data'
> +
> + select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute =
''att2''or attribute = ''att3'') order by 1,2;'); 
> + select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute =
''att2''or attribute = ''att3'') order by 1,2;'); 
> + select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute =
''att2''or attribute = ''att3'') order by 1,2;'); 
> +
> + select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;');
> + select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;');
> + select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;');
> +
> + select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute =
''att1''or attribute = ''att2'') order by 1,2;'); 
> + select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute =
''att1''or attribute = ''att2'') order by 1,2;'); 
> + select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute =
''att1''or attribute = ''att2'') order by 1,2;'); 
> +
> + select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;');
> + select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;');
> + select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;');
> +
> + select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 2) as
c(rowidtext, att1 text, att2 text); 
> + select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 3) as
c(rowidtext, att1 text, att2 text, att3 text); 
> + select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 4) as
c(rowidtext, att1 text, att2 text, att3 text, att4 text); 
> +
> + -- test connectby with text based hierarchy
> + CREATE TABLE connectby_text(keyid text, parent_keyid text);
> + \copy connectby_text from 'data/connectby_text.data'
> +
> + -- with branch
> + SELECT * FROM connectby('connectby_text', 'keyid', 'parent_keyid', 'row2', 0, '~') AS t(keyid text, parent_keyid
text,level int, branch text); 
> +
> + -- without branch
> + SELECT * FROM connectby('connectby_text', 'keyid', 'parent_keyid', 'row2', 0) AS t(keyid text, parent_keyid text,
levelint); 
> +
> + -- test connectby with int based hierarchy
> + CREATE TABLE connectby_int(keyid int, parent_keyid int);
> + \copy connectby_int from 'data/connectby_int.data'
> +
> + -- with branch
> + SELECT * FROM connectby('connectby_int', 'keyid', 'parent_keyid', '2', 0, '~') AS t(keyid int, parent_keyid int,
levelint, branch text); 
> +
> + -- without branch
> + SELECT * FROM connectby('connectby_int', 'keyid', 'parent_keyid', '2', 0) AS t(keyid int, parent_keyid int, level
int);
> +

>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: fix for palloc() of user-supplied length
Next
From: Bruce Momjian
Date:
Subject: Re: contrib/intarray regression failure fix