Add some test cases to improve test coverage of parse_expr.c.
authorTom Lane <[email protected]>
Sat, 6 Jul 2019 03:56:34 +0000 (23:56 -0400)
committerTom Lane <[email protected]>
Sat, 6 Jul 2019 03:56:34 +0000 (23:56 -0400)
I chanced to notice while thumbing through lcov reports that we had
exactly no coverage of BETWEEN SYMMETRIC, nor of current_time(N) and
localtime(N).  Improve that.

parse_expr.c still has a pretty awful coverage number, but a large part
of that is due to lack of coverage of the operator_precedence_warning
logic.  I have zero desire to write tests for that; I think ripping it
out would be more sensible at this point.

src/test/regress/expected/expressions.out
src/test/regress/sql/expressions.sql

index 719455b0ebb7ba9d5b459988076a565be01141b9..4f4deaec2231cfc171b419bc53b9695b71d6f5b1 100644 (file)
@@ -1,5 +1,5 @@
 --
--- expression evaluated tests that don't fit into a more specific file
+-- expression evaluation tests that don't fit into a more specific file
 --
 --
 -- Tests for SQLVAlueFunction
@@ -18,12 +18,24 @@ SELECT now()::timetz::text = current_time::text;
  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? 
@@ -75,3 +87,74 @@ SELECT current_schema;
 (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 
+-------
+    12
+(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 
+-------
+    12
+(1 row)
+
index 3427fdfdd7284bae41ddbf17adaa496be31282c9..1ca8bb151c80c43fdd7c8d869f42442cba95e8e5 100644 (file)
@@ -1,5 +1,5 @@
 --
--- expression evaluated tests that don't fit into a more specific file
+-- expression evaluation tests that don't fit into a more specific file
 --
 
 --
@@ -13,7 +13,9 @@ SELECT date(now())::text = current_date::text;
 
 -- current_time / localtime
 SELECT now()::timetz::text = current_time::text;
+SELECT now()::timetz(4)::text = current_time(4)::text;
 SELECT now()::time::text = localtime::text;
+SELECT now()::time(3)::text = localtime(3)::text;
 
 -- current_timestamp / localtimestamp (always matches because of transactional behaviour)
 SELECT current_timestamp = NOW();
@@ -34,3 +36,32 @@ SELECT current_schema;
 SET search_path = 'pg_catalog';
 SELECT current_schema;
 RESET search_path;
+
+
+--
+-- Tests for BETWEEN
+--
+
+explain (costs off)
+select count(*) from date_tbl
+  where f1 between '1997-01-01' and '1998-01-01';
+select count(*) from date_tbl
+  where f1 between '1997-01-01' and '1998-01-01';
+
+explain (costs off)
+select count(*) from date_tbl
+  where f1 not between '1997-01-01' and '1998-01-01';
+select count(*) from date_tbl
+  where f1 not between '1997-01-01' and '1998-01-01';
+
+explain (costs off)
+select count(*) from date_tbl
+  where f1 between symmetric '1997-01-01' and '1998-01-01';
+select count(*) from date_tbl
+  where f1 between symmetric '1997-01-01' and '1998-01-01';
+
+explain (costs off)
+select count(*) from date_tbl
+  where f1 not between symmetric '1997-01-01' and '1998-01-01';
+select count(*) from date_tbl
+  where f1 not between symmetric '1997-01-01' and '1998-01-01';