From: Marc G. Fournier Date: Sat, 5 Apr 1997 11:08:30 +0000 (+0000) Subject: There are the broken out 'sql' queries from queries.source X-Git-Tag: REL6_1~358 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d108a310823c3a7a248cbcc52d4474b0992b4310;p=postgresql There are the broken out 'sql' queries from queries.source tests allows us to have a 'for...done' loop inside of regress.sh for both doing the tests, and determining fail/ok results --- diff --git a/src/test/regress/sql/abstime.sql b/src/test/regress/sql/abstime.sql new file mode 100644 index 0000000000..e5f648a2db --- /dev/null +++ b/src/test/regress/sql/abstime.sql @@ -0,0 +1,87 @@ +-- **** testing built-in time types: abstime, reltime, and tinterval **** + +-- +-- timezones may vary based not only on location but the operating +-- system. the main correctness issue is that the OS may not get +-- DST right for times prior to unix epoch (jan 1 1970). +-- + +CREATE TABLE ABSTIME_TBL (f1 abstime); + +INSERT INTO ABSTIME_TBL (f1) VALUES ('Jan 14, 1973 03:14:21'); + +-- was INSERT INTO ABSTIME_TBL (f1) VALUES ('now'::abstime): +INSERT INTO ABSTIME_TBL (f1) VALUES ('Mon May 1 00:30:30 1995'::abstime); + +INSERT INTO ABSTIME_TBL (f1) VALUES ('epoch'::abstime); + +INSERT INTO ABSTIME_TBL (f1) VALUES ('current'::abstime); + +INSERT INTO ABSTIME_TBL (f1) VALUES ('infinity'::abstime); + +INSERT INTO ABSTIME_TBL (f1) VALUES ('-infinity'::abstime); + +INSERT INTO ABSTIME_TBL (f1) VALUES ('May 10, 1943 23:59:12'); + + +-- what happens if we specify slightly misformatted abstime? +INSERT INTO ABSTIME_TBL (f1) VALUES ('Feb 35, 1946 10:00:00'); + +INSERT INTO ABSTIME_TBL (f1) VALUES ('Feb 28, 1984 25:08:10'); + + +-- badly formatted abstimes: these should result in invalid abstimes +INSERT INTO ABSTIME_TBL (f1) VALUES ('bad date format'); + +INSERT INTO ABSTIME_TBL (f1) VALUES ('Jun 10, 1843'); + +-- test abstime operators + +SELECT '' AS eleven, ABSTIME_TBL.*; + +SELECT '' AS eight, ABSTIME_TBL.* + WHERE ABSTIME_TBL.f1 < 'Jun 30, 2001'::abstime; + +SELECT '' AS eight, ABSTIME_TBL.* + WHERE ABSTIME_TBL.f1 > '-infinity'::abstime; + +SELECT '' AS eight, ABSTIME_TBL.* + WHERE 'May 10, 1943 23:59:12'::abstime <> ABSTIME_TBL.f1; + +SELECT '' AS one, ABSTIME_TBL.* + WHERE 'current'::abstime = ABSTIME_TBL.f1; + +SELECT '' AS five, ABSTIME_TBL.* + WHERE 'epoch'::abstime >= ABSTIME_TBL.f1; + +SELECT '' AS six, ABSTIME_TBL.* + WHERE ABSTIME_TBL.f1 <= 'Jan 14, 1973 03:14:21'::abstime; + +SELECT '' AS six, ABSTIME_TBL.* + WHERE ABSTIME_TBL.f1 + '["Apr 1 1945 00:00:00" "Dec 30 1999 23:00:00"]'::tinterval; + +-- these four queries should return the same answer +-- the "infinity" and "-infinity" tuples in ABSTIME_TBL cannot be added and +-- therefore, should not show up in the results. +SELECT '' AS five, ABSTIME_TBL.* + WHERE (ABSTIME_TBL.f1 + '@ 3 year'::reltime) -- +3 years + < 'Jan 14 14:00:00 1977'::abstime; + +SELECT '' AS five, ABSTIME_TBL.* + WHERE (ABSTIME_TBL.f1 + '@ 3 year ago'::reltime) -- -3 years + < 'Jan 14 14:00:00 1971'::abstime; + +SELECT '' AS five, ABSTIME_TBL.* + WHERE (ABSTIME_TBL.f1 - '@ 3 year'::reltime) -- -(+3) years + < 'Jan 14 14:00:00 1971'::abstime; + +SELECT '' AS five, ABSTIME_TBL.* + WHERE (ABSTIME_TBL.f1 - '@ 3 year ago'::reltime) -- -(-3) years + < 'Jan 14 14:00:00 1977'::abstime; + + +SELECT '' AS twenty, ABSTIME_TBL.*, RELTIME_TBL.* + WHERE (ABSTIME_TBL.f1 + RELTIME_TBL.f1) + < 'Jan 14 14:00:00 1971'::abstime; + diff --git a/src/test/regress/sql/boolean.sql b/src/test/regress/sql/boolean.sql new file mode 100644 index 0000000000..8fbe5edb8c --- /dev/null +++ b/src/test/regress/sql/boolean.sql @@ -0,0 +1,95 @@ +-- +-- boolean.source +-- +-- $Header: /cvsroot/pgsql/src/test/regress/sql/boolean.sql,v 1.1 1997/04/05 11:08:15 scrappy Exp $ +-- + +-- +-- sanity check - if this fails go insane! +-- +SELECT 1 AS one; + + +-- ******************testing built-in type bool******************** + +-- check bool type-casting as well as and, or, not in qualifications-- + +SELECT 't'::bool AS true; + +SELECT 'f'::bool AS false; + +SELECT 't'::bool or 'f'::bool AS true; + +SELECT 't'::bool and 'f'::bool AS false; + +SELECT not 'f'::bool AS true; + +SELECT 't'::bool = 'f'::bool AS false; + +SELECT 't'::bool <> 'f'::bool AS true; + + +CREATE TABLE BOOLTBL1 (f1 bool); + +INSERT INTO BOOLTBL1 (f1) VALUES ('t'::bool); + +INSERT INTO BOOLTBL1 (f1) VALUES ('True'::bool); + +INSERT INTO BOOLTBL1 (f1) VALUES ('true'::bool); + + +-- BOOLTBL1 should be full of true's at this point +SELECT '' AS t_3, BOOLTBL1.*; + + +SELECT '' AS t_3, BOOLTBL1.* + FROM BOOLTBL1 + WHERE f1 = 'true'::bool; + + +SELECT '' AS t_3, BOOLTBL1.* + FROM BOOLTBL1 + WHERE f1 <> 'false'::bool; + +SELECT '' AS zero, BOOLTBL1.* + FROM BOOLTBL1 + WHERE booleq('false'::bool, f1); + +INSERT INTO BOOLTBL1 (f1) VALUES ('f'::bool); + +SELECT '' AS f_1, BOOLTBL1.* + FROM BOOLTBL1 + WHERE f1 = 'false'::bool; + + +CREATE TABLE BOOLTBL2 (f1 bool); + +INSERT INTO BOOLTBL2 (f1) VALUES ('f'::bool); + +INSERT INTO BOOLTBL2 (f1) VALUES ('false'::bool); + +INSERT INTO BOOLTBL2 (f1) VALUES ('False'::bool); + +-- this evaluates to a false value +INSERT INTO BOOLTBL2 (f1) + VALUES ('XXX'::bool); + + +-- BOOLTBL2 should be full of false's at this point +SELECT '' AS f_4, BOOLTBL2.*; + + +SELECT '' AS tf_12, BOOLTBL1.*, BOOLTBL2.* + WHERE BOOLTBL2.f1 <> BOOLTBL1.f1; + + +SELECT '' AS tf_12, BOOLTBL1.*, BOOLTBL2.* + WHERE boolne(BOOLTBL2.f1,BOOLTBL1.f1); + + +SELECT '' AS ff_4, BOOLTBL1.*, BOOLTBL2.* + WHERE BOOLTBL2.f1 = BOOLTBL1.f1 and BOOLTBL1.f1 = 'false'::bool; + + +SELECT '' AS tf_12_ff_4, BOOLTBL1.*, BOOLTBL2.* + WHERE BOOLTBL2.f1 = BOOLTBL1.f1 or BOOLTBL1.f1 = 'true'::bool; diff --git a/src/test/regress/sql/box.sql b/src/test/regress/sql/box.sql new file mode 100644 index 0000000000..f350e12e8a --- /dev/null +++ b/src/test/regress/sql/box.sql @@ -0,0 +1,117 @@ +-- ****************** test built-in type box ******************** + +-- +-- box logic +-- o +-- 3 o--|X +-- | o| +-- 2 +-+-+ | +-- | | | | +-- 1 | o-+-o +-- | | +-- 0 +---+ +-- +-- 0 1 2 3 +-- + +-- boxes are specified by two points, given by four floats x1,y1,x2,y2 + + +CREATE TABLE BOX_TBL (f1 box); + +INSERT INTO BOX_TBL (f1) VALUES ('(2.0,2.0,0.0,0.0)'); + +INSERT INTO BOX_TBL (f1) VALUES ('(1.0,1.0,3.0,3.0)'); + +-- degenerate cases where the box is a line or a point +-- note that lines and points boxes all have zero area +INSERT INTO BOX_TBL (f1) VALUES ('(2.5, 2.5, 2.5,3.5)'); + +INSERT INTO BOX_TBL (f1) VALUES ('(3.0, 3.0,3.0,3.0)'); + +-- badly formatted box inputs +INSERT INTO BOX_TBL (f1) VALUES ('(2.3, 4.5)'); + +INSERT INTO BOX_TBL (f1) VALUES ('asdfasdf(ad'); + + +SELECT '' AS four, BOX_TBL.*; + +SELECT '' AS four, b.*, box_area(b.f1) as barea + FROM BOX_TBL b; + +-- overlap +SELECT '' AS three, b.f1 + FROM BOX_TBL b + WHERE b.f1 && '(2.5,2.5,1.0,1.0)'::box; + +-- left-or-overlap (x only) +SELECT '' AS two, b1.* + FROM BOX_TBL b1 + WHERE b1.f1 &< '(2.0,2.0,2.5,2.5)'::box; + +-- right-or-overlap (x only) +SELECT '' AS two, b1.* + FROM BOX_TBL b1 + WHERE b1.f1 &> '(2.0,2.0,2.5,2.5)'::box; + +-- left of +SELECT '' AS two, b.f1 + FROM BOX_TBL b + WHERE b.f1 << '(3.0,3.0,5.0,5.0)'::box; + +-- area <= +SELECT '' AS four, b.f1 + FROM BOX_TBL b + WHERE b.f1 <= '(3.0,3.0,5.0,5.0)'::box; + +-- area < +SELECT '' AS two, b.f1 + FROM BOX_TBL b + WHERE b.f1 < '(3.0,3.0,5.0,5.0)'::box; + +-- area = +SELECT '' AS two, b.f1 + FROM BOX_TBL b + WHERE b.f1 = '(3.0,3.0,5.0,5.0)'::box; + +-- area > +SELECT '' AS two, b.f1 + FROM BOX_TBL b -- zero area + WHERE b.f1 > '(3.5,3.0,4.5,3.0)'::box; + +-- area >= +SELECT '' AS four, b.f1 + FROM BOX_TBL b -- zero area + WHERE b.f1 >= '(3.5,3.0,4.5,3.0)'::box; + +-- right of +SELECT '' AS two, b.f1 + FROM BOX_TBL b + WHERE '(3.0,3.0,5.0,5.0)'::box >> b.f1; + +-- contained in +SELECT '' AS three, b.f1 + FROM BOX_TBL b + WHERE b.f1 @ '(0,0,3,3)'::box; + +-- contains +SELECT '' AS three, b.f1 + FROM BOX_TBL b + WHERE '(0,0,3,3)'::box ~ b.f1; + +-- box equality +SELECT '' AS one, b.f1 + FROM BOX_TBL b + WHERE '(1,1,3,3)'::box ~= b.f1; + +-- center of box, left unary operator +SELECT '' AS four, @@(b1.f1) AS p + FROM BOX_TBL b1; + +-- wholly-contained +SELECT '' AS one, b1.*, b2.* + FROM BOX_TBL b1, BOX_TBL b2 + WHERE b1.f1 ~ b2.f1 and not b1.f1 ~= b2.f1; + + diff --git a/src/test/regress/sql/char.sql b/src/test/regress/sql/char.sql new file mode 100644 index 0000000000..20c2826c60 --- /dev/null +++ b/src/test/regress/sql/char.sql @@ -0,0 +1,52 @@ +-- ****************** test built-in type char ************** +-- +-- all inputs are SILENTLY truncated at 1 character +-- + +CREATE TABLE CHAR_TBL(f1 char); + +INSERT INTO CHAR_TBL (f1) VALUES ('a'); + +INSERT INTO CHAR_TBL (f1) VALUES ('A'); + +-- any of the following three input formats are acceptable +INSERT INTO CHAR_TBL (f1) VALUES ('1'); + +INSERT INTO CHAR_TBL (f1) VALUES (2); + +INSERT INTO CHAR_TBL (f1) VALUES ('3'); + +-- zero-length char +INSERT INTO CHAR_TBL (f1) VALUES (''); + +-- try char's of greater than 1 length +INSERT INTO CHAR_TBL (f1) VALUES ('cd'); + + +SELECT '' AS seven, CHAR_TBL.*; + +SELECT '' AS six, c.* + FROM CHAR_TBL c + WHERE c.f1 <> 'a'; + +SELECT '' AS one, c.* + FROM CHAR_TBL c + WHERE c.f1 = 'a'; + +SELECT '' AS five, c.* + FROM CHAR_TBL c + WHERE c.f1 < 'a'; + +SELECT '' AS six, c.* + FROM CHAR_TBL c + WHERE c.f1 <= 'a'; + +SELECT '' AS one, c.* + FROM CHAR_TBL c + WHERE c.f1 > 'a'; + +SELECT '' AS two, c.* + FROM CHAR_TBL c + WHERE c.f1 >= 'a'; + + diff --git a/src/test/regress/sql/char2.sql b/src/test/regress/sql/char2.sql new file mode 100644 index 0000000000..da0d152d2a --- /dev/null +++ b/src/test/regress/sql/char2.sql @@ -0,0 +1,46 @@ +-- **************** testing built-in type char2 ************** +-- +-- all inputs are silently truncated at 2 characters +-- + +CREATE TABLE CHAR2_TBL(f1 char2); + +INSERT INTO CHAR2_TBL (f1) VALUES ('AB'); + +INSERT INTO CHAR2_TBL (f1) VALUES ('ab'); + +INSERT INTO CHAR2_TBL (f1) VALUES ('ZY'); + +INSERT INTO CHAR2_TBL (f1) VALUES ('34'); + +INSERT INTO CHAR2_TBL (f1) VALUES ('d'); + +INSERT INTO CHAR2_TBL (f1) VALUES (''); + +INSERT INTO CHAR2_TBL (f1) VALUES ('12345'); + + +SELECT '' AS seven, CHAR2_TBL.*; + +SELECT '' AS six, c.f1 FROM CHAR2_TBL c WHERE c.f1 <> 'AB'; + +SELECT '' AS one, c.f1 FROM CHAR2_TBL c WHERE c.f1 = 'AB'; + +SELECT '' AS three, c.f1 FROM CHAR2_TBL c WHERE c.f1 < 'AB'; + +SELECT '' AS four, c.f1 FROM CHAR2_TBL c WHERE c.f1 <= 'AB'; + +SELECT '' AS three, c.f1 FROM CHAR2_TBL c WHERE c.f1 > 'AB'; + +SELECT '' AS four, c.f1 FROM CHAR2_TBL c WHERE c.f1 >= 'AB'; + +SELECT '' AS seven, c.f1 FROM CHAR2_TBL c WHERE c.f1 ~ '.*'; + +SELECT '' AS zero, c.f1 FROM CHAR2_TBL c WHERE c.f1 !~ '.*'; + +SELECT '' AS one, c.f1 FROM CHAR2_TBL c WHERE c.f1 ~ '34'; + +SELECT '' AS one, c.f1 FROM CHAR2_TBL c WHERE c.f1 ~ '3.*'; + + + diff --git a/src/test/regress/sql/char4.sql b/src/test/regress/sql/char4.sql new file mode 100644 index 0000000000..338a285778 --- /dev/null +++ b/src/test/regress/sql/char4.sql @@ -0,0 +1,43 @@ +--**************** testing built-in type char4 ************** +-- +-- all inputs are silently truncated at 4 characters +-- + +CREATE TABLE CHAR4_TBL (f1 char4); + +INSERT INTO CHAR4_TBL(f1) VALUES ('ABCD'); + +INSERT INTO CHAR4_TBL(f1) VALUES ('abcd'); + +INSERT INTO CHAR4_TBL(f1) VALUES ('ZYWZ'); + +INSERT INTO CHAR4_TBL(f1) VALUES ('343f'); + +INSERT INTO CHAR4_TBL(f1) VALUES ('d34a'); + +INSERT INTO CHAR4_TBL(f1) VALUES (''); + +INSERT INTO CHAR4_TBL(f1) VALUES ('12345678'); + + +SELECT '' AS seven, CHAR4_TBL.*; + +SELECT '' AS six, c.f1 FROM CHAR4_TBL c WHERE c.f1 <> 'ABCD'; + +SELECT '' AS one, c.f1 FROM CHAR4_TBL c WHERE c.f1 = 'ABCD'; + +SELECT '' AS three, c.f1 FROM CHAR4_TBL c WHERE c.f1 < 'ABCD'; + +SELECT '' AS four, c.f1 FROM CHAR4_TBL c WHERE c.f1 <= 'ABCD'; + +SELECT '' AS three, c.f1 FROM CHAR4_TBL c WHERE c.f1 > 'ABCD'; + +SELECT '' AS four, c.f1 FROM CHAR4_TBL c WHERE c.f1 >= 'ABCD'; + +SELECT '' AS seven, c.f1 FROM CHAR4_TBL c WHERE c.f1 ~ '.*'; + +SELECT '' AS zero, c.f1 FROM CHAR4_TBL c WHERE c.f1 !~ '.*'; + +SELECT '' AS three, c.f1 FROM CHAR4_TBL c WHERE c.f1 ~ '.*34.*'; + + diff --git a/src/test/regress/sql/reltime.sql b/src/test/regress/sql/reltime.sql new file mode 100644 index 0000000000..2c300a468e --- /dev/null +++ b/src/test/regress/sql/reltime.sql @@ -0,0 +1,46 @@ +CREATE TABLE RELTIME_TBL (f1 reltime); + +INSERT INTO RELTIME_TBL (f1) VALUES ('@ 1 minute'); + +INSERT INTO RELTIME_TBL (f1) VALUES ('@ 5 hour'); + +INSERT INTO RELTIME_TBL (f1) VALUES ('@ 10 day'); + +INSERT INTO RELTIME_TBL (f1) VALUES ('@ 34 year'); + +INSERT INTO RELTIME_TBL (f1) VALUES ('@ 3 months'); + +INSERT INTO RELTIME_TBL (f1) VALUES ('@ 14 seconds ago'); + + +-- badly formatted reltimes: +INSERT INTO RELTIME_TBL (f1) VALUES ('badly formatted reltime'); + +INSERT INTO RELTIME_TBL (f1) VALUES ('@ 30 eons ago'); + +-- test reltime operators + +SELECT '' AS eight, RELTIME_TBL.*; + +SELECT '' AS five, RELTIME_TBL.* + WHERE RELTIME_TBL.f1 <> '@ 10 days'::reltime; + +SELECT '' AS three, RELTIME_TBL.* + WHERE RELTIME_TBL.f1 <= '@ 5 hours'::reltime; + +SELECT '' AS three, RELTIME_TBL.* + WHERE RELTIME_TBL.f1 < '@ 1 day'::reltime; + +SELECT '' AS one, RELTIME_TBL.* + WHERE RELTIME_TBL.f1 = '@ 34 years'::reltime; + +SELECT '' AS two, RELTIME_TBL.* + WHERE RELTIME_TBL.f1 >= '@ 1 month'::reltime; + +SELECT '' AS five, RELTIME_TBL.* + WHERE RELTIME_TBL.f1 > '@ 3 seconds ago'::reltime; + +SELECT '' AS fifteen, r1.*, r2.* + FROM RELTIME_TBL r1, RELTIME_TBL r2 + WHERE r1.f1 > r2.f1; + diff --git a/src/test/regress/sql/tests b/src/test/regress/sql/tests new file mode 100644 index 0000000000..5a496e7857 --- /dev/null +++ b/src/test/regress/sql/tests @@ -0,0 +1,8 @@ +boolean +reltime +abstime +tinterval +box +char +char2 +char4 diff --git a/src/test/regress/sql/tinterval.sql b/src/test/regress/sql/tinterval.sql new file mode 100644 index 0000000000..a5c1d65ea3 --- /dev/null +++ b/src/test/regress/sql/tinterval.sql @@ -0,0 +1,88 @@ +CREATE TABLE TINTERVAL_TBL (f1 tinterval); + +INSERT INTO TINTERVAL_TBL (f1) + VALUES ('["-infinity" "infinity"]'); + +INSERT INTO TINTERVAL_TBL (f1) + VALUES ('["May 10, 1943 23:59:12" "Jan 14, 1973 03:14:21"]'); + +INSERT INTO TINTERVAL_TBL (f1) + VALUES ('["Sep 4, 1983 23:59:12" "Oct 4, 1983 23:59:12"]'); + +INSERT INTO TINTERVAL_TBL (f1) + VALUES ('["epoch" "Mon May 1 00:30:30 1995"]'); + +INSERT INTO TINTERVAL_TBL (f1) + VALUES ('["Feb 15 1990 12:15:03" "current"]'); + + +-- badly formatted tintervals +INSERT INTO TINTERVAL_TBL (f1) + VALUES ('["bad time specifications" ""]'); + +INSERT INTO TINTERVAL_TBL (f1) + VALUES ('["" "infinity"]'); + +-- test tinterval operators + +SELECT '' AS seven, TINTERVAL_TBL.*; + +-- length == +SELECT '' AS one, t.* + FROM TINTERVAL_TBL t + WHERE t.f1 #= '@ 1 months'; + +-- length <> +SELECT '' AS three, t.* + FROM TINTERVAL_TBL t + WHERE t.f1 #<> '@ 1 months'; + +-- length < +SELECT '' AS zero, t.* + FROM TINTERVAL_TBL t + WHERE t.f1 #< '@ 1 month'; + +-- length <= +SELECT '' AS one, t.* + FROM TINTERVAL_TBL t + WHERE t.f1 #<= '@ 1 month'; + +-- length > +SELECT '' AS three, t.* + FROM TINTERVAL_TBL t + WHERE t.f1 #> '@ 1 year'; + +-- length >= +SELECT '' AS three, t.* + FROM TINTERVAL_TBL t + WHERE t.f1 #>= '@ 3 years'; + +-- overlaps +SELECT '' AS three, t1.* + FROM TINTERVAL_TBL t1 + WHERE t1.f1 && + '["Aug 15 14:23:19 1983" "Sep 16 14:23:19 1983"]'::tinterval; + +SELECT '' AS five, t1.*, t2.* + FROM TINTERVAL_TBL t1, TINTERVAL_TBL t2 + WHERE t1.f1 && t2.f1 and + t1.f1 = t2.f1; + +SELECT '' AS fourteen, t1.*, t2.* + FROM TINTERVAL_TBL t1, TINTERVAL_TBL t2 + WHERE t1.f1 && t2.f1 and + not t1.f1 = t2.f1; + +-- contains +SELECT '' AS five, t1.* + FROM TINTERVAL_TBL t1 + WHERE not t1.f1 << + '["Aug 15 14:23:19 1980" "Sep 16 14:23:19 1990"]'::tinterval; + +-- make time interval +SELECT '' AS three, t1.* + FROM TINTERVAL_TBL t1 + WHERE t1.f1 && + ('Aug 15 14:23:19 1983'::abstime <#> + 'Sep 16 14:23:19 1983'::abstime); +