powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / XML + ENUM + FUNCTION = ERROR?
3 сообщений из 3, страница 1 из 1
XML + ENUM + FUNCTION = ERROR?
    #35494608
RomanT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть предположение, что в SQL/PLPGSQL функциях не корректно обрабатываются NULL значения
при использовании XML функций и перечислимых типов.
Данное поведение необходимо считать ошибкой или фичей?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
CREATE TYPE t_color AS ENUM
   ('WHITE',
    'BLACK',
    'GREEN',
    'BLUE');
ALTER TYPE t_color OWNER TO appuser;

CREATE OR REPLACE FUNCTION get_f1(IN f1 t_color)
RETURNS XML AS
$BODY$
SELECT XMLELEMENT(name color, XMLATTRIBUTES($ 1  AS selected));
$BODY$
LANGUAGE 'sql' IMMUTABLE STRICT;
ALTER FUNCTION get_f1(IN f1 t_color) OWNER TO appuser;

CREATE OR REPLACE FUNCTION get_f2(IN f2 t_color) RETURNS XML AS
$BODY$
BEGIN
RETURN XMLELEMENT(name color, XMLATTRIBUTES(CAST(f2 AS t_color) AS selected));
END;
$BODY$
LANGUAGE 'plpgsql' IMMUTABLE STRICT;
ALTER FUNCTION get_f2(IN f2 t_color) OWNER TO appuser;

SELECT XMLELEMENT(name color, XMLATTRIBUTES(CAST('WHITE' AS t_color) AS selected)),
       XMLELEMENT(name color, XMLATTRIBUTES(CAST(NULL AS t_color) AS selected)),
       get_f1(CAST('WHITE' AS t_color)),
       get_f1(CAST(NULL AS t_color)),
       get_f2(CAST('WHITE' AS t_color)),
       get_f2(CAST(NULL AS t_color))

--Output
--"<color selected="WHITE"/>";"<color/>";"<color selected="WHITE"/>";"";"<color selected="WHITE"/>";""
...
Рейтинг: 0 / 0
XML + ENUM + FUNCTION = ERROR?
    #35495693
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман, атрибут функции strict означает "не вызывать функцию если входные параметры is null, а всегда возвращать сразу null в качестве результата".

попробуйте пересоздать get_f1 и get_f2 без strict и посмотрите что получится.


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
XML + ENUM + FUNCTION = ERROR?
    #35496552
RomanT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЁшРоман, атрибут функции strict означает "не вызывать функцию если входные параметры is null, а всегда возвращать сразу null в качестве результата".

попробуйте пересоздать get_f1 и get_f2 без strict и посмотрите что получится.


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери

Спасибо, помогло :-)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / XML + ENUM + FUNCTION = ERROR?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]