minor bug in sort_inner_and_outer()

Поиск
Список
Период
Сортировка
От Tomas Vondra
Тема minor bug in sort_inner_and_outer()
Дата
Msg-id bf3a6ea1-a7d8-7211-0669-189d5c169374@enterprisedb.com
обсуждение исходный текст
Список pgsql-hackers
Hi,

While looking at sort_inner_and_outer() I was rather confused what is
stored in all_pathkeys, because the code does this:

  List *all_pathkeys;

  ...

  all_pathkeys = select_outer_pathkeys_for_merge(root,
                                             extra->mergeclause_list,
                                             joinrel);

  foreach(l, all_pathkeys)
  {
      List       *front_pathkey = (List *) lfirst(l);
      ...

      /* Make a pathkey list with this guy first */
      if (l != list_head(all_pathkeys))
          outerkeys = lcons(front_pathkey,
                            ...);
      else
          ...

which seems to suggest all_pathkeys is a list of lists, because why else
would front_pathkey be a (List *). But that doesn't seem to be the case,
front_pathkey is actually a PathKey, not a List, as demonstrated by gdb:

(gdb) p *front_pathkey
$2 = {type = T_PathKey, length = 0, ...}

Maybe it's some clever list-fu that I can't comprehend, but I guess it's
a bug present since ~2004. It's benign because we only ever pass the
front_pathkey to lcons() which does not really care.


regards

-- 
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
Вложения

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

Предыдущее
От: Tomas Vondra
Дата:
Сообщение: Re: PATCH: generate fractional cheapest paths in generate_orderedappend_path
Следующее
От: Amit Kapila
Дата:
Сообщение: Re: row filtering for logical replication