2026-06-03 11:48:33 +02:00

300 lines
19 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 12.2.1 (0)
-->
<!-- Title: QueryOpsHandPlan Pages: 1 -->
<svg width="1194pt" height="666pt"
viewBox="0.00 0.00 1193.62 666.00" xmlns="http://www.w3.org/2000/svg">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 662)">
<title>QueryOpsHandPlan</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-662 1189.62,-662 1189.62,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_inputs</title>
<polygon fill="white" stroke="#888888" stroke-dasharray="5,2"
points="6.12,-154 6.12,-457 168.38,-457 168.38,-154 6.12,-154"/>
<text text-anchor="middle" x="87.25" y="-439.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#555555">Inputs (positional tables)
</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_atoms</title>
<polygon fill="white" stroke="#9c27b0" stroke-dasharray="5,2"
points="203.38,-8 203.38,-650 579.38,-650 579.38,-8 203.38,-8"/>
<text text-anchor="middle" x="391.38" y="-632.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#7b1fa2">Atom Scans &#160;(scan_atom: Table × AtomPattern → Relation)
</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_joins</title>
<polygon fill="white" stroke="#4caf50" stroke-dasharray="5,2"
points="635.38,-70 635.38,-424 932.62,-424 932.62,-70 635.38,-70"/>
<text text-anchor="middle" x="784" y="-406.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#388e3c">Joins &#160;(shared cols = matching column names)
</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_outputs</title>
<polygon fill="white" stroke="#888888" stroke-dasharray="5,2"
points="967.62,-99 967.62,-402 1177.62,-402 1177.62,-99 967.62,-99"/>
<text text-anchor="middle" x="1072.62" y="-384.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#555555">Outputs (binding relations)
</text>
</g>
<!-- edge_table -->
<g id="node1" class="node">
<title>edge_table</title>
<path fill="#e8f4fd" stroke="#2196f3" stroke-width="1.5"
d="M135.5,-410.12C135.5,-410.12 38,-410.12 38,-410.12 32,-410.12 26,-404.12 26,-398.12 26,-398.12 26,-327.88 26,-327.88 26,-321.88 32,-315.88 38,-315.88 38,-315.88 135.5,-315.88 135.5,-315.88 141.5,-315.88 147.5,-321.88 147.5,-327.88 147.5,-327.88 147.5,-398.12 147.5,-398.12 147.5,-404.12 141.5,-410.12 135.5,-410.12"/>
<text text-anchor="start" x="49.25" y="-389.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold"
font-size="14.00">Table: edge
</text>
<text text-anchor="start" x="38" y="-360.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
arity 2
</text>
<text text-anchor="start" x="38" y="-331.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
rows: (src, dst)
</text>
</g>
<!-- self_loops -->
<g id="node3" class="node">
<title>self_loops</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M456.12,-606.62C456.12,-606.62 325.62,-606.62 325.62,-606.62 319.62,-606.62 313.62,-600.62 313.62,-594.62 313.62,-594.62 313.62,-495.38 313.62,-495.38 313.62,-489.38 319.62,-483.38 325.62,-483.38 325.62,-483.38 456.12,-483.38 456.12,-483.38 462.12,-483.38 468.12,-489.38 468.12,-495.38 468.12,-495.38 468.12,-594.62 468.12,-594.62 468.12,-600.62 462.12,-606.62 456.12,-606.62"/>
<text text-anchor="start" x="357.5" y="-586.33" font-family="Helvetica,Arial,sans-serif" font-weight="bold"
font-size="14.00">self_loops
</text>
<text text-anchor="start" x="325.62" y="-557.08" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
pattern: [Var X, Var X]
</text>
<text text-anchor="start" x="325.62" y="-528.08" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
filter: row[0] == row[1]
</text>
<text text-anchor="start" x="325.62" y="-499.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
cols: [X]
</text>
</g>
<!-- edge_table&#45;&gt;self_loops -->
<g id="edge1" class="edge">
<title>edge_table&#45;&gt;self_loops</title>
<path fill="none" stroke="#2196f3" stroke-width="1.2"
d="M139.07,-410.51C158.38,-427.04 181.08,-444.95 203.38,-459 234.4,-478.56 270.61,-496.29 302.82,-510.5"/>
<polygon fill="#2196f3" stroke="#2196f3" stroke-width="1.2"
points="301.35,-513.67 311.91,-514.45 304.14,-507.25 301.35,-513.67"/>
</g>
<!-- edge_xy -->
<g id="node4" class="node">
<title>edge_xy</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M456.12,-433.62C456.12,-433.62 325.62,-433.62 325.62,-433.62 319.62,-433.62 313.62,-427.62 313.62,-421.62 313.62,-421.62 313.62,-322.38 313.62,-322.38 313.62,-316.38 319.62,-310.38 325.62,-310.38 325.62,-310.38 456.12,-310.38 456.12,-310.38 462.12,-310.38 468.12,-316.38 468.12,-322.38 468.12,-322.38 468.12,-421.62 468.12,-421.62 468.12,-427.62 462.12,-433.62 456.12,-433.62"/>
<text text-anchor="start" x="363.5" y="-413.32" font-family="Helvetica,Arial,sans-serif" font-weight="bold"
font-size="14.00">edge_xy
</text>
<text text-anchor="start" x="325.62" y="-384.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
pattern: [Var X, Var Y]
</text>
<text text-anchor="start" x="325.62" y="-355.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
filter: none
</text>
<text text-anchor="start" x="325.62" y="-326.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
cols: [X, Y]
</text>
</g>
<!-- edge_table&#45;&gt;edge_xy -->
<g id="edge2" class="edge">
<title>edge_table&#45;&gt;edge_xy</title>
<path fill="none" stroke="#2196f3" stroke-width="1.2"
d="M147.8,-364.79C191.77,-366.1 252.15,-367.9 301.6,-369.37"/>
<polygon fill="#2196f3" stroke="#2196f3" stroke-width="1.2"
points="301.35,-372.86 311.45,-369.66 301.56,-365.87 301.35,-372.86"/>
</g>
<!-- labeled_table -->
<g id="node2" class="node">
<title>labeled_table</title>
<path fill="#e8f4fd" stroke="#2196f3" stroke-width="1.5"
d="M131.38,-266.12C131.38,-266.12 42.12,-266.12 42.12,-266.12 36.12,-266.12 30.12,-260.12 30.12,-254.12 30.12,-254.12 30.12,-183.88 30.12,-183.88 30.12,-177.88 36.12,-171.88 42.12,-171.88 42.12,-171.88 131.38,-171.88 131.38,-171.88 137.38,-171.88 143.38,-177.88 143.38,-183.88 143.38,-183.88 143.38,-254.12 143.38,-254.12 143.38,-260.12 137.38,-266.12 131.38,-266.12"/>
<text text-anchor="start" x="42.12" y="-245.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold"
font-size="14.00">Table: labeled
</text>
<text text-anchor="start" x="42.12" y="-216.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
arity 1
</text>
<text text-anchor="start" x="42.12" y="-187.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
rows: (node)
</text>
</g>
<!-- labeled_x -->
<g id="node5" class="node">
<title>labeled_x</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M435.88,-260.12C435.88,-260.12 345.88,-260.12 345.88,-260.12 339.88,-260.12 333.88,-254.12 333.88,-248.12 333.88,-248.12 333.88,-177.88 333.88,-177.88 333.88,-171.88 339.88,-165.88 345.88,-165.88 345.88,-165.88 435.88,-165.88 435.88,-165.88 441.88,-165.88 447.88,-171.88 447.88,-177.88 447.88,-177.88 447.88,-248.12 447.88,-248.12 447.88,-254.12 441.88,-260.12 435.88,-260.12"/>
<text text-anchor="start" x="360.12" y="-239.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold"
font-size="14.00">labeled_x
</text>
<text text-anchor="start" x="345.88" y="-210.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
pattern: [Var X]
</text>
<text text-anchor="start" x="345.88" y="-181.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
cols: [X]
</text>
</g>
<!-- labeled_table&#45;&gt;labeled_x -->
<g id="edge3" class="edge">
<title>labeled_table&#45;&gt;labeled_x</title>
<path fill="none" stroke="#2196f3" stroke-width="1.2"
d="M143.87,-217.89C194.16,-216.89 268.06,-215.42 321.73,-214.35"/>
<polygon fill="#2196f3" stroke="#2196f3" stroke-width="1.2"
points="321.8,-217.85 331.73,-214.15 321.66,-210.85 321.8,-217.85"/>
</g>
<!-- labeled_y -->
<g id="node6" class="node">
<title>labeled_y</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M435.88,-116.12C435.88,-116.12 345.88,-116.12 345.88,-116.12 339.88,-116.12 333.88,-110.12 333.88,-104.12 333.88,-104.12 333.88,-33.88 333.88,-33.88 333.88,-27.88 339.88,-21.88 345.88,-21.88 345.88,-21.88 435.88,-21.88 435.88,-21.88 441.88,-21.88 447.88,-27.88 447.88,-33.88 447.88,-33.88 447.88,-104.12 447.88,-104.12 447.88,-110.12 441.88,-116.12 435.88,-116.12"/>
<text text-anchor="start" x="360.12" y="-95.83" font-family="Helvetica,Arial,sans-serif" font-weight="bold"
font-size="14.00">labeled_y
</text>
<text text-anchor="start" x="345.88" y="-66.58" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
pattern: [Var Y]
</text>
<text text-anchor="start" x="345.88" y="-37.58" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
cols: [Y]
</text>
</g>
<!-- labeled_table&#45;&gt;labeled_y -->
<g id="edge4" class="edge">
<title>labeled_table&#45;&gt;labeled_y</title>
<path fill="none" stroke="#2196f3" stroke-width="1.2"
d="M143.81,-177.48C162.25,-164.84 183.2,-151.53 203.38,-141 241.58,-121.06 286.59,-103.53 322.82,-90.76"/>
<polygon fill="#2196f3" stroke="#2196f3" stroke-width="1.2"
points="323.76,-94.14 332.05,-87.55 321.46,-87.53 323.76,-94.14"/>
</g>
<!-- q1 -->
<g id="node7" class="node">
<title>q1</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5"
d="M885.88,-380.62C885.88,-380.62 681.12,-380.62 681.12,-380.62 675.12,-380.62 669.12,-374.62 669.12,-368.62 669.12,-368.62 669.12,-269.38 669.12,-269.38 669.12,-263.38 675.12,-257.38 681.12,-257.38 681.12,-257.38 885.88,-257.38 885.88,-257.38 891.88,-257.38 897.88,-263.38 897.88,-269.38 897.88,-269.38 897.88,-368.62 897.88,-368.62 897.88,-374.62 891.88,-380.62 885.88,-380.62"/>
<text text-anchor="start" x="742.25" y="-360.32" font-family="Helvetica,Arial,sans-serif" font-weight="bold"
font-size="14.00">Q1: semijoin
</text>
<text text-anchor="start" x="681.12" y="-331.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
edge(X, X), labeled(X)
</text>
<text text-anchor="start" x="681.12" y="-302.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
keep left rows whose [X] is in right
</text>
<text text-anchor="start" x="681.12" y="-273.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
cols: [X]
</text>
</g>
<!-- self_loops&#45;&gt;q1 -->
<g id="edge5" class="edge">
<title>self_loops&#45;&gt;q1</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2"
d="M468.18,-513.59C502.81,-498.43 543.88,-479.17 579.38,-459 616.82,-437.72 656.18,-411.56 690.18,-387.64"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="692,-390.64 698.14,-382.01 687.96,-384.93 692,-390.64"/>
<text text-anchor="middle" x="607.38" y="-450.4" font-family="Helvetica,Arial,sans-serif" font-size="9.00"
fill="#555555">left
</text>
</g>
<!-- q2 -->
<g id="node8" class="node">
<title>q2</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5"
d="M896,-207.62C896,-207.62 671,-207.62 671,-207.62 665,-207.62 659,-201.62 659,-195.62 659,-195.62 659,-96.38 659,-96.38 659,-90.38 665,-84.38 671,-84.38 671,-84.38 896,-84.38 896,-84.38 902,-84.38 908,-90.38 908,-96.38 908,-96.38 908,-195.62 908,-195.62 908,-201.62 902,-207.62 896,-207.62"/>
<text text-anchor="start" x="731.75" y="-187.32" font-family="Helvetica,Arial,sans-serif" font-weight="bold"
font-size="14.00">Q2: natural_join
</text>
<text text-anchor="start" x="671" y="-158.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
edge(X, Y), labeled(Y)
</text>
<text text-anchor="start" x="671" y="-129.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
emit left ++ (right \ shared) per match
</text>
<text text-anchor="start" x="671" y="-100.08" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
cols: [X, Y]
</text>
</g>
<!-- edge_xy&#45;&gt;q2 -->
<g id="edge7" class="edge">
<title>edge_xy&#45;&gt;q2</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2"
d="M468.53,-363.61C517.02,-354.43 577.64,-335.21 616.38,-295 636.66,-273.94 617.27,-254.97 635.38,-232 639.88,-226.28 644.88,-220.87 650.24,-215.75"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="652.47,-218.45 657.58,-209.17 647.79,-213.24 652.47,-218.45"/>
<text text-anchor="middle" x="607.38" y="-312.83" font-family="Helvetica,Arial,sans-serif" font-size="9.00"
fill="#555555">left
</text>
</g>
<!-- labeled_x&#45;&gt;q1 -->
<g id="edge6" class="edge">
<title>labeled_x&#45;&gt;q1</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2"
d="M448.17,-228.1C493.59,-240.3 559.11,-257.94 616.38,-273.5 629.81,-277.15 643.85,-280.98 657.84,-284.8"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="656.71,-288.12 667.27,-287.38 658.55,-281.36 656.71,-288.12"/>
<text text-anchor="middle" x="607.38" y="-278.45" font-family="Helvetica,Arial,sans-serif" font-size="9.00"
fill="#555555">right
</text>
</g>
<!-- labeled_y&#45;&gt;q2 -->
<g id="edge8" class="edge">
<title>labeled_y&#45;&gt;q2</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2"
d="M448.26,-80.11C500.19,-90.35 579.3,-105.95 647.52,-119.39"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="646.54,-122.77 657.03,-121.27 647.89,-115.9 646.54,-122.77"/>
<text text-anchor="middle" x="607.38" y="-117.06" font-family="Helvetica,Arial,sans-serif" font-size="9.00"
fill="#555555">right
</text>
</g>
<!-- q1_out -->
<g id="node9" class="node">
<title>q1_out</title>
<path fill="#eceff1" stroke="#607d8b" stroke-width="1.5"
d="M1125.12,-355.12C1125.12,-355.12 1020.12,-355.12 1020.12,-355.12 1014.12,-355.12 1008.12,-349.12 1008.12,-343.12 1008.12,-343.12 1008.12,-272.88 1008.12,-272.88 1008.12,-266.88 1014.12,-260.88 1020.12,-260.88 1020.12,-260.88 1125.12,-260.88 1125.12,-260.88 1131.12,-260.88 1137.12,-266.88 1137.12,-272.88 1137.12,-272.88 1137.12,-343.12 1137.12,-343.12 1137.12,-349.12 1131.12,-355.12 1125.12,-355.12"/>
<text text-anchor="start" x="1043" y="-334.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold"
font-size="14.00">Q1 result
</text>
<text text-anchor="start" x="1020.12" y="-305.57" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">labeled self&#45;loops
</text>
<text text-anchor="start" x="1020.12" y="-276.57" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">cols: [X]
</text>
</g>
<!-- q1&#45;&gt;q1_out -->
<g id="edge9" class="edge">
<title>q1&#45;&gt;q1_out</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2"
d="M897.98,-314.65C930.91,-313.39 966.06,-312.04 996.06,-310.9"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2"
points="996.04,-314.4 1005.9,-310.52 995.77,-307.4 996.04,-314.4"/>
</g>
<!-- q2_out -->
<g id="node10" class="node">
<title>q2_out</title>
<path fill="#eceff1" stroke="#607d8b" stroke-width="1.5"
d="M1147.62,-211.12C1147.62,-211.12 997.62,-211.12 997.62,-211.12 991.62,-211.12 985.62,-205.12 985.62,-199.12 985.62,-199.12 985.62,-128.88 985.62,-128.88 985.62,-122.88 991.62,-116.88 997.62,-116.88 997.62,-116.88 1147.62,-116.88 1147.62,-116.88 1153.62,-116.88 1159.62,-122.88 1159.62,-128.88 1159.62,-128.88 1159.62,-199.12 1159.62,-199.12 1159.62,-205.12 1153.62,-211.12 1147.62,-211.12"/>
<text text-anchor="start" x="1043" y="-190.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold"
font-size="14.00">Q2 result
</text>
<text text-anchor="start" x="997.62" y="-161.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
edges into labeled nodes
</text>
<text text-anchor="start" x="997.62" y="-132.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
cols: [X, Y]
</text>
</g>
<!-- q2&#45;&gt;q2_out -->
<g id="edge10" class="edge">
<title>q2&#45;&gt;q2_out</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2"
d="M908.35,-153.76C930.25,-155.14 952.77,-156.55 973.83,-157.87"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2"
points="973.35,-161.35 983.55,-158.48 973.79,-154.36 973.35,-161.35"/>
</g>
</g>
</svg>