[REVIEWED:3-4] crash on query with outer join
Lionel Elie Mamane
lionel at mamane.lu
Thu Feb 9 02:38:07 PST 2012
On Thu, Feb 09, 2012 at 09:34:45AM +0000, Michael Meeks wrote:
> Out of interest, do databasen use 'not zero' for their true state (as
> C/C++ etc.) ? or always exactly 1 ?
In the SQL standard, the only (explicit, with a cast)s data conversion
specified for booleans are to/from the strings 'TRUE' and 'FALSE' and
'UNKNOWN' (a synonym for NULL in boolean context), which correspond to
the literals.
Anything else is database-specific and can be an error.
MySQL does not really have a boolean datatype; it is a synonym for
"tinyint" (8 bit integer). In tests (when a "truth value" is
required), anything not-zero is true (except NULL), but TRUE is the
constant one. So
SELECT * FROM table WHERE boolColumn=TRUE
and
SELECT * FROM table WHERE boolColumn
do not give the same results. They are, respectively:
SELECT * FROM table WHERE boolColumn=1
and
SELECT * FROM table WHERE boolColumn<>0
"boolColumn" can be any integer column.
PostgreSQL has a boolean datatype, and there is no automatic
conversion between integers and booleans:
=> SELECT 0=FALSE;
ERROR: operator does not exist: integer = boolean
=> SELECT * FROM table WHERE integerColumn;
ERROR: argument of WHERE must be type boolean, not type integer
But they can be explicitly casted and then TRUE=>1, and
non-zero=>TRUE. Interestingly, you can cast a boolean to a 32-bit
integer, but not to a 16-bit or 64-bit integer... And vice-versa: you
can cast a 32-bit integer to a boolean, but not a 16 or 64-bit integer
to a boolean.
A truth value (result of test) is basically a boolean.
--
Lionel
More information about the LibreOffice
mailing list