BUG #16549: "CASE" not work properly , the function works properly on PostgreSQL 9.6.8

From: PG Bug reporting form <noreply(at)postgresql(dot)org>
To: pgsql-bugs(at)lists(dot)postgresql(dot)org
Cc: slawomir(dot)nowakiewicz(at)rubix(dot)com
Subject: BUG #16549: "CASE" not work properly , the function works properly on PostgreSQL 9.6.8
Date: 2020-07-21 13:55:48
Message-ID: 16549-4991fbf36fcec234@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 16549
Logged by: Sławomir Nowakiewicz
Email address: slawomir(dot)nowakiewicz(at)rubix(dot)com
PostgreSQL version: 12.1
Operating system: Linux
Description:

"CASE" try to cast a string to integer when a condition is not met. I
checked this function also on PostgreSQL 11.2 - the result is the same.

BEGIN;
CREATE TABLE public.temp_data_type
(
data_type_name text NOT NULL,
data_type_storage_type text NOT NULL DEFAULT ''::text
);

INSERT INTO public.temp_data_type
VALUES
('INTEGER','int'),
('LOOKUP_TABLE','string');

CREATE OR REPLACE FUNCTION public.temp_item_attribute_create(p_datatype
text, p_values text[])
RETURNS integer
LANGUAGE 'plpgsql'
VOLATILE

AS $BODY$
DECLARE
value_int integer;
i integer;
BEGIN
i:=1;
--RAISE NOTICE 'datatype: %', p_datatype;
--RAISE NOTICE 'attribute.values[i]: %',p_values[i];

value_int := CASE WHEN p_datatype::TEXT IN (SELECT data_type_name FROM
temp_data_type WHERE data_type_storage_type = 'int') THEN
p_values[i]::INTEGER
ELSE
NULL::INTEGER
END;



RETURN value_int;
END;
$BODY$;

ALTER FUNCTION public.temp_item_attribute_create(text,text[])
OWNER TO postgres;

SELECT temp_item_attribute_create('LOOKUP_TABLE','{SHELL}');
--ROLLBACK;

ERROR: 22P02: invalid input syntax for type integer: "SHELL"
CONTEXT: SQL statement "SELECT CASE WHEN p_datatype::TEXT IN (SELECT
data_type_name FROM temp_data_type WHERE data_type_storage_type = 'int')
THEN

p_values[i]::INTEGER

ELSE

NULL::INTEGER

END"
PL/pgSQL function temp_item_attribute_create(text,text[]) line 10 at
assignment
LOCATION: pg_strtoint32, numutils.c:259

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2020-07-21 14:15:15 Re: BUG #16548: Order by on array element giving disparity in result
Previous Message Manvendra 2020-07-21 13:51:30 Re: BUG #16548: Order by on array element giving disparity in result