WIP: CASE statement for PL/pgSQL
От | Pavel Stehule |
---|---|
Тема | WIP: CASE statement for PL/pgSQL |
Дата | |
Msg-id | 162867790803310548k2b18aaa4p849df1d780158256@mail.gmail.com обсуждение исходный текст |
Список | pgsql-hackers |
Hello I finished this patch. Proposal: http://archives.postgresql.org/pgsql-hackers/2008-01/msg00696.php It's compatible with PL/SQL (Oracle) and SQL/PSM (ANSI). CASE statements is parsed and transformed to CASE expression and statements paths. Result of CASE expression is used as index to array of statements paths. It's fast but I have to once time reparse SQL queries - it generate about 150 lines code, because I need to get all parameter's positions. It's one disadvantage. On second hand, this statement needs only one expression evaluation. Sample: CREATE OR REPLACE FUNCTION foo(int) RETURNS void AS $$ BEGIN CASE $1 WHEN 1,2,3 THEN RAISE NOTICE '1,2'; RAISE NOTICE '3'; WHEN 4 THEN RAISE NOTICE '4'; ELSE RAISE NOTICE 'other than 1,2,3,4'; END CASE; RETURN; END; $$ LANGUAGE plpgsql; This statement is transformated to: three statement paths: [0] RAISE NOTICE 'other than 1,2,3,4'; [1] RAISE NOTICE '1,2'; RAISE NOTICE '3'; [2] RAISE NOTICE '4'; and case expression CASE $1 WHEN 1 THEN 1 WHEN 2 THEN 1 WHEN 3 THEN 1 WHEN 4 THEN 2 END; When result is NULL then it uses 0 path. Questions: a) is possible to use SQL scanner? Now, scanner isn't directly used everywhere. any notes and comments are welcome Regards Pavel Stehule
Вложения
В списке pgsql-hackers по дате отправления: