-- -- 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)