I was surprised to learn that 2 is a valid boolean (thanks Berge):
# select 2::boolean;
bool
──────
t
... while '2' is not:
# select '2'::boolean;
ERROR: 22P02: invalid input syntax for type boolean: "2"
LINE 1: select '2'::boolean;
^
LOCATION: boolin, bool.c:151
The first cast is the int4_bool function, but it isn't covered by the
regression tests at all. The attached patch adds tests.
Christoph
>From 5752d75122db323b4066dd604d0c7a19077641a6 Mon Sep 17 00:00:00 2001
From: Christoph Berg <[email protected]>
Date: Thu, 21 Dec 2023 11:43:28 +0100
Subject: [PATCH] Add tests for int4_bool
This cast was previously not covered at all by the regression tests.
---
src/test/regress/expected/boolean.out | 19 +++++++++++++++++++
src/test/regress/sql/boolean.sql | 6 ++++++
2 files changed, 25 insertions(+)
diff --git a/src/test/regress/expected/boolean.out b/src/test/regress/expected/boolean.out
index ee9c244bf8..ff9440df7e 100644
--- a/src/test/regress/expected/boolean.out
+++ b/src/test/regress/expected/boolean.out
@@ -566,6 +566,25 @@ SELECT isnul OR istrue OR isfalse FROM booltbl4;
t
(1 row)
+-- Casts
+SELECT 0::boolean;
+ bool
+------
+ f
+(1 row)
+
+SELECT 1::boolean;
+ bool
+------
+ t
+(1 row)
+
+SELECT 2::boolean;
+ bool
+------
+ t
+(1 row)
+
--
-- Clean up
-- Many tables are retained by the regression test, but these do not seem
diff --git a/src/test/regress/sql/boolean.sql b/src/test/regress/sql/boolean.sql
index bc9937d692..cde6cd3576 100644
--- a/src/test/regress/sql/boolean.sql
+++ b/src/test/regress/sql/boolean.sql
@@ -251,6 +251,12 @@ SELECT istrue OR isfalse OR isnul FROM booltbl4;
SELECT isnul OR istrue OR isfalse FROM booltbl4;
+-- Casts
+SELECT 0::boolean;
+SELECT 1::boolean;
+SELECT 2::boolean;
+
+
--
-- Clean up
-- Many tables are retained by the regression test, but these do not seem
--
2.43.0