row_is_null.out

text/plain

Filename: row_is_null.out
Type: text/plain
Part: 1
Message: Re: strange IS NULL behaviour
SELECT ROW(NULL) IS NULL;
 ?column? 
----------
 t
(1 row)

SELECT ROW(ROW(NULL)) IS NULL;
 ?column? 
----------
 t
(1 row)

SELECT ROW(ROW(ROW(NULL))) IS NULL;
 ?column? 
----------
 f
(1 row)

SELECT RECORD(NULL) IS NULL;
 ?column? 
----------
 t
(1 row)

SELECT RECORD(RECORD(NULL)) IS NULL;
 ?column? 
----------
 t
(1 row)

SELECT RECORD(RECORD(RECORD(NULL))) IS NULL;
 ?column? 
----------
 t
(1 row)

DROP TABLE IF EXISTS tt;
DROP TABLE
CREATE TABLE tt (x INT);
CREATE TABLE
INSERT INTO tt VALUES(NULL);
INSERT 0 1
SELECT ROW(x) IS NULL FROM tt;
 ?column? 
----------
 t
(1 row)

SELECT ROW(ROW(x)) IS NULL FROM tt;
 ?column? 
----------
 t
(1 row)

SELECT ROW(ROW(ROW(x))) IS NULL FROM tt;
 ?column? 
----------
 f
(1 row)

SELECT coalesce(ROW(NULL,NULL), ROW('no', 'bueno'));
 coalesce 
----------
 (,)
(1 row)

SELECT CASE WHEN ROW(NULL,NULL) IS NULL THEN ROW('no', 'bueno') END;
    case    
------------
 (no,bueno)
(1 row)

DROP TABLE IF EXISTS test3;
DROP TABLE
DROP TABLE IF EXISTS test2;
DROP TABLE
CREATE TABLE test2 (x INT);
CREATE TABLE
CREATE TABLE test3(x test2 NOT NULL);
CREATE TABLE
INSERT INTO test3 VALUES (null);
ERROR:  null value in column "x" violates not-null constraint
DETAIL:  Failing row contains (null).
INSERT INTO test3 VALUES (row(null));
INSERT 0 1
DO LANGUAGE plpgsql $$
DECLARE
r RECORD;
BEGIN

DROP TABLE IF EXISTS test;
CREATE TABLE test (x INT, y INT);

INSERT INTO test VALUES (1, NULL), (NULL, 1), (NULL, NULL);
FOR r IN SELECT * FROM test
LOOP
IF (r IS NULL)
THEN RAISE NOTICE 'true';
ELSE RAISE NOTICE 'false';
END IF;
END LOOP;
END;
$$;
NOTICE:  false
NOTICE:  false
NOTICE:  true
DO
DO LANGUAGE plpgsql $$
DECLARE
r RECORD;
BEGIN

SELECT NULL INTO r;
IF (r IS NULL)
THEN RAISE NOTICE 'true';
ELSE RAISE NOTICE 'false';
END IF;

SELECT ROW(NULL) INTO r;
IF (r IS NULL)
THEN RAISE NOTICE 'true';
ELSE RAISE NOTICE 'false';
END IF;

END;
$$;
NOTICE:  true
NOTICE:  false
DO