|
10 | 10 | Gather and Gather Merge paths, which are made after this call so that |
11 | 11 | they can use partial paths added by the hook): |
12 | 12 | </span> |
13 | | -《マッチ度[90.062112]》カスタムスキャンプロバイダは、典型的には、以下のフックを設定することでベースリレーションのためのパスを追加します。 |
14 | | -このフックはコアのコードがそのリレーションへのすべてのアクセスパスを生成した後で呼び出されます。 |
15 | | -(フックの呼び出しの後に作成されるギャザーパス(Gather path)を除きます。フックが追加した部分パスをギャザーパスが利用できるようにするためです。) |
| 13 | +カスタムスキャンプロバイダは、典型的には、以下のフックを設定することでベースリレーションのためのパスを追加します。 |
| 14 | +このフックはコアのコードがそのリレーションへのすべてのアクセスパスを生成した後で呼び出されます(フックが追加した部分パスを利用できるようにするためにフックの呼び出しの後に作成される、ギャザーパス(Gather path)とギャザーマージパス(Gather Merge path)を除きます)。 |
16 | 15 | </p><pre class="programlisting"> |
17 | 16 | typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root, |
18 | 17 | RelOptInfo *rel, |
|
30 | 29 | custom scan provider is responsible for initializing the |
31 | 30 | <structname>CustomPath</structname> object, which is declared like this: |
32 | 31 | </span> |
33 | | -《マッチ度[81.488934]》このフックはコアシステムが生成したパスを検査し、修正し、あるいは削除するために使うことができますが、カスタムスキャンプロバイダは、典型的には<code class="structname">CustomPath</code>オブジェクトを生成し、<code class="function">add_path</code>を使ってそれを<code class="literal">rel</code>に追加することのみを行います。 |
| 32 | +このフックはコアシステムが生成したパスを検査し、修正し、あるいは削除するために使うことができますが、カスタムスキャンプロバイダは、典型的には<code class="structname">CustomPath</code>オブジェクトを生成し、<code class="function">add_path</code>、または、部分パスであるなら<code class="function">add_partial_path</code>を使って、それを<code class="literal">rel</code>に追加することのみを行います。 |
34 | 33 | カスタムスキャンプロバイダは<code class="structname">CustomPath</code>オブジェクトの初期化を担当します。 |
35 | 34 | このオブジェクトは以下のように宣言されています。 |
36 | | -《機械翻訳》このフック関数は、経路によって生成されたコアシステムを検査、変更、または削除するために使用できますが、カスタムスキャンプロバイダは通常、自分自身を生成する<code class="structname">CustomPath</code>オブジェクトに限定し、<code class="function">add_path</code>を使用して、または<code class="function">add_partial_path</code>を使用して<code class="literal">rel</code>に追加します。 |
37 | | -カスタムスキャンプロバイダは、<code class="structname">CustomPath</code>オブジェクトを初期化する責任があります。 |
38 | | -これは、次のように宣言されます。 |
39 | 35 | </p><pre class="programlisting"> |
40 | 36 | typedef struct CustomPath |
41 | 37 | { |
|
76 | 72 | point to a (usually statically allocated) object implementing the required |
77 | 73 | custom path methods, which are further detailed below. |
78 | 74 | </span> |
79 | | -《マッチ度[80.526021]》<code class="structfield">path</code>は、他のすべてのパスと同じく、行数の推定値、開始とトータルのコスト、このパスで提供されるソート順を含めて初期化される必要があります。 |
| 75 | +<code class="structfield">path</code>は、他のすべてのパスと同じく、行数の推定値、開始とトータルのコスト、このパスで提供されるソート順を含めて初期化される必要があります。 |
80 | 76 | <code class="structfield">flags</code>はビットマスクで、スキャンプロバイダが特定のオプションをサポートできるかどうかを指定します。 |
81 | 77 | カスタムパスが逆向きスキャンをサポートできるなら<code class="literal">CUSTOMPATH_SUPPORT_BACKWARD_SCAN</code>を、マークとリストアをサポートできるなら<code class="literal">CUSTOMPATH_SUPPORT_MARK_RESTORE</code>を、プロジェクションを実行できるなら<code class="literal">CUSTOMPATH_SUPPORT_PROJECTION</code>を<code class="structfield">flags</code>に含めます。 |
82 | 78 | (<code class="literal">CUSTOMPATH_SUPPORT_PROJECTION</code>が設定されていなければ、スキャンノードはスキャンされるリレーションのVarを生成するよう依頼されるだけです。一方、そのフラグが設定されていれば、スキャンノードはこのVarのスカラ式を評価できないといけません。) |
83 | 79 | オプションの<code class="structfield">custom_paths</code>はこのカスタムパスのノードで使用される<code class="structname">Path</code>のノードのリストです。 |
84 | 80 | プランナがこれを<code class="structname">Plan</code>のノードに変換します。 |
| 81 | +後述するように、結合リレーションに対してもカスタムパスを作成できます。 |
| 82 | +このような場合には、カスタムパスが置き換える結合に適用する結合句の集合を格納するために、<code class="structfield">custom_restrictinfo</code>を使用する必要があります。 |
| 83 | +それ以外の場合はNILです。 |
85 | 84 | <code class="structfield">custom_private</code>はカスタムパスのプライベートデータを格納するために使うことができます。 |
86 | 85 | プライベートデータは<code class="literal">nodeToString</code>が処理できるような形式で格納してください。 |
87 | 86 | そうすることで、カスタムパスを出力するデバッグルーチンが設計通りに動作します。 |
88 | 87 | <code class="structfield">methods</code>は要求されるカスタムパスのメソッドのオブジェクト(通常は静的に割り当てられる)を指している必要があり、以下でさらに詳しく説明します。 |
89 | | -《機械翻訳》<code class="structfield">path</code>は、このパスによって提供される行-カウントの推定値、スタートおよび総コスト、ソート順序付けを含む他のパスと同様に初期化する必要があります。 |
90 | | -<code class="structfield">flags</code>はビットマスクで、スキャンプロバイダが特定のオプショナル機能をサポートできるかどうかを指定します。 |
91 | | -<code class="structfield">flags</code>は、カスタムパスが後方スキャンをincludeできる場合は<code class="literal">CUSTOMPATH_SUPPORT_BACKWARD_SCAN</code>、サポートマークとリストアをサポートできる場合は<code class="literal">CUSTOMPATH_SUPPORT_MARK_RESTORE</code>、投影を実行できる場合は<code class="literal">CUSTOMPATH_SUPPORT_PROJECTION</code>になります。 |
92 | | -<code class="literal">CUSTOMPATH_SUPPORT_PROJECTION</code>が設定されていない場合、スキャンノードはスキャンされたリレーションの変数を生成するように要求されるだけです。 |
93 | | -一方、そのフラグが設定されている場合、スキャンノードはこれらの変数に対してスカラ式を評価できる必要があります。 |
94 | | -オプショナル<code class="structfield">custom_paths</code>は、このカスタム-パスノードによって使用される<code class="structname">Path</code>ノードのリストであり、これらはプランナによって<code class="structname">Plan</code>ノードに変換される。 |
95 | | -後述するように、結合経路に対してもカスタムリレーションを作成することができる。 |
96 | | -このようなケースでは、<code class="structfield">カスタム_restrictinfo</code>を使用して、結合パスが置き換える結合に適用する一連のカスタム句を保存する必要があります。 |
97 | | -それ以外の場合はNILです。 |
98 | | -<code class="structfield">custom_private</code>は、カスタムパスのプライベートデータを格納するために使用できます。 |
99 | | -プライベートデータは、<code class="literal">nodeToString</code>で処理できるフォームに格納する必要があります。 |
100 | | -これにより、カスタムパスをプリントしようとするデバッグルーチンが設計どおりに動作します。 |
101 | | -<code class="structfield">methods</code>は、必要なポイントオブジェクトメソッドを実装する(通常は静的に割り当てられた)カスタムにパスする必要があります。 |
102 | | -詳細については、以下を参照してください。 |
103 | 88 | </p><p> |
104 | 89 | <span class="original"> |
105 | 90 | A custom scan provider can also provide join paths. Just as for base |
|
139 | 124 | <structname>CustomPath</structname> path into a plan, if it is selected |
140 | 125 | by the planner as the best path for the <literal>joinrel</literal>. |
141 | 126 | </span> |
142 | | -《機械翻訳》ノートまた、<code class="literal">extra->restrictlist</code>として渡される結合に適用される結合条項のセットは、内部リレーションと外部地域の組み合わせによって異なります。 |
143 | | -<code class="literal">joinrel</code>に対して生成される<code class="structname">CustomPath</code>パスには、使用する結合句のセットが含まれている必要があります。 |
144 | | -プランナが<code class="literal">joinrel</code>のベストパスとして選択した場合、<code class="structname">CustomPath</code>パスをプランに変換するためにプランナによって使用されます。 |
| 127 | +<code class="literal">extra->restrictlist</code>として渡される結合に適用される結合句のセットは、内部と外部のリレーションの組み合わせによって異なることにも注意してください。 |
| 128 | +<code class="literal">joinrel</code>に対して生成される<code class="structname">CustomPath</code>パスには、使用する結合句の集合が含まれていなければなりません。このパスをプランナが<code class="literal">joinrel</code>に対する最適パスとして選択した場合、これらは<code class="structname">CustomPath</code>パスをプランに変換するためにプランナによって使用されます。 |
145 | 129 | </p><div class="sect2" id="CUSTOM-SCAN-PATH-CALLBACKS"><div class="titlepage"><div><div><h3 class="title">59.1.1. カスタムスキャンパスのコールバック <a href="#CUSTOM-SCAN-PATH-CALLBACKS" class="id_link">#</a></h3></div></div></div><span class="original"> |
146 | 130 | <title>Custom Scan Path Callbacks</title> |
147 | 131 | </span><p> |
|
0 commit comments