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 по дате отправления:

Предыдущее
От: "Pavan Deolasee"
Дата:
Сообщение: Re: [GENERAL] ANALYZE getting dead tuple count hopelessly wrong
Следующее
От: PFC
Дата:
Сообщение: Re: first time hacker ;) messing with prepared statements