Re: WIP: pg_pretty_query

Поиск
Список
Период
Сортировка
От Thom Brown
Тема Re: WIP: pg_pretty_query
Дата
Msg-id CAA-aLv6WpmAFz4tqhwgLWN0MZ3Ltxvn=mfXn0XYE+Zam8nua5g@mail.gmail.com
обсуждение исходный текст
Ответ на WIP: pg_pretty_query  (Pavel Stehule <pavel.stehule@gmail.com>)
Ответы Re: WIP: pg_pretty_query
Список pgsql-hackers
On 7 August 2012 15:14, Pavel Stehule <pavel.stehule@gmail.com> wrote:
> Hello
>
> last year we are spoke about reusing pretty print view code for some queries.
>
> Here is patch:
>
> this patch is really short - it is nice. But - it works only with
> known database objects (probably we would it) and it doesn't format
> subqueries well
>
>
> postgres=# select pg_pretty_query('select x.*, z.* from foo, foo x, x
> z  where x.a = 10 and x.a = 30 and EXISTS(SELECT * FROM foo WHERE a =
> z.a)', true, false);
>                      pg_pretty_query
> ----------------------------------------------------------
>   SELECT x.a, z.a                                        +
>     FROM foo, foo x, x z                                 +
>    WHERE x.a = 10 AND x.a = 30 AND (EXISTS ( SELECT foo.a+
>             FROM foo                                     +
>            WHERE foo.a = z.a))
> (1 row)

This looks odd:

postgres=# SELECT pg_pretty_query('SELECT 1, (SELECT max(a.x) +
greatest(2,3) FROM generate_series(4,10,2) a(x)) FROM
generate_series(1,100) GROUP BY 1 ORDER BY 1, 2 USING < NULLS FIRST',
true, false);                        pg_pretty_query
------------------------------------------------------------------ SELECT 1,
         +    ( SELECT max(a.x) + GREATEST(2, 3)                          +           FROM generate_series(4, 10, 2)
a(x))                +   FROM generate_series(1, 100) generate_series(generate_series)+  GROUP BY 1::integer
                              +  ORDER BY 1::integer, ( SELECT max(a.x) + GREATEST(2, 3)       +           FROM
generate_series(4,10, 2) a(x)) NULLS FIRST
 
(1 row)

USING < is removed completely (or if I used DESC, NULLS FIRST is then
removed instead), "2" in the order by is expanded to its full query,
and generate_series when used in FROM is repeated with its own name as
a parameter.  I'm also not sure about the spacing before each line.
SELECT, FROM and GROUP BY all appear out of alignment from one
another.

Plus it would be nice if we could support something like the following style:

SELECT   field_one,   field_two + field_three
FROM   my_table
INNER JOIN   another_table   ON       my_table.field_one = another_table.another_field   AND       another_table.valid
=true
 
WHERE   field_one > 3
AND   field_two < 10;

But that's just a nice-to-have.
-- 
Thom


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: WIP: pg_pretty_query
Следующее
От: Alvaro Herrera
Дата:
Сообщение: Re: -Wformat-zero-length