diff options
author | Andres Freund <andres@anarazel.de> | 2018-03-08 17:07:16 -0800 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2018-03-13 16:12:31 -0700 |
commit | 1e22166e5ebbc3df7684209657ea58ba880546d6 (patch) | |
tree | 8998efe3c9bbd7d402b2a1cd1c51ae141dbed751 /src/test/regress/sql/boolean.sql | |
parent | 4f63e85eb149792492a703f01a3a5b89bf5509a7 (diff) | |
download | postgresql-1e22166e5ebbc3df7684209657ea58ba880546d6.tar.gz postgresql-1e22166e5ebbc3df7684209657ea58ba880546d6.zip |
Expand AND/OR regression tests around NULL handling.
Previously there were no tests verifying that NULL handling in AND/OR
was correct (i.e. that NULL rather than false is returned if
expression doesn't return true).
Author: Andres Freund
Diffstat (limited to 'src/test/regress/sql/boolean.sql')
-rw-r--r-- | src/test/regress/sql/boolean.sql | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/test/regress/sql/boolean.sql b/src/test/regress/sql/boolean.sql index cbf335467b5..df61fa4e3e3 100644 --- a/src/test/regress/sql/boolean.sql +++ b/src/test/regress/sql/boolean.sql @@ -219,6 +219,33 @@ SELECT b IS NOT UNKNOWN AS isnotunknown FROM booltbl3 ORDER BY o; + +-- Test to make sure short-circuiting and NULL handling is +-- correct. Use a table as source to prevent constant simplification +-- to interfer. +CREATE TABLE booltbl4(isfalse bool, istrue bool, isnul bool); +INSERT INTO booltbl4 VALUES (false, true, null); +\pset null '(null)' + +-- AND expression need to return null if there's any nulls and not all +-- of the value are true +SELECT istrue AND isnul AND istrue FROM booltbl4; +SELECT istrue AND istrue AND isnul FROM booltbl4; +SELECT isnul AND istrue AND istrue FROM booltbl4; +SELECT isfalse AND isnul AND istrue FROM booltbl4; +SELECT istrue AND isfalse AND isnul FROM booltbl4; +SELECT isnul AND istrue AND isfalse FROM booltbl4; + +-- OR expression need to return null if there's any nulls and none +-- of the value is true +SELECT isfalse OR isnul OR isfalse FROM booltbl4; +SELECT isfalse OR isfalse OR isnul FROM booltbl4; +SELECT isnul OR isfalse OR isfalse FROM booltbl4; +SELECT isfalse OR isnul OR istrue FROM booltbl4; +SELECT istrue OR isfalse OR isnul FROM booltbl4; +SELECT isnul OR istrue OR isfalse FROM booltbl4; + + -- -- Clean up -- Many tables are retained by the regression test, but these do not seem @@ -231,3 +258,5 @@ DROP TABLE BOOLTBL1; DROP TABLE BOOLTBL2; DROP TABLE BOOLTBL3; + +DROP TABLE BOOLTBL4; |