2026-06-03 11:48:33 +02:00
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
< !DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
2026-06-03 12:02:35 +02:00
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
2026-06-03 11:48:33 +02:00
<!-- Generated by graphviz version 12.2.1 (0)
-->
<!-- Title: QueryOpsHandPlan Pages: 1 -->
2026-06-03 12:02:35 +02:00
<svg width= "1482pt" height= "471pt"
viewBox="0.00 0.00 1481.75 471.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id= "graph0" class= "graph" transform= "scale(1 1) rotate(0) translate(4 467)" >
<title > QueryOpsHandPlan</title>
<polygon fill= "white" stroke= "none" points= "-4,4 -4,-467 1477.75,-467 1477.75,4 -4,4" />
<g id= "clust1" class= "cluster" >
<title > cluster_inputs</title>
<polygon fill= "white" stroke= "#888888" stroke-dasharray= "5,2" points= "8,-8 8,-455 198.5,-455 198.5,-8 8,-8" />
<text text-anchor= "middle" x= "103.25" y= "-437.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= "233.5,-12 233.5,-451 609.5,-451 609.5,-12 233.5,-12" />
<text text-anchor= "middle" x= "421.5" y= "-433.7" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" fill= "#7b1fa2" > Atom Scans   (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= "665.5,-141 665.5,-322 1106,-322 1106,-141 665.5,-141" />
<text text-anchor= "middle" x= "885.75" y= "-304.7" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" fill= "#388e3c" > Joins   (shared cols = matching column names)</text>
</g>
<g id= "clust4" class= "cluster" >
<title > cluster_output</title>
<polygon fill= "white" stroke= "#888888" stroke-dasharray= "5,2" points= "1141,-152 1141,-311 1465.75,-311 1465.75,-152 1141,-152" />
<text text-anchor= "middle" x= "1303.38" y= "-293.7" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" fill= "#555555" > Output (binding relation)</text>
</g>
<!-- author_table -->
<g id= "node1" class= "node" >
<title > author_table</title>
<path fill= "#e8f4fd" stroke= "#2196f3" stroke-width= "1.5" d= "M165.88,-408.12C165.88,-408.12 40.62,-408.12 40.62,-408.12 34.62,-408.12 28.62,-402.12 28.62,-396.12 28.62,-396.12 28.62,-325.88 28.62,-325.88 28.62,-319.88 34.62,-313.88 40.62,-313.88 40.62,-313.88 165.88,-313.88 165.88,-313.88 171.88,-313.88 177.88,-319.88 177.88,-325.88 177.88,-325.88 177.88,-396.12 177.88,-396.12 177.88,-402.12 171.88,-408.12 165.88,-408.12" />
<text text-anchor= "start" x= "60.88" y= "-387.82" font-family= "Helvetica,Arial,sans-serif" font-weight= "bold" font-size= "14.00" > Table: author</text>
<text text-anchor= "start" x= "40.62" y= "-358.57" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > • arity 2</text>
<text text-anchor= "start" x= "40.62" y= "-329.57" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > • rows: (name, book)</text>
</g>
<!-- author_rel -->
<g id= "node4" class= "node" >
<title > author_rel</title>
<path fill= "#f3e5f5" stroke= "#9c27b0" stroke-width= "1.5" d= "M509.12,-408.12C509.12,-408.12 332.88,-408.12 332.88,-408.12 326.88,-408.12 320.88,-402.12 320.88,-396.12 320.88,-396.12 320.88,-325.88 320.88,-325.88 320.88,-319.88 326.88,-313.88 332.88,-313.88 332.88,-313.88 509.12,-313.88 509.12,-313.88 515.12,-313.88 521.12,-319.88 521.12,-325.88 521.12,-325.88 521.12,-396.12 521.12,-396.12 521.12,-402.12 515.12,-408.12 509.12,-408.12" />
<text text-anchor= "start" x= "388" y= "-387.82" font-family= "Helvetica,Arial,sans-serif" font-weight= "bold" font-size= "14.00" > author_rel</text>
<text text-anchor= "start" x= "332.88" y= "-358.57" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > pattern: [Var name, Var book]</text>
<text text-anchor= "start" x= "332.88" y= "-329.57" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > cols: [name, book]</text>
</g>
<!-- author_table->author_rel -->
<g id= "edge1" class= "edge" >
<title > author_table- > author_rel</title>
<path fill= "none" stroke= "#2196f3" stroke-width= "1.2" d= "M178.28,-361C217.1,-361 265.45,-361 308.68,-361" />
<polygon fill= "#2196f3" stroke= "#2196f3" stroke-width= "1.2" points= "308.62,-364.5 318.62,-361 308.62,-357.5 308.62,-364.5" />
</g>
<!-- bestseller_table -->
<g id= "node2" class= "node" >
<title > bestseller_table</title>
<path fill= "#e8f4fd" stroke= "#2196f3" stroke-width= "1.5" d= "M156.12,-264.12C156.12,-264.12 50.38,-264.12 50.38,-264.12 44.38,-264.12 38.38,-258.12 38.38,-252.12 38.38,-252.12 38.38,-181.88 38.38,-181.88 38.38,-175.88 44.38,-169.88 50.38,-169.88 50.38,-169.88 156.12,-169.88 156.12,-169.88 162.12,-169.88 168.12,-175.88 168.12,-181.88 168.12,-181.88 168.12,-252.12 168.12,-252.12 168.12,-258.12 162.12,-264.12 156.12,-264.12" />
<text text-anchor= "start" x= "50.38" y= "-243.82" font-family= "Helvetica,Arial,sans-serif" font-weight= "bold" font-size= "14.00" > Table: bestseller</text>
<text text-anchor= "start" x= "50.38" y= "-214.57" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > • arity 1</text>
<text text-anchor= "start" x= "50.38" y= "-185.57" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > • rows: (book)</text>
</g>
<!-- bestseller_rel -->
<g id= "node5" class= "node" >
<title > bestseller_rel</title>
<path fill= "#f3e5f5" stroke= "#9c27b0" stroke-width= "1.5" d= "M476.12,-264.12C476.12,-264.12 365.88,-264.12 365.88,-264.12 359.88,-264.12 353.88,-258.12 353.88,-252.12 353.88,-252.12 353.88,-181.88 353.88,-181.88 353.88,-175.88 359.88,-169.88 365.88,-169.88 365.88,-169.88 476.12,-169.88 476.12,-169.88 482.12,-169.88 488.12,-175.88 488.12,-181.88 488.12,-181.88 488.12,-252.12 488.12,-252.12 488.12,-258.12 482.12,-264.12 476.12,-264.12" />
<text text-anchor= "start" x= "377.5" y= "-243.82" font-family= "Helvetica,Arial,sans-serif" font-weight= "bold" font-size= "14.00" > bestseller_rel</text>
<text text-anchor= "start" x= "365.88" y= "-214.57" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > pattern: [Var book]</text>
<text text-anchor= "start" x= "365.88" y= "-185.57" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > cols: [book]</text>
</g>
<!-- bestseller_table->bestseller_rel -->
<g id= "edge2" class= "edge" >
<title > bestseller_table- > bestseller_rel</title>
<path fill= "none" stroke= "#2196f3" stroke-width= "1.2" d= "M168.53,-217C218.65,-217 288.47,-217 341.83,-217" />
<polygon fill= "#2196f3" stroke= "#2196f3" stroke-width= "1.2" points= "341.82,-220.5 351.82,-217 341.82,-213.5 341.82,-220.5" />
</g>
<!-- price_table -->
<g id= "node3" class= "node" >
<title > price_table</title>
<path fill= "#e8f4fd" stroke= "#2196f3" stroke-width= "1.5" d= "M168.5,-120.12C168.5,-120.12 38,-120.12 38,-120.12 32,-120.12 26,-114.12 26,-108.12 26,-108.12 26,-37.88 26,-37.88 26,-31.88 32,-25.88 38,-25.88 38,-25.88 168.5,-25.88 168.5,-25.88 174.5,-25.88 180.5,-31.88 180.5,-37.88 180.5,-37.88 180.5,-108.12 180.5,-108.12 180.5,-114.12 174.5,-120.12 168.5,-120.12" />
<text text-anchor= "start" x= "65.75" y= "-99.83" font-family= "Helvetica,Arial,sans-serif" font-weight= "bold" font-size= "14.00" > Table: price</text>
<text text-anchor= "start" x= "38" y= "-70.58" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > • arity 2</text>
<text text-anchor= "start" x= "38" y= "-41.58" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > • rows: (book, dollars)</text>
</g>
<!-- price_rel -->
<g id= "node6" class= "node" >
<title > price_rel</title>
<path fill= "#f3e5f5" stroke= "#9c27b0" stroke-width= "1.5" d= "M511.75,-120.12C511.75,-120.12 330.25,-120.12 330.25,-120.12 324.25,-120.12 318.25,-114.12 318.25,-108.12 318.25,-108.12 318.25,-37.88 318.25,-37.88 318.25,-31.88 324.25,-25.88 330.25,-25.88 330.25,-25.88 511.75,-25.88 511.75,-25.88 517.75,-25.88 523.75,-31.88 523.75,-37.88 523.75,-37.88 523.75,-108.12 523.75,-108.12 523.75,-114.12 517.75,-120.12 511.75,-120.12" />
<text text-anchor= "start" x= "392.88" y= "-99.83" font-family= "Helvetica,Arial,sans-serif" font-weight= "bold" font-size= "14.00" > price_rel</text>
<text text-anchor= "start" x= "330.25" y= "-70.58" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > pattern: [Var book, Var dollars]</text>
<text text-anchor= "start" x= "330.25" y= "-41.58" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > cols: [book, dollars]</text>
</g>
<!-- price_table->price_rel -->
<g id= "edge3" class= "edge" >
<title > price_table- > price_rel</title>
<path fill= "none" stroke= "#2196f3" stroke-width= "1.2" d= "M180.68,-73C218.39,-73 264.62,-73 306.37,-73" />
<polygon fill= "#2196f3" stroke= "#2196f3" stroke-width= "1.2" points= "306.2,-76.5 316.2,-73 306.2,-69.5 306.2,-76.5" />
</g>
<!-- semijoin_step -->
<g id= "node7" class= "node" >
<title > semijoin_step</title>
<path fill= "#e8f5e9" stroke= "#4caf50" stroke-width= "1.5" d= "M819.75,-278.62C819.75,-278.62 691.5,-278.62 691.5,-278.62 685.5,-278.62 679.5,-272.62 679.5,-266.62 679.5,-266.62 679.5,-167.38 679.5,-167.38 679.5,-161.38 685.5,-155.38 691.5,-155.38 691.5,-155.38 819.75,-155.38 819.75,-155.38 825.75,-155.38 831.75,-161.38 831.75,-167.38 831.75,-167.38 831.75,-266.62 831.75,-266.62 831.75,-272.62 825.75,-278.62 819.75,-278.62" />
<text text-anchor= "start" x= "727.88" y= "-258.32" font-family= "Helvetica,Arial,sans-serif" font-weight= "bold" font-size= "14.00" > semijoin</text>
<text text-anchor= "start" x= "691.5" y= "-229.07" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > authors of bestsellers</text>
<text text-anchor= "start" x= "691.5" y= "-200.07" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > shared: book</text>
<text text-anchor= "start" x= "691.5" y= "-171.07" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > cols: [name, book]</text>
</g>
<!-- author_rel->semijoin_step -->
<g id= "edge4" class= "edge" >
<title > author_rel- > semijoin_step</title>
<path fill= "none" stroke= "#9c27b0" stroke-width= "1.2" d= "M521.48,-324.79C550.11,-313.83 581.24,-301.4 609.5,-289 628.84,-280.51 649.32,-270.81 668.61,-261.33" />
<polygon fill= "#9c27b0" stroke= "#9c27b0" stroke-width= "1.2" points= "670.15,-264.48 677.56,-256.91 667.04,-258.2 670.15,-264.48" />
<text text-anchor= "middle" x= "637.5" y= "-284.9" font-family= "Helvetica,Arial,sans-serif" font-size= "9.00" fill= "#555555" > left</text>
</g>
<!-- bestseller_rel->semijoin_step -->
<g id= "edge5" class= "edge" >
<title > bestseller_rel- > semijoin_step</title>
<path fill= "none" stroke= "#9c27b0" stroke-width= "1.2" d= "M488.51,-217C539.93,-217 611.54,-217 667.53,-217" />
<polygon fill= "#9c27b0" stroke= "#9c27b0" stroke-width= "1.2" points= "667.41,-220.5 677.41,-217 667.41,-213.5 667.41,-220.5" />
<text text-anchor= "middle" x= "637.5" y= "-221.95" font-family= "Helvetica,Arial,sans-serif" font-size= "9.00" fill= "#555555" > right</text>
</g>
<!-- natural_join_step -->
<g id= "node8" class= "node" >
<title > natural_join_step</title>
<path fill= "#e8f5e9" stroke= "#4caf50" stroke-width= "1.5" d= "M1080,-278.62C1080,-278.62 922.5,-278.62 922.5,-278.62 916.5,-278.62 910.5,-272.62 910.5,-266.62 910.5,-266.62 910.5,-167.38 910.5,-167.38 910.5,-161.38 916.5,-155.38 922.5,-155.38 922.5,-155.38 1080,-155.38 1080,-155.38 1086,-155.38 1092,-161.38 1092,-167.38 1092,-167.38 1092,-266.62 1092,-266.62 1092,-272.62 1086,-278.62 1080,-278.62" />
<text text-anchor= "start" x= "963" y= "-258.32" font-family= "Helvetica,Arial,sans-serif" font-weight= "bold" font-size= "14.00" > natural_join</text>
<text text-anchor= "start" x= "922.5" y= "-229.07" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > attach each book' s price</text>
<text text-anchor= "start" x= "922.5" y= "-200.07" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > shared: book</text>
<text text-anchor= "start" x= "922.5" y= "-171.07" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > cols: [name, book, dollars]</text>
</g>
<!-- price_rel->natural_join_step -->
<g id= "edge7" class= "edge" >
<title > price_rel- > natural_join_step</title>
<path fill= "none" stroke= "#9c27b0" stroke-width= "1.2" d= "M523.91,-71.78C608.41,-73.58 730.63,-82.79 831.75,-116.5 855.71,-124.49 879.92,-136.28 902.24,-149" />
<polygon fill= "#9c27b0" stroke= "#9c27b0" stroke-width= "1.2" points= "900.38,-151.97 910.78,-153.98 903.91,-145.92 900.38,-151.97" />
<text text-anchor= "middle" x= "755.62" y= "-121.45" font-family= "Helvetica,Arial,sans-serif" font-size= "9.00" fill= "#555555" > right</text>
</g>
<!-- semijoin_step->natural_join_step -->
<g id= "edge6" class= "edge" >
<title > semijoin_step- > natural_join_step</title>
<path fill= "none" stroke= "#4caf50" stroke-width= "1.2" d= "M832.04,-217C853.1,-217 876.34,-217 898.65,-217" />
<polygon fill= "#4caf50" stroke= "#4caf50" stroke-width= "1.2" points= "898.4,-220.5 908.4,-217 898.4,-213.5 898.4,-220.5" />
<text text-anchor= "middle" x= "871.12" y= "-221.95" font-family= "Helvetica,Arial,sans-serif" font-size= "9.00" fill= "#555555" > left</text>
</g>
<!-- result -->
<g id= "node9" class= "node" >
<title > result</title>
<path fill= "#eceff1" stroke= "#607d8b" stroke-width= "1.5" d= "M1435.75,-264.12C1435.75,-264.12 1171,-264.12 1171,-264.12 1165,-264.12 1159,-258.12 1159,-252.12 1159,-252.12 1159,-181.88 1159,-181.88 1159,-175.88 1165,-169.88 1171,-169.88 1171,-169.88 1435.75,-169.88 1435.75,-169.88 1441.75,-169.88 1447.75,-175.88 1447.75,-181.88 1447.75,-181.88 1447.75,-252.12 1447.75,-252.12 1447.75,-258.12 1441.75,-264.12 1435.75,-264.12" />
<text text-anchor= "start" x= "1277.5" y= "-243.82" font-family= "Helvetica,Arial,sans-serif" font-weight= "bold" font-size= "14.00" > Q result</text>
<text text-anchor= "start" x= "1171" y= "-214.57" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > authors of bestsellers with each book' s price</text>
<text text-anchor= "start" x= "1171" y= "-185.57" font-family= "Helvetica,Arial,sans-serif" font-size= "14.00" > cols: [name, book, dollars]</text>
</g>
<!-- natural_join_step->result -->
<g id= "edge8" class= "edge" >
<title > natural_join_step- > result</title>
<path fill= "none" stroke= "#4caf50" stroke-width= "1.2" d= "M1092.3,-217C1109.6,-217 1128.17,-217 1146.86,-217" />
<polygon fill= "#4caf50" stroke= "#4caf50" stroke-width= "1.2" points= "1146.69,-220.5 1156.69,-217 1146.69,-213.5 1146.69,-220.5" />
</g>
</g>
2026-06-03 11:48:33 +02:00
</svg>