Fwd: WIP: CASE statement for PL/pgSQL

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема Fwd: WIP: CASE statement for PL/pgSQL
Дата
Msg-id 162867790803310833s43dad00eo6f1c509ca5fea61d@mail.gmail.com
обсуждение исходный текст
Ответы Re: Fwd: WIP: CASE statement for PL/pgSQL
Список pgsql-patches
correct queue

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

Предыдущее
От: "Brendan Jurd"
Дата:
Сообщение: Re: Consistent \d commands in psql
Следующее
От: Gregory Stark
Дата:
Сообщение: Re: Consistent \d commands in psql