Re: Feature request: smarter use of conditional indexes

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Feature request: smarter use of conditional indexes
Дата
Msg-id 18409.1078607169@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Feature request: smarter use of conditional indexes  (John Siracusa <siracusa@mindspring.com>)
Ответы Re: Feature request: smarter use of conditional indexes  (John Siracusa <siracusa@mindspring.com>)
Список pgsql-performance
John Siracusa <siracusa@mindspring.com> writes:
> So apparently all I can do is find out if it's a null test, but not if it is
> specifically "IS NOT NULL"

No, because once you have determined that the node really IsA NullTest,
you can cast the pointer to (NullTest *) and look at the
NullTest-specific fields.  Think of this as poor man's object-oriented
programming: Node is the supertype of Expr which is the supertype of
NullTest (and a lot of other kinds of nodes, too).

It'd look something like

    if (IsA(predicate, NullTest) &&
        ((NullTest *) predicate)->nulltesttype == IS_NOT_NULL)
    {
      /* check to see if arg field matches either side of opclause,
       * and if so check whether operator is strict ...
       */
    }

You can find plenty of examples of this programming pattern throughout
the backend.  In fact pred_test_simple_clause is doing exactly this
to check that what it's given is an OpExpr and not some other node type.

            regards, tom lane

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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Fixed width rows faster?
Следующее
От: John Siracusa
Дата:
Сообщение: Re: Feature request: smarter use of conditional indexes