A custom scan provider will typically add paths for a base relation by
setting the following hook, which is called after the core code has
generated all the access paths it can for the relation (except for
- Gather paths, which are made after this call so that they can use
- partial paths added by the hook):
+ Gather and Gather Merge paths, which are made after this call so that
+ they can use partial paths added by the hook):
<programlisting>
typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root,
RelOptInfo *rel,
Although this hook function can be used to examine, modify, or remove
paths generated by the core system, a custom scan provider will typically
confine itself to generating <structname>CustomPath</structname> objects and adding
- them to <literal>rel</literal> using <function>add_path</function>. The custom scan
- provider is responsible for initializing the <structname>CustomPath</structname>
- object, which is declared like this:
+ them to <literal>rel</literal> using <function>add_path</function>, or
+ <function>add_partial_path</function> if they are partial paths. The
+ custom scan provider is responsible for initializing the
+ <structname>CustomPath</structname> object, which is declared like this:
<programlisting>
typedef struct CustomPath
{