Remove older "::" type coersion syntax in favor of extended SQL92 style.
Include a few new tests for datetime/timespan arithmetic.
--- **** testing built-in time types: abstime, reltime, and tinterval ****
+--
+-- ABSTIME
+-- testing built-in time type abstime
+-- uses reltime and tinterval
+--
--
-- timezones may vary based not only on location but the operating
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);
+-- was INSERT INTO ABSTIME_TBL (f1) VALUES (abstime 'now'):
+INSERT INTO ABSTIME_TBL (f1) VALUES (abstime 'Mon May 1 00:30:30 1995');
-INSERT INTO ABSTIME_TBL (f1) VALUES ('epoch'::abstime);
+INSERT INTO ABSTIME_TBL (f1) VALUES (abstime 'epoch');
-INSERT INTO ABSTIME_TBL (f1) VALUES ('current'::abstime);
+INSERT INTO ABSTIME_TBL (f1) VALUES (abstime 'current');
-INSERT INTO ABSTIME_TBL (f1) VALUES ('infinity'::abstime);
+INSERT INTO ABSTIME_TBL (f1) VALUES (abstime 'infinity');
-INSERT INTO ABSTIME_TBL (f1) VALUES ('-infinity'::abstime);
+INSERT INTO ABSTIME_TBL (f1) VALUES (abstime '-infinity');
-INSERT INTO ABSTIME_TBL (f1) VALUES ('May 10, 1947 23:59:12');
+INSERT INTO ABSTIME_TBL (f1) VALUES (abstime 'May 10, 1947 23:59:12');
-- what happens if we specify slightly misformatted abstime?
SELECT '' AS eight, ABSTIME_TBL.*;
SELECT '' AS six, ABSTIME_TBL.*
- WHERE ABSTIME_TBL.f1 < 'Jun 30, 2001'::abstime;
+ WHERE ABSTIME_TBL.f1 < abstime 'Jun 30, 2001';
SELECT '' AS six, ABSTIME_TBL.*
- WHERE ABSTIME_TBL.f1 > '-infinity'::abstime;
+ WHERE ABSTIME_TBL.f1 > abstime '-infinity';
SELECT '' AS six, ABSTIME_TBL.*
- WHERE 'May 10, 1947 23:59:12'::abstime <> ABSTIME_TBL.f1;
+ WHERE abstime 'May 10, 1947 23:59:12' <> ABSTIME_TBL.f1;
SELECT '' AS one, ABSTIME_TBL.*
- WHERE 'current'::abstime = ABSTIME_TBL.f1;
+ WHERE abstime 'current' = ABSTIME_TBL.f1;
SELECT '' AS three, ABSTIME_TBL.*
- WHERE 'epoch'::abstime >= ABSTIME_TBL.f1;
+ WHERE abstime 'epoch' >= ABSTIME_TBL.f1;
SELECT '' AS four, ABSTIME_TBL.*
- WHERE ABSTIME_TBL.f1 <= 'Jan 14, 1973 03:14:21'::abstime;
+ WHERE ABSTIME_TBL.f1 <= abstime 'Jan 14, 1973 03:14:21';
SELECT '' AS four, ABSTIME_TBL.*
WHERE ABSTIME_TBL.f1 <?>
- '["Apr 1 1950 00:00:00" "Dec 30 1999 23:00:00"]'::tinterval;
+ tinterval '["Apr 1 1950 00:00:00" "Dec 30 1999 23:00:00"]';
-- 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 three, ABSTIME_TBL.*
- WHERE (ABSTIME_TBL.f1 + '@ 3 year'::reltime) -- +3 years
- < 'Jan 14 14:00:00 1977'::abstime;
+ WHERE (ABSTIME_TBL.f1 + reltime '@ 3 year') -- +3 years
+ < abstime 'Jan 14 14:00:00 1977';
SELECT '' AS three, ABSTIME_TBL.*
- WHERE (ABSTIME_TBL.f1 + '@ 3 year ago'::reltime) -- -3 years
- < 'Jan 14 14:00:00 1971'::abstime;
+ WHERE (ABSTIME_TBL.f1 + reltime '@ 3 year ago') -- -3 years
+ < abstime 'Jan 14 14:00:00 1971';
SELECT '' AS three, ABSTIME_TBL.*
- WHERE (ABSTIME_TBL.f1 - '@ 3 year'::reltime) -- -(+3) years
- < 'Jan 14 14:00:00 1971'::abstime;
+ WHERE (ABSTIME_TBL.f1 - reltime '@ 3 year') -- -(+3) years
+ < abstime 'Jan 14 14:00:00 1971';
SELECT '' AS three, ABSTIME_TBL.*
- WHERE (ABSTIME_TBL.f1 - '@ 3 year ago'::reltime) -- -(-3) years
- < 'Jan 14 14:00:00 1977'::abstime;
+ WHERE (ABSTIME_TBL.f1 - reltime '@ 3 year ago') -- -(-3) years
+ < abstime 'Jan 14 14:00:00 1977';
SELECT '' AS ten, ABSTIME_TBL.f1 AS abstime, RELTIME_TBL.f1 AS reltime
WHERE (ABSTIME_TBL.f1 + RELTIME_TBL.f1)
- < 'Jan 14 14:00:00 1971'::abstime
+ < abstime 'Jan 14 14:00:00 1971'
ORDER BY abstime, reltime;
--- ****************** test built-in type box ********************
+--
+-- BOX
+--
--
-- box logic
-- overlap
SELECT '' AS three, b.f1
FROM BOX_TBL b
- WHERE b.f1 && '(2.5,2.5,1.0,1.0)'::box;
+ WHERE b.f1 && box '(2.5,2.5,1.0,1.0)';
-- 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;
+ WHERE b1.f1 &< box '(2.0,2.0,2.5,2.5)';
-- 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;
+ WHERE b1.f1 &> box '(2.0,2.0,2.5,2.5)';
-- left of
SELECT '' AS two, b.f1
FROM BOX_TBL b
- WHERE b.f1 << '(3.0,3.0,5.0,5.0)'::box;
+ WHERE b.f1 << box '(3.0,3.0,5.0,5.0)';
-- area <=
SELECT '' AS four, b.f1
FROM BOX_TBL b
- WHERE b.f1 <= '(3.0,3.0,5.0,5.0)'::box;
+ WHERE b.f1 <= box '(3.0,3.0,5.0,5.0)';
-- area <
SELECT '' AS two, b.f1
FROM BOX_TBL b
- WHERE b.f1 < '(3.0,3.0,5.0,5.0)'::box;
+ WHERE b.f1 < box '(3.0,3.0,5.0,5.0)';
-- area =
SELECT '' AS two, b.f1
FROM BOX_TBL b
- WHERE b.f1 = '(3.0,3.0,5.0,5.0)'::box;
+ WHERE b.f1 = box '(3.0,3.0,5.0,5.0)';
-- area >
SELECT '' AS two, b.f1
FROM BOX_TBL b -- zero area
- WHERE b.f1 > '(3.5,3.0,4.5,3.0)'::box;
+ WHERE b.f1 > box '(3.5,3.0,4.5,3.0)';
-- area >=
SELECT '' AS four, b.f1
FROM BOX_TBL b -- zero area
- WHERE b.f1 >= '(3.5,3.0,4.5,3.0)'::box;
+ WHERE b.f1 >= box '(3.5,3.0,4.5,3.0)';
-- right of
SELECT '' AS two, b.f1
FROM BOX_TBL b
- WHERE '(3.0,3.0,5.0,5.0)'::box >> b.f1;
+ WHERE box '(3.0,3.0,5.0,5.0)' >> b.f1;
-- contained in
SELECT '' AS three, b.f1
FROM BOX_TBL b
- WHERE b.f1 @ '(0,0,3,3)'::box;
+ WHERE b.f1 @ box '(0,0,3,3)';
-- contains
SELECT '' AS three, b.f1
FROM BOX_TBL b
- WHERE '(0,0,3,3)'::box ~ b.f1;
+ WHERE box '(0,0,3,3)' ~ b.f1;
-- box equality
SELECT '' AS one, b.f1
FROM BOX_TBL b
- WHERE '(1,1,3,3)'::box ~= b.f1;
+ WHERE box '(1,1,3,3)' ~= b.f1;
-- center of box, left unary operator
SELECT '' AS four, @@(b1.f1) AS p
--
--- circles
+-- CIRCLE
--
CREATE TABLE CIRCLE_TBL (f1 circle);
--
--- Comments
+-- COMMENTS
--
SELECT 'trailing' AS first; -- trailing single line
--- *** testing new built-in time types: datetime, timespan ***
+--
+-- DATETIME
+--
-- Shorthand values
-- Not directly usable for regression testing since these are not constants.
-- So, just try to test parser and hope for the best - tgl 97/04/26
-SELECT ('today'::datetime = ('yesterday'::datetime + '1 day'::timespan)) as "True";
-SELECT ('today'::datetime = ('tomorrow'::datetime - '1 day'::timespan)) as "True";
-SELECT ('tomorrow'::datetime = ('yesterday'::datetime + '2 days'::timespan)) as "True";
-SELECT ('current'::datetime = 'now'::datetime) as "True";
-SELECT ('now'::datetime - 'current'::datetime) AS "ZeroSecs";
+SELECT (datetime 'today' = (datetime 'yesterday' + timespan '1 day')) as "True";
+SELECT (datetime 'today' = (datetime 'tomorrow' - timespan '1 day')) as "True";
+SELECT (datetime 'tomorrow' = (datetime 'yesterday' + timespan '2 days')) as "True";
+SELECT (datetime 'current' = 'now') as "True";
+SELECT (datetime 'now' - 'current') AS "ZeroSecs";
SET DateStyle = 'Postgres,noneuropean';
SELECT datetime('1994-01-01', '11:00') AS "Jan_01_1994_11am";
INSERT INTO DATETIME_TBL VALUES ('tomorrow EST');
INSERT INTO DATETIME_TBL VALUES ('tomorrow zulu');
-SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime;
-SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'tomorrow'::datetime;
-SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'yesterday'::datetime;
-SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime + '1 day'::timespan;
-SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime - '1 day'::timespan;
+SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = datetime 'today';
+SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = datetime 'tomorrow';
+SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = datetime 'yesterday';
+SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = datetime 'today' + timespan '1 day';
+SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = datetime 'today' - timespan '1 day';
-SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'now'::datetime;
+SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = datetime 'now';
DELETE FROM DATETIME_TBL;
INSERT INTO DATETIME_TBL VALUES ('current');
BEGIN;
INSERT INTO DATETIME_TBL VALUES ('now');
-SELECT count(*) AS two FROM DATETIME_TBL WHERE d1 = 'now'::datetime;
+SELECT count(*) AS two FROM DATETIME_TBL WHERE d1 = datetime 'now';
END;
DELETE FROM DATETIME_TBL;
-- Demonstrate functions and operators
SELECT '' AS fortythree, d1 FROM DATETIME_TBL
- WHERE d1 > '1997-01-02'::datetime and d1 != 'current'::datetime;
+ WHERE d1 > datetime '1997-01-02' and d1 != datetime 'current';
SELECT '' AS fifteen, d1 FROM DATETIME_TBL
- WHERE d1 < '1997-01-02'::datetime and d1 != 'current'::datetime;
+ WHERE d1 < datetime '1997-01-02' and d1 != datetime 'current';
SELECT '' AS one, d1 FROM DATETIME_TBL
- WHERE d1 = '1997-01-02'::datetime and d1 != 'current'::datetime;
+ WHERE d1 = datetime '1997-01-02' and d1 != datetime 'current';
SELECT '' AS fiftyeight, d1 FROM DATETIME_TBL
- WHERE d1 != '1997-01-02'::datetime and d1 != 'current'::datetime;
+ WHERE d1 != datetime '1997-01-02' and d1 != datetime 'current';
SELECT '' AS sixteen, d1 FROM DATETIME_TBL
- WHERE d1 <= '1997-01-02'::datetime and d1 != 'current'::datetime;
+ WHERE d1 <= datetime '1997-01-02' and d1 != datetime 'current';
SELECT '' AS fortyfour, d1 FROM DATETIME_TBL
- WHERE d1 >= '1997-01-02'::datetime and d1 != 'current'::datetime;
+ WHERE d1 >= datetime '1997-01-02' and d1 != datetime 'current';
-SELECT '' AS sixtythree, d1 + '1 year'::timespan AS one_year FROM DATETIME_TBL;
+SELECT '' AS sixtythree, d1 + timespan '1 year' AS one_year FROM DATETIME_TBL;
-SELECT '' AS sixtythree, d1 - '1 year'::timespan AS one_year FROM DATETIME_TBL;
+SELECT '' AS sixtythree, d1 - timespan '1 year' AS one_year FROM DATETIME_TBL;
-- Casting within a BETWEEN qualifier should probably be allowed by the parser. - tgl 97/04/26
---SELECT '' AS fifty, d1 - '1997-01-02'::datetime AS diff
--- FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01'::datetime AND '2038-01-01'::datetime;
-SELECT '' AS fifty, d1 - '1997-01-02'::datetime AS diff
+--SELECT '' AS fifty, d1 - datetime '1997-01-02' AS diff
+-- FROM DATETIME_TBL WHERE d1 BETWEEN datetime '1902-01-01' AND datetime '2038-01-01';
+SELECT '' AS fifty, d1 - datetime '1997-01-02' AS diff
FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
SELECT '' AS fortynine, date_part( 'year', d1) AS year, date_part( 'month', d1) AS month,
+--
+-- GEOMETRY
+--
+
--
-- Points
--
-- "is horizontal" function
SELECT '' AS two, p1.f1
FROM POINT_TBL p1
- WHERE ishorizontal(p1.f1, '(0,0)'::point);
+ WHERE ishorizontal(p1.f1, point '(0,0)');
-- "is horizontal" operator
SELECT '' AS two, p1.f1
FROM POINT_TBL p1
- WHERE p1.f1 ?- '(0,0)'::point;
+ WHERE p1.f1 ?- point '(0,0)';
-- "is vertical" function
SELECT '' AS one, p1.f1
FROM POINT_TBL p1
- WHERE isvertical(p1.f1, '(5.1,34.5)'::point);
+ WHERE isvertical(p1.f1, point '(5.1,34.5)');
-- "is vertical" operator
SELECT '' AS one, p1.f1
FROM POINT_TBL p1
- WHERE p1.f1 ?| '(5.1,34.5)'::point;
+ WHERE p1.f1 ?| point '(5.1,34.5)';
--
-- Line segments
SELECT '' AS twenty, b.f1 / p.f1 AS rotation
FROM BOX_TBL b, POINT_TBL p
- WHERE (p.f1 <-> '(0,0)'::point) >= 1;
+ WHERE (p.f1 <-> point '(0,0)') >= 1;
--
-- Paths
SELECT '' AS four, path(f1) FROM POLYGON_TBL;
-- translation
-SELECT '' AS eight, p1.f1 + '(10,10)'::point AS dist_add
+SELECT '' AS eight, p1.f1 + point '(10,10)' AS dist_add
FROM PATH_TBL p1;
-- scaling and rotation
-SELECT '' AS eight, p1.f1 * '(2,-1)'::point AS dist_mul
+SELECT '' AS eight, p1.f1 * point '(2,-1)' AS dist_mul
FROM PATH_TBL p1;
RESET geqo;
--
--- horology.sql
+-- HOROLOGY
--
--
-- datetime, timespan arithmetic
--
+SELECT datetime '1996-03-01' - timespan '1 second' AS "Feb 29";
+SELECT datetime '1999-03-01' - timespan '1 second' AS "Feb 28";
+SELECT datetime '2000-03-01' - timespan '1 second' AS "Feb 29";
+SELECT datetime '1999-12-01' + timespan '1 month - 1 second' AS "Dec 31";
+
CREATE TABLE TEMP_DATETIME (f1 datetime);
-- get some candidate input values
WHERE isfinite(d.f1)
ORDER BY minus, datetime, timespan;
-SELECT '' AS ten, d.f1 AS datetime, '1980-01-06 00:00 GMT'::datetime AS gpstime_zero,
- d.f1 - '1980-01-06 00:00 GMT'::datetime AS difference
+SELECT '' AS ten, d.f1 AS datetime, datetime '1980-01-06 00:00 GMT' AS gpstime_zero,
+ d.f1 - datetime '1980-01-06 00:00 GMT' AS difference
FROM TEMP_DATETIME d
ORDER BY difference;
date_part('day',f1) AS day, date_part('hour', f1) AS hour,
date_part('minute', f1) AS minute, date_part('second', f1) AS second
FROM ABSTIME_TBL
- WHERE isfinite(f1) and f1 <> 'current'::abstime
+ WHERE isfinite(f1) and f1 <> abstime 'current'
ORDER BY abstime;
--
SELECT '' AS ten, f1 AS datetime, date( f1) AS date
FROM TEMP_DATETIME
- WHERE f1 <> 'current'::datetime
+ WHERE f1 <> datetime 'current'
ORDER BY date;
SELECT '' AS ten, f1 AS datetime, abstime( f1) AS abstime
SELECT '' AS five, f1 AS abstime, date( f1) AS date
FROM ABSTIME_TBL
- WHERE isfinite(f1) AND f1 <> 'current'::abstime
+ WHERE isfinite(f1) AND f1 <> abstime 'current'
ORDER BY date;
SELECT '' AS five, d1 AS datetime, abstime(d1) AS abstime
--- INET regression tests
+--
+-- INET
--
-- prepare the table...
-- Test join clauses
--
-CREATE TABLE JOIN_TBL (
+CREATE TABLE JOIN1_TBL (
i integer,
j integer,
- x text
+ t text
);
CREATE TABLE JOIN2_TBL (
k integer
);
-INSERT INTO JOIN_TBL VALUES (1, 3, 'one');
-INSERT INTO JOIN_TBL VALUES (2, 2, 'two');
-INSERT INTO JOIN_TBL VALUES (3, 1, 'three');
-INSERT INTO JOIN_TBL VALUES (4, 0, 'four');
+CREATE TABLE JOIN3_TBL (
+ i integer,
+ j integer,
+ y integer
+);
+
+CREATE TABLE JOIN4_TBL (
+ k integer,
+ z integer
+);
+
+INSERT INTO JOIN1_TBL VALUES (1, 3, 'one');
+INSERT INTO JOIN1_TBL VALUES (2, 2, 'two');
+INSERT INTO JOIN1_TBL VALUES (3, 1, 'three');
+INSERT INTO JOIN1_TBL VALUES (4, 0, 'four');
INSERT INTO JOIN2_TBL VALUES (1, -1);
INSERT INTO JOIN2_TBL VALUES (2, 2);
INSERT INTO JOIN2_TBL VALUES (2, 4);
+--
+-- CROSS JOIN
+-- Qualifications are not allowed on cross joins,
+-- which degenerate into a standard unqualified inner join.
+--
+
+SELECT '' AS "xxx", *
+ FROM JOIN1_TBL CROSS JOIN JOIN2_TBL;
+
+SELECT '' AS "xxx", i, k, t
+ FROM JOIN1_TBL CROSS JOIN JOIN2_TBL;
+
+SELECT '' AS "xxx", ii, tt, kk
+ FROM JOIN1_TBL CROSS JOIN JOIN2_TBL AS JT (ii, jj, tt, ii2, kk);
+
+SELECT '' AS "xxx", jt.ii, jt.jj, jt.kk
+ FROM JOIN1_TBL CROSS JOIN JOIN2_TBL AS JT (ii, jj, tt, ii2, kk);
+
+
+--
--
-- Inner joins (equi-joins)
--
+--
+
+--
+-- Inner joins (equi-joins) with USING clause
+-- The USING syntax changes the shape of the resulting table
+-- by including a column in the USING clause only once in the result.
+--
+-- Inner equi-join on all columns with the same name
SELECT '' AS "xxx", *
- FROM JOIN_TBL CROSS JOIN JOIN2_TBL;
+ FROM JOIN1_TBL NATURAL JOIN JOIN2_TBL;
+-- Inner equi-join on specified column
SELECT '' AS "xxx", *
- FROM JOIN_TBL NATURAL JOIN JOIN2_TBL;
+ FROM JOIN1_TBL INNER JOIN JOIN2_TBL USING (i);
+-- Same as above, slightly different syntax
SELECT '' AS "xxx", *
- FROM JOIN_TBL INNER JOIN JOIN2_TBL USING (i);
+ FROM JOIN1_TBL JOIN JOIN2_TBL USING (i);
+
+
+--
+-- Inner joins (equi-joins)
+--
SELECT '' AS "xxx", *
- FROM JOIN_TBL JOIN JOIN2_TBL ON (JOIN_TBL.i = JOIN2_TBL.i);
+ FROM JOIN1_TBL JOIN JOIN2_TBL ON (JOIN1_TBL.i = JOIN2_TBL.i);
SELECT '' AS "xxx", *
- FROM JOIN_TBL JOIN JOIN2_TBL ON (JOIN_TBL.i = JOIN2_TBL.k);
+ FROM JOIN1_TBL JOIN JOIN2_TBL ON (JOIN1_TBL.i = JOIN2_TBL.k);
SELECT '' AS "xxx", *
- FROM JOIN_TBL CROSS JOIN JOIN2_TBL;
+ FROM JOIN1_TBL CROSS JOIN JOIN2_TBL;
--
--
SELECT '' AS "xxx", *
- FROM JOIN_TBL JOIN JOIN2_TBL ON (JOIN_TBL.i <= JOIN2_TBL.k);
+ FROM JOIN1_TBL JOIN JOIN2_TBL ON (JOIN1_TBL.i <= JOIN2_TBL.k);
--
--
SELECT '' AS "xxx", *
- FROM JOIN_TBL OUTER JOIN JOIN2_TBL USING (i);
+ FROM JOIN1_TBL OUTER JOIN JOIN2_TBL USING (i);
SELECT '' AS "xxx", *
- FROM JOIN_TBL LEFT OUTER JOIN JOIN2_TBL USING (i);
+ FROM JOIN1_TBL LEFT OUTER JOIN JOIN2_TBL USING (i);
SELECT '' AS "xxx", *
- FROM JOIN_TBL RIGHT OUTER JOIN JOIN2_TBL USING (i);
+ FROM JOIN1_TBL RIGHT OUTER JOIN JOIN2_TBL USING (i);
SELECT '' AS "xxx", *
- FROM JOIN_TBL FULL OUTER JOIN JOIN2_TBL USING (i);
+ FROM JOIN1_TBL FULL OUTER JOIN JOIN2_TBL USING (i);
--
-- Clean up
--
-DROP TABLE JOIN_TBL;
+DROP TABLE JOIN1_TBL;
DROP TABLE JOIN2_TBL;
--
+-- LSEG
-- Line segments
--
select * from LSEG_TBL;
-SELECT * FROM LSEG_TBL WHERE s <= '[(1,2),(3,4)]'::lseg;
+SELECT * FROM LSEG_TBL WHERE s <= lseg '[(1,2),(3,4)]';
-SELECT * FROM LSEG_TBL WHERE (s <-> '[(1,2),(3,4)]'::lseg) < 10;
+SELECT * FROM LSEG_TBL WHERE (s <-> lseg '[(1,2),(3,4)]') < 10;
--- ******************************
--- * Test suite for the Postgres NUMERIC data type
--- ******************************
+--
+-- NUMERIC
+--
CREATE TABLE num_data (id int4, val numeric(210,10));
CREATE TABLE num_exp_add (id1 int4, id2 int4, expected numeric(210,10));
-- * Logarithm base 10 check
-- ******************************
DELETE FROM num_result;
-INSERT INTO num_result SELECT id, 0, LOG('10'::numeric, ABS(val))
+INSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val))
FROM num_data
WHERE val != '0.0';
SELECT t1.id1, t1.result, t2.expected
-- * POWER(10, LN(value)) check
-- ******************************
DELETE FROM num_result;
-INSERT INTO num_result SELECT id, 0, POWER('10'::numeric, LN(ABS(round(val,200))))
+INSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200))))
FROM num_data
WHERE val != '0.0';
SELECT t1.id1, t1.result, t2.expected
--
--- numerology.sql
+-- NUMEROLOGY
+-- Test various combinations of numeric types and functions.
--
--
--
+-- OIDJOIN
-- This is created by pgsql/contrib/findoidjoins/make_oidjoin_check
--
-SELECT oid, pg_aggregate.aggtransfn1
-FROM pg_aggregate
-WHERE pg_aggregate.aggtransfn1 != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggtransfn1);
-SELECT oid, pg_aggregate.aggtransfn2
-FROM pg_aggregate
-WHERE pg_aggregate.aggtransfn2 != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggtransfn2);
-SELECT oid, pg_aggregate.aggfinalfn
-FROM pg_aggregate
-WHERE pg_aggregate.aggfinalfn != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggfinalfn);
-SELECT oid, pg_aggregate.aggbasetype
-FROM pg_aggregate
-WHERE pg_aggregate.aggbasetype != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggbasetype);
-SELECT oid, pg_aggregate.aggtranstype1
-FROM pg_aggregate
-WHERE pg_aggregate.aggtranstype1 != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggtranstype1);
-SELECT oid, pg_aggregate.aggtranstype2
-FROM pg_aggregate
-WHERE pg_aggregate.aggtranstype2 != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggtranstype2);
-SELECT oid, pg_aggregate.aggfinaltype
-FROM pg_aggregate
-WHERE pg_aggregate.aggfinaltype != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggfinaltype);
-SELECT oid, pg_am.amgettuple
-FROM pg_am
-WHERE pg_am.amgettuple != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amgettuple);
-SELECT oid, pg_am.aminsert
-FROM pg_am
-WHERE pg_am.aminsert != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.aminsert);
-SELECT oid, pg_am.amdelete
-FROM pg_am
-WHERE pg_am.amdelete != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amdelete);
-SELECT oid, pg_am.ambeginscan
-FROM pg_am
-WHERE pg_am.ambeginscan != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ambeginscan);
-SELECT oid, pg_am.amrescan
-FROM pg_am
-WHERE pg_am.amrescan != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amrescan);
-SELECT oid, pg_am.amendscan
-FROM pg_am
-WHERE pg_am.amendscan != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amendscan);
-SELECT oid, pg_am.ammarkpos
-FROM pg_am
-WHERE pg_am.ammarkpos != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ammarkpos);
-SELECT oid, pg_am.amrestrpos
-FROM pg_am
-WHERE pg_am.amrestrpos != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amrestrpos);
-SELECT oid, pg_am.ambuild
-FROM pg_am
-WHERE pg_am.ambuild != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ambuild);
-SELECT oid, pg_amop.amopid
-FROM pg_amop
-WHERE pg_amop.amopid != 0 AND
- NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_amop.amopid);
-SELECT oid, pg_amop.amopclaid
-FROM pg_amop
-WHERE pg_amop.amopclaid != 0 AND
- NOT EXISTS(SELECT * FROM pg_opclass AS t1 WHERE t1.oid = pg_amop.amopclaid);
-SELECT oid, pg_amop.amopopr
-FROM pg_amop
-WHERE pg_amop.amopopr != 0 AND
- NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_amop.amopopr);
-SELECT oid, pg_amop.amopselect
-FROM pg_amop
-WHERE pg_amop.amopselect != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_amop.amopselect);
-SELECT oid, pg_amop.amopnpages
-FROM pg_amop
-WHERE pg_amop.amopnpages != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_amop.amopnpages);
-SELECT oid, pg_amproc.amid
-FROM pg_amproc
-WHERE pg_amproc.amid != 0 AND
- NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_amproc.amid);
-SELECT oid, pg_amproc.amopclaid
-FROM pg_amproc
-WHERE pg_amproc.amopclaid != 0 AND
- NOT EXISTS(SELECT * FROM pg_opclass AS t1 WHERE t1.oid = pg_amproc.amopclaid);
-SELECT oid, pg_amproc.amproc
-FROM pg_amproc
-WHERE pg_amproc.amproc != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_amproc.amproc);
-SELECT oid, pg_attribute.attrelid
-FROM pg_attribute
-WHERE pg_attribute.attrelid != 0 AND
- NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_attribute.attrelid);
-SELECT oid, pg_attribute.atttypid
-FROM pg_attribute
-WHERE pg_attribute.atttypid != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_attribute.atttypid);
-SELECT oid, pg_class.reltype
-FROM pg_class
-WHERE pg_class.reltype != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_class.reltype);
-SELECT oid, pg_class.relam
-FROM pg_class
-WHERE pg_class.relam != 0 AND
- NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_class.relam);
-SELECT oid, pg_index.indexrelid
-FROM pg_index
-WHERE pg_index.indexrelid != 0 AND
- NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_index.indexrelid);
-SELECT oid, pg_index.indrelid
-FROM pg_index
-WHERE pg_index.indrelid != 0 AND
- NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_index.indrelid);
-SELECT oid, pg_opclass.opcdeftype
-FROM pg_opclass
-WHERE pg_opclass.opcdeftype != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_opclass.opcdeftype);
-SELECT oid, pg_operator.oprleft
-FROM pg_operator
-WHERE pg_operator.oprleft != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprleft);
-SELECT oid, pg_operator.oprright
-FROM pg_operator
-WHERE pg_operator.oprright != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprright);
-SELECT oid, pg_operator.oprresult
-FROM pg_operator
-WHERE pg_operator.oprresult != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprresult);
-SELECT oid, pg_operator.oprcom
-FROM pg_operator
-WHERE pg_operator.oprcom != 0 AND
- NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprcom);
-SELECT oid, pg_operator.oprnegate
-FROM pg_operator
-WHERE pg_operator.oprnegate != 0 AND
- NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprnegate);
-SELECT oid, pg_operator.oprlsortop
-FROM pg_operator
-WHERE pg_operator.oprlsortop != 0 AND
- NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprlsortop);
-SELECT oid, pg_operator.oprrsortop
-FROM pg_operator
-WHERE pg_operator.oprrsortop != 0 AND
- NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprrsortop);
-SELECT oid, pg_operator.oprcode
-FROM pg_operator
-WHERE pg_operator.oprcode != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprcode);
-SELECT oid, pg_operator.oprrest
-FROM pg_operator
-WHERE pg_operator.oprrest != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprrest);
-SELECT oid, pg_operator.oprjoin
-FROM pg_operator
-WHERE pg_operator.oprjoin != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprjoin);
-SELECT oid, pg_proc.prolang
-FROM pg_proc
-WHERE pg_proc.prolang != 0 AND
- NOT EXISTS(SELECT * FROM pg_language AS t1 WHERE t1.oid = pg_proc.prolang);
-SELECT oid, pg_proc.prorettype
-FROM pg_proc
-WHERE pg_proc.prorettype != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_proc.prorettype);
-SELECT oid, pg_rewrite.ev_class
-FROM pg_rewrite
-WHERE pg_rewrite.ev_class != 0 AND
- NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_rewrite.ev_class);
-SELECT oid, pg_type.typrelid
-FROM pg_type
-WHERE pg_type.typrelid != 0 AND
- NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_type.typrelid);
-SELECT oid, pg_type.typelem
-FROM pg_type
-WHERE pg_type.typelem != 0 AND
- NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_type.typelem);
-SELECT oid, pg_type.typinput
-FROM pg_type
-WHERE pg_type.typinput != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typinput);
-SELECT oid, pg_type.typoutput
-FROM pg_type
-WHERE pg_type.typoutput != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typoutput);
-SELECT oid, pg_type.typreceive
-FROM pg_type
-WHERE pg_type.typreceive != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typreceive);
-SELECT oid, pg_type.typsend
-FROM pg_type
-WHERE pg_type.typsend != 0 AND
- NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typsend);
+
+SELECT oid, pg_aggregate.aggtransfn1
+ FROM pg_aggregate
+ WHERE pg_aggregate.aggtransfn1 != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggtransfn1);
+SELECT oid, pg_aggregate.aggtransfn2
+ FROM pg_aggregate
+ WHERE pg_aggregate.aggtransfn2 != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggtransfn2);
+SELECT oid, pg_aggregate.aggfinalfn
+ FROM pg_aggregate
+ WHERE pg_aggregate.aggfinalfn != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggfinalfn);
+SELECT oid, pg_aggregate.aggbasetype
+ FROM pg_aggregate
+ WHERE pg_aggregate.aggbasetype != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggbasetype);
+SELECT oid, pg_aggregate.aggtranstype1
+ FROM pg_aggregate
+ WHERE pg_aggregate.aggtranstype1 != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggtranstype1);
+SELECT oid, pg_aggregate.aggtranstype2
+ FROM pg_aggregate
+ WHERE pg_aggregate.aggtranstype2 != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggtranstype2);
+SELECT oid, pg_aggregate.aggfinaltype
+ FROM pg_aggregate
+ WHERE pg_aggregate.aggfinaltype != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggfinaltype);
+SELECT oid, pg_am.amgettuple
+ FROM pg_am
+ WHERE pg_am.amgettuple != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amgettuple);
+SELECT oid, pg_am.aminsert
+ FROM pg_am
+ WHERE pg_am.aminsert != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.aminsert);
+SELECT oid, pg_am.amdelete
+ FROM pg_am
+ WHERE pg_am.amdelete != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amdelete);
+SELECT oid, pg_am.ambeginscan
+ FROM pg_am
+ WHERE pg_am.ambeginscan != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ambeginscan);
+SELECT oid, pg_am.amrescan
+ FROM pg_am
+ WHERE pg_am.amrescan != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amrescan);
+SELECT oid, pg_am.amendscan
+ FROM pg_am
+ WHERE pg_am.amendscan != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amendscan);
+SELECT oid, pg_am.ammarkpos
+ FROM pg_am
+ WHERE pg_am.ammarkpos != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ammarkpos);
+SELECT oid, pg_am.amrestrpos
+ FROM pg_am
+ WHERE pg_am.amrestrpos != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amrestrpos);
+SELECT oid, pg_am.ambuild
+ FROM pg_am
+ WHERE pg_am.ambuild != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ambuild);
+SELECT oid, pg_amop.amopid
+ FROM pg_amop
+ WHERE pg_amop.amopid != 0 AND
+ NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_amop.amopid);
+SELECT oid, pg_amop.amopclaid
+ FROM pg_amop
+ WHERE pg_amop.amopclaid != 0 AND
+ NOT EXISTS(SELECT * FROM pg_opclass AS t1 WHERE t1.oid = pg_amop.amopclaid);
+SELECT oid, pg_amop.amopopr
+ FROM pg_amop
+ WHERE pg_amop.amopopr != 0 AND
+ NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_amop.amopopr);
+SELECT oid, pg_amop.amopselect
+ FROM pg_amop
+ WHERE pg_amop.amopselect != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_amop.amopselect);
+SELECT oid, pg_amop.amopnpages
+ FROM pg_amop
+ WHERE pg_amop.amopnpages != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_amop.amopnpages);
+SELECT oid, pg_amproc.amid
+ FROM pg_amproc
+ WHERE pg_amproc.amid != 0 AND
+ NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_amproc.amid);
+SELECT oid, pg_amproc.amopclaid
+ FROM pg_amproc
+ WHERE pg_amproc.amopclaid != 0 AND
+ NOT EXISTS(SELECT * FROM pg_opclass AS t1 WHERE t1.oid = pg_amproc.amopclaid);
+SELECT oid, pg_amproc.amproc
+ FROM pg_amproc
+ WHERE pg_amproc.amproc != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_amproc.amproc);
+SELECT oid, pg_attribute.attrelid
+ FROM pg_attribute
+ WHERE pg_attribute.attrelid != 0 AND
+ NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_attribute.attrelid);
+SELECT oid, pg_attribute.atttypid
+ FROM pg_attribute
+ WHERE pg_attribute.atttypid != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_attribute.atttypid);
+SELECT oid, pg_class.reltype
+ FROM pg_class
+ WHERE pg_class.reltype != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_class.reltype);
+SELECT oid, pg_class.relam
+ FROM pg_class
+ WHERE pg_class.relam != 0 AND
+ NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_class.relam);
+SELECT oid, pg_index.indexrelid
+ FROM pg_index
+ WHERE pg_index.indexrelid != 0 AND
+ NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_index.indexrelid);
+SELECT oid, pg_index.indrelid
+ FROM pg_index
+ WHERE pg_index.indrelid != 0 AND
+ NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_index.indrelid);
+SELECT oid, pg_opclass.opcdeftype
+ FROM pg_opclass
+ WHERE pg_opclass.opcdeftype != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_opclass.opcdeftype);
+SELECT oid, pg_operator.oprleft
+ FROM pg_operator
+ WHERE pg_operator.oprleft != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprleft);
+SELECT oid, pg_operator.oprright
+ FROM pg_operator
+ WHERE pg_operator.oprright != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprright);
+SELECT oid, pg_operator.oprresult
+ FROM pg_operator
+ WHERE pg_operator.oprresult != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprresult);
+SELECT oid, pg_operator.oprcom
+ FROM pg_operator
+ WHERE pg_operator.oprcom != 0 AND
+ NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprcom);
+SELECT oid, pg_operator.oprnegate
+ FROM pg_operator
+ WHERE pg_operator.oprnegate != 0 AND
+ NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprnegate);
+SELECT oid, pg_operator.oprlsortop
+ FROM pg_operator
+ WHERE pg_operator.oprlsortop != 0 AND
+ NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprlsortop);
+SELECT oid, pg_operator.oprrsortop
+ FROM pg_operator
+ WHERE pg_operator.oprrsortop != 0 AND
+ NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprrsortop);
+SELECT oid, pg_operator.oprcode
+ FROM pg_operator
+ WHERE pg_operator.oprcode != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprcode);
+SELECT oid, pg_operator.oprrest
+ FROM pg_operator
+ WHERE pg_operator.oprrest != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprrest);
+SELECT oid, pg_operator.oprjoin
+ FROM pg_operator
+ WHERE pg_operator.oprjoin != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprjoin);
+SELECT oid, pg_proc.prolang
+ FROM pg_proc
+ WHERE pg_proc.prolang != 0 AND
+ NOT EXISTS(SELECT * FROM pg_language AS t1 WHERE t1.oid = pg_proc.prolang);
+SELECT oid, pg_proc.prorettype
+ FROM pg_proc
+ WHERE pg_proc.prorettype != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_proc.prorettype);
+SELECT oid, pg_rewrite.ev_class
+ FROM pg_rewrite
+ WHERE pg_rewrite.ev_class != 0 AND
+ NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_rewrite.ev_class);
+SELECT oid, pg_type.typrelid
+ FROM pg_type
+ WHERE pg_type.typrelid != 0 AND
+ NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_type.typrelid);
+SELECT oid, pg_type.typelem
+ FROM pg_type
+ WHERE pg_type.typelem != 0 AND
+ NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_type.typelem);
+SELECT oid, pg_type.typinput
+ FROM pg_type
+ WHERE pg_type.typinput != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typinput);
+SELECT oid, pg_type.typoutput
+ FROM pg_type
+ WHERE pg_type.typoutput != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typoutput);
+SELECT oid, pg_type.typreceive
+ FROM pg_type
+ WHERE pg_type.typreceive != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typreceive);
+SELECT oid, pg_type.typsend
+ FROM pg_type
+ WHERE pg_type.typsend != 0 AND
+ NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typsend);
+
--
+-- OPR_SANITY
-- Sanity checks for common errors in making operator/procedure system tables:
-- pg_operator, pg_proc, pg_aggregate, pg_am, pg_amop, pg_amproc, pg_opclass.
--
--
--- path.sql
+-- PATH
--
--DROP TABLE PATH_TBL;
--- ************testing built-in type point ****************
+--
+-- POINT
+--
CREATE TABLE POINT_TBL(f1 point);
-- point in box
SELECT '' AS three, p.* FROM POINT_TBL p
- WHERE p.f1 @ '(0,0,100,100)'::box;
+ WHERE p.f1 @ box '(0,0,100,100)';
SELECT '' AS three, p.* FROM POINT_TBL p
- WHERE not p.f1 @ '(0,0,100,100)'::box;
+ WHERE not p.f1 @ box '(0,0,100,100)';
SELECT '' AS two, p.* FROM POINT_TBL p
- WHERE p.f1 @ '[(0,0),(-10,0),(-10,10)]'::path;
+ WHERE p.f1 @ path '[(0,0),(-10,0),(-10,10)]';
-SELECT '' AS six, p.f1, p.f1 <-> '(0,0)'::point AS dist
+SELECT '' AS six, p.f1, p.f1 <-> point '(0,0)' AS dist
FROM POINT_TBL p
ORDER BY dist;
--- *************testing built-in type polygon ****************
+--
+-- POLYGON
--
-- polygon logic
--
-- contained
SELECT '' AS one, p.*
FROM POLYGON_TBL p
- WHERE p.f1 @ '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon;
+ WHERE p.f1 @ polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)';
-- same
SELECT '' AS one, p.*
FROM POLYGON_TBL p
- WHERE p.f1 ~= '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon;
+ WHERE p.f1 ~= polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)';
-- contains
SELECT '' AS one, p.*
FROM POLYGON_TBL p
- WHERE p.f1 ~ '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon;
+ WHERE p.f1 ~ polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)';
--
-- polygon logic
-- 0 1 2 3 4
--
-- left of
-SELECT '(2.0,0.0),(2.0,4.0),(0.0,0.0)'::polygon << '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon AS false;
+SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' << polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false;
-- left overlap
-SELECT '(2.0,0.0),(2.0,4.0),(0.0,0.0)'::polygon << '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon AS true;
+SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' << polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS true;
-- right overlap
-SELECT '(2.0,0.0),(2.0,4.0),(0.0,0.0)'::polygon &> '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon AS true;
+SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' &> polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS true;
-- right of
-SELECT '(2.0,0.0),(2.0,4.0),(0.0,0.0)'::polygon >> '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon AS false;
+SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' >> polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false;
-- contained in
-SELECT '(2.0,0.0),(2.0,4.0),(0.0,0.0)'::polygon @ '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon AS false;
+SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' @ polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false;
-- contains
-SELECT '(2.0,0.0),(2.0,4.0),(0.0,0.0)'::polygon ~ '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon AS false;
+SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' ~ polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false;
-- same
-SELECT '(2.0,0.0),(2.0,4.0),(0.0,0.0)'::polygon ~= '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon AS false;
+SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' ~= polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false;
-- overlap
-SELECT '(2.0,0.0),(2.0,4.0),(0.0,0.0)'::polygon && '(3.0,1.0),(3.0,3.0),(1.0,0.0)'::polygon AS true;
+SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' && polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS true;
+--
+-- RELTIME
+--
+
CREATE TABLE RELTIME_TBL (f1 reltime);
INSERT INTO RELTIME_TBL (f1) VALUES ('@ 1 minute');
INSERT INTO RELTIME_TBL (f1) VALUES ('@ 14 seconds ago');
--- badly formatted reltimes:
+-- badly formatted reltimes
INSERT INTO RELTIME_TBL (f1) VALUES ('badly formatted reltime');
INSERT INTO RELTIME_TBL (f1) VALUES ('@ 30 eons ago');
SELECT '' AS six, RELTIME_TBL.*;
SELECT '' AS five, RELTIME_TBL.*
- WHERE RELTIME_TBL.f1 <> '@ 10 days'::reltime;
+ WHERE RELTIME_TBL.f1 <> reltime '@ 10 days';
SELECT '' AS three, RELTIME_TBL.*
- WHERE RELTIME_TBL.f1 <= '@ 5 hours'::reltime;
+ WHERE RELTIME_TBL.f1 <= reltime '@ 5 hours';
SELECT '' AS three, RELTIME_TBL.*
- WHERE RELTIME_TBL.f1 < '@ 1 day'::reltime;
+ WHERE RELTIME_TBL.f1 < reltime '@ 1 day';
SELECT '' AS one, RELTIME_TBL.*
- WHERE RELTIME_TBL.f1 = '@ 34 years'::reltime;
+ WHERE RELTIME_TBL.f1 = reltime '@ 34 years';
SELECT '' AS two, RELTIME_TBL.*
- WHERE RELTIME_TBL.f1 >= '@ 1 month'::reltime;
+ WHERE RELTIME_TBL.f1 >= reltime '@ 1 month';
SELECT '' AS five, RELTIME_TBL.*
- WHERE RELTIME_TBL.f1 > '@ 3 seconds ago'::reltime;
+ WHERE RELTIME_TBL.f1 > reltime '@ 3 seconds ago';
SELECT '' AS fifteen, r1.*, r2.*
FROM RELTIME_TBL r1, RELTIME_TBL r2
--
+-- STRINGS
-- Test various data entry syntaxes.
--
+--
+-- TIMESPAN
+--
+
CREATE TABLE TIMESPAN_TBL (f1 timespan);
INSERT INTO TIMESPAN_TBL (f1) VALUES ('@ 1 minute');
INSERT INTO TIMESPAN_TBL (f1) VALUES ('5 months');
INSERT INTO TIMESPAN_TBL (f1) VALUES ('5 months 12 hours');
--- badly formatted timespan:
+-- badly formatted timespan
INSERT INTO TIMESPAN_TBL (f1) VALUES ('badly formatted timespan');
INSERT INTO TIMESPAN_TBL (f1) VALUES ('@ 30 eons ago');
SELECT '' AS ten, TIMESPAN_TBL.*;
SELECT '' AS nine, TIMESPAN_TBL.*
- WHERE TIMESPAN_TBL.f1 <> '@ 10 days'::timespan;
+ WHERE TIMESPAN_TBL.f1 <> timespan '@ 10 days';
SELECT '' AS three, TIMESPAN_TBL.*
- WHERE TIMESPAN_TBL.f1 <= '@ 5 hours'::timespan;
+ WHERE TIMESPAN_TBL.f1 <= timespan '@ 5 hours';
SELECT '' AS three, TIMESPAN_TBL.*
- WHERE TIMESPAN_TBL.f1 < '@ 1 day'::timespan;
+ WHERE TIMESPAN_TBL.f1 < timespan '@ 1 day';
SELECT '' AS one, TIMESPAN_TBL.*
- WHERE TIMESPAN_TBL.f1 = '@ 34 years'::timespan;
+ WHERE TIMESPAN_TBL.f1 = timespan '@ 34 years';
SELECT '' AS five, TIMESPAN_TBL.*
- WHERE TIMESPAN_TBL.f1 >= '@ 1 month'::timespan;
+ WHERE TIMESPAN_TBL.f1 >= timespan '@ 1 month';
SELECT '' AS nine, TIMESPAN_TBL.*
- WHERE TIMESPAN_TBL.f1 > '@ 3 seconds ago'::timespan;
+ WHERE TIMESPAN_TBL.f1 > timespan '@ 3 seconds ago';
SELECT '' AS fortyfive, r1.*, r2.*
FROM TIMESPAN_TBL r1, TIMESPAN_TBL r2
+--
+-- TINTERVAL
+--
+
CREATE TABLE TINTERVAL_TBL (f1 tinterval);
INSERT INTO TINTERVAL_TBL (f1)
SELECT '' AS three, t1.*
FROM TINTERVAL_TBL t1
WHERE t1.f1 &&
- '["Aug 15 14:23:19 1983" "Sep 16 14:23:19 1983"]'::tinterval;
+ tinterval '["Aug 15 14:23:19 1983" "Sep 16 14:23:19 1983"]';
SET geqo TO 'off';
SELECT '' AS five, t1.f1
FROM TINTERVAL_TBL t1
WHERE not t1.f1 <<
- '["Aug 15 14:23:19 1980" "Sep 16 14:23:19 1990"]'::tinterval
+ tinterval '["Aug 15 14:23:19 1980" "Sep 16 14:23:19 1990"]'
ORDER BY t1.f1;
-- make time interval
SELECT '' AS three, t1.f1
FROM TINTERVAL_TBL t1
WHERE t1.f1 &&
- ('Aug 15 14:23:19 1983'::abstime <#>
- 'Sep 16 14:23:19 1983'::abstime)
+ (abstime 'Aug 15 14:23:19 1983' <#>
+ abstime 'Sep 16 14:23:19 1983')
ORDER BY t1.f1;
RESET geqo;
--
+-- TYPE_SANITY
-- Sanity checks for common errors in making type-related system tables:
-- pg_type, pg_class, pg_attribute.
--