mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-14 02:17:02 +08:00
EXTRACT of date type is implemented as a wrapper around EXTRACT of timestamp, so the code is already tested there. But the externally visible behavior of EXTRACT on date is not recorded anywhere. Since there is some discussion about reimplementing or refactoring some of this, add some more explicit tests of EXTRACT on date, similar in structure to existing EXTRACT tests on other data types. Discussion: https://www.postgresql.org/message-id/flat/42b73d2d-da12-ba9f-570a-420e0cce19d9@phystech.edu
161 lines
3.8 KiB
Plaintext
161 lines
3.8 KiB
Plaintext
--
|
|
-- expression evaluation tests that don't fit into a more specific file
|
|
--
|
|
--
|
|
-- Tests for SQLVAlueFunction
|
|
--
|
|
-- current_date (always matches because of transactional behaviour)
|
|
SELECT date(now())::text = current_date::text;
|
|
?column?
|
|
----------
|
|
t
|
|
(1 row)
|
|
|
|
-- current_time / localtime
|
|
SELECT now()::timetz::text = current_time::text;
|
|
?column?
|
|
----------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT now()::timetz(4)::text = current_time(4)::text;
|
|
?column?
|
|
----------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT now()::time::text = localtime::text;
|
|
?column?
|
|
----------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT now()::time(3)::text = localtime(3)::text;
|
|
?column?
|
|
----------
|
|
t
|
|
(1 row)
|
|
|
|
-- current_timestamp / localtimestamp (always matches because of transactional behaviour)
|
|
SELECT current_timestamp = NOW();
|
|
?column?
|
|
----------
|
|
t
|
|
(1 row)
|
|
|
|
-- precision
|
|
SELECT length(current_timestamp::text) >= length(current_timestamp(0)::text);
|
|
?column?
|
|
----------
|
|
t
|
|
(1 row)
|
|
|
|
-- localtimestamp
|
|
SELECT now()::timestamp::text = localtimestamp::text;
|
|
?column?
|
|
----------
|
|
t
|
|
(1 row)
|
|
|
|
-- current_role/user/user is tested in rolnames.sql
|
|
-- current database / catalog
|
|
SELECT current_catalog = current_database();
|
|
?column?
|
|
----------
|
|
t
|
|
(1 row)
|
|
|
|
-- current_schema
|
|
SELECT current_schema;
|
|
current_schema
|
|
----------------
|
|
public
|
|
(1 row)
|
|
|
|
SET search_path = 'notme';
|
|
SELECT current_schema;
|
|
current_schema
|
|
----------------
|
|
|
|
(1 row)
|
|
|
|
SET search_path = 'pg_catalog';
|
|
SELECT current_schema;
|
|
current_schema
|
|
----------------
|
|
pg_catalog
|
|
(1 row)
|
|
|
|
RESET search_path;
|
|
--
|
|
-- Tests for BETWEEN
|
|
--
|
|
explain (costs off)
|
|
select count(*) from date_tbl
|
|
where f1 between '1997-01-01' and '1998-01-01';
|
|
QUERY PLAN
|
|
-----------------------------------------------------------------------------
|
|
Aggregate
|
|
-> Seq Scan on date_tbl
|
|
Filter: ((f1 >= '01-01-1997'::date) AND (f1 <= '01-01-1998'::date))
|
|
(3 rows)
|
|
|
|
select count(*) from date_tbl
|
|
where f1 between '1997-01-01' and '1998-01-01';
|
|
count
|
|
-------
|
|
3
|
|
(1 row)
|
|
|
|
explain (costs off)
|
|
select count(*) from date_tbl
|
|
where f1 not between '1997-01-01' and '1998-01-01';
|
|
QUERY PLAN
|
|
--------------------------------------------------------------------------
|
|
Aggregate
|
|
-> Seq Scan on date_tbl
|
|
Filter: ((f1 < '01-01-1997'::date) OR (f1 > '01-01-1998'::date))
|
|
(3 rows)
|
|
|
|
select count(*) from date_tbl
|
|
where f1 not between '1997-01-01' and '1998-01-01';
|
|
count
|
|
-------
|
|
13
|
|
(1 row)
|
|
|
|
explain (costs off)
|
|
select count(*) from date_tbl
|
|
where f1 between symmetric '1997-01-01' and '1998-01-01';
|
|
QUERY PLAN
|
|
----------------------------------------------------------------------------------------------------------------------------------------------
|
|
Aggregate
|
|
-> Seq Scan on date_tbl
|
|
Filter: (((f1 >= '01-01-1997'::date) AND (f1 <= '01-01-1998'::date)) OR ((f1 >= '01-01-1998'::date) AND (f1 <= '01-01-1997'::date)))
|
|
(3 rows)
|
|
|
|
select count(*) from date_tbl
|
|
where f1 between symmetric '1997-01-01' and '1998-01-01';
|
|
count
|
|
-------
|
|
3
|
|
(1 row)
|
|
|
|
explain (costs off)
|
|
select count(*) from date_tbl
|
|
where f1 not between symmetric '1997-01-01' and '1998-01-01';
|
|
QUERY PLAN
|
|
-----------------------------------------------------------------------------------------------------------------------------------------
|
|
Aggregate
|
|
-> Seq Scan on date_tbl
|
|
Filter: (((f1 < '01-01-1997'::date) OR (f1 > '01-01-1998'::date)) AND ((f1 < '01-01-1998'::date) OR (f1 > '01-01-1997'::date)))
|
|
(3 rows)
|
|
|
|
select count(*) from date_tbl
|
|
where f1 not between symmetric '1997-01-01' and '1998-01-01';
|
|
count
|
|
-------
|
|
13
|
|
(1 row)
|
|
|