227 lines
19 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
2026-06-05 11:31:18 +02:00
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 12.2.1 (0)
-->
<!-- Title: StorageWorkflow Pages: 1 -->
<svg width="2196pt" height="573pt"
2026-06-05 11:31:18 +02:00
viewBox="0.00 0.00 2195.75 573.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 569)">
<title>StorageWorkflow</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-569 2191.75,-569 2191.75,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_inputs</title>
<polygon fill="white" stroke="#888888" stroke-dasharray="5,2" points="23.5,-254 23.5,-557 211.75,-557 211.75,-254 23.5,-254"/>
<text text-anchor="middle" x="117.62" y="-539.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" fill="#555555">Inputs</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_setup</title>
<polygon fill="white" stroke="#9c27b0" stroke-dasharray="5,2" points="8,-65 8,-246 524.75,-246 524.75,-65 8,-65"/>
<text text-anchor="middle" x="266.38" y="-228.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" fill="#7b1fa2">Setup &#160;(open backend, declare relations)</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_write</title>
<polygon fill="white" stroke="#4caf50" stroke-dasharray="5,2" points="563.75,-323 563.75,-532 1882.5,-532 1882.5,-323 563.75,-323"/>
<text text-anchor="middle" x="1223.12" y="-514.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" fill="#388e3c">Write &#160;(atomic batch via Transaction)</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_read</title>
<polygon fill="white" stroke="#ff9800" stroke-dasharray="5,2" points="1568.25,-8 1568.25,-315 1841.75,-315 1841.75,-8 1568.25,-8"/>
<text text-anchor="middle" x="1705" y="-297.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" fill="#f57c00">Read</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_output</title>
<polygon fill="white" stroke="#888888" stroke-dasharray="5,2" points="1965.25,-117 1965.25,-306 2179.75,-306 2179.75,-117 1965.25,-117"/>
<text text-anchor="middle" x="2072.5" y="-288.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" fill="#555555">Output</text>
</g>
<!-- schema -->
<g id="node1" class="node">
<title>schema</title>
<path fill="#e8f4fd" stroke="#2196f3" stroke-width="1.5" d="M181.75,-366.12C181.75,-366.12 53.5,-366.12 53.5,-366.12 47.5,-366.12 41.5,-360.12 41.5,-354.12 41.5,-354.12 41.5,-283.88 41.5,-283.88 41.5,-277.88 47.5,-271.88 53.5,-271.88 53.5,-271.88 181.75,-271.88 181.75,-271.88 187.75,-271.88 193.75,-277.88 193.75,-283.88 193.75,-283.88 193.75,-354.12 193.75,-354.12 193.75,-360.12 187.75,-366.12 181.75,-366.12"/>
<text text-anchor="start" x="91.38" y="-345.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold" font-size="14.00">Schema</text>
<text text-anchor="start" x="53.5" y="-316.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• relation name</text>
<text text-anchor="start" x="53.5" y="-287.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• arity (column count)</text>
</g>
<!-- create_relation -->
<g id="node4" class="node">
<title>create_relation</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5" d="M498.75,-184C498.75,-184 292.25,-184 292.25,-184 286.25,-184 280.25,-178 280.25,-172 280.25,-172 280.25,-160 280.25,-160 280.25,-154 286.25,-148 292.25,-148 292.25,-148 498.75,-148 498.75,-148 504.75,-148 510.75,-154 510.75,-160 510.75,-160 510.75,-172 510.75,-172 510.75,-178 504.75,-184 498.75,-184"/>
<text text-anchor="middle" x="395.5" y="-163.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00">storage.create_relation(name, arity)</text>
</g>
<!-- schema&#45;&gt;create_relation -->
<g id="edge1" class="edge">
<title>schema&#45;&gt;create_relation</title>
<path fill="none" stroke="#2196f3" stroke-width="1.2" d="M194.01,-277.19C244.45,-249.22 309.06,-213.38 351.1,-190.07"/>
<polygon fill="#2196f3" stroke="#2196f3" stroke-width="1.2" points="352.64,-193.22 359.69,-185.31 349.24,-187.1 352.64,-193.22"/>
</g>
<!-- row_data -->
<g id="node2" class="node">
<title>row_data</title>
<path fill="#e8f4fd" stroke="#2196f3" stroke-width="1.5" d="M178.75,-510.12C178.75,-510.12 56.5,-510.12 56.5,-510.12 50.5,-510.12 44.5,-504.12 44.5,-498.12 44.5,-498.12 44.5,-427.88 44.5,-427.88 44.5,-421.88 50.5,-415.88 56.5,-415.88 56.5,-415.88 178.75,-415.88 178.75,-415.88 184.75,-415.88 190.75,-421.88 190.75,-427.88 190.75,-427.88 190.75,-498.12 190.75,-498.12 190.75,-504.12 184.75,-510.12 178.75,-510.12"/>
<text text-anchor="start" x="86.5" y="-489.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold" font-size="14.00">Row Data</text>
<text text-anchor="start" x="56.5" y="-460.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• Vec&lt;Value&gt;</text>
<text text-anchor="start" x="56.5" y="-431.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• Int / Str / Id(RowId)</text>
</g>
<!-- tx_ops -->
<g id="node6" class="node">
<title>tx_ops</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5" d="M1020.75,-474.62C1020.75,-474.62 824.25,-474.62 824.25,-474.62 818.25,-474.62 812.25,-468.62 812.25,-462.62 812.25,-462.62 812.25,-363.38 812.25,-363.38 812.25,-357.38 818.25,-351.38 824.25,-351.38 824.25,-351.38 1020.75,-351.38 1020.75,-351.38 1026.75,-351.38 1032.75,-357.38 1032.75,-363.38 1032.75,-363.38 1032.75,-462.62 1032.75,-462.62 1032.75,-468.62 1026.75,-474.62 1020.75,-474.62"/>
<text text-anchor="start" x="862.88" y="-454.32" font-family="Helvetica,Arial,sans-serif" font-weight="bold" font-size="14.00">tx.insert / tx.delete</text>
<text text-anchor="start" x="824.25" y="-425.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• insert yields pending RowId</text>
<text text-anchor="start" x="824.25" y="-396.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• pending RowIds reused as FKs</text>
<text text-anchor="start" x="824.25" y="-367.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• delete by RowId</text>
</g>
<!-- row_data&#45;&gt;tx_ops -->
<g id="edge5" class="edge">
<title>row_data&#45;&gt;tx_ops</title>
<path fill="none" stroke="#2196f3" stroke-width="1.2" stroke-dasharray="5,2" d="M190.94,-458.5C328.87,-449.91 630.86,-431.1 800.21,-420.55"/>
<polygon fill="#2196f3" stroke="#2196f3" stroke-width="1.2" points="800.34,-424.05 810.11,-419.94 799.91,-417.07 800.34,-424.05"/>
</g>
<!-- open_backend -->
<g id="node3" class="node">
<title>open_backend</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5" d="M201.25,-202.62C201.25,-202.62 34,-202.62 34,-202.62 28,-202.62 22,-196.62 22,-190.62 22,-190.62 22,-91.38 22,-91.38 22,-85.38 28,-79.38 34,-79.38 34,-79.38 201.25,-79.38 201.25,-79.38 207.25,-79.38 213.25,-85.38 213.25,-91.38 213.25,-91.38 213.25,-190.62 213.25,-190.62 213.25,-196.62 207.25,-202.62 201.25,-202.62"/>
<text text-anchor="start" x="70" y="-182.32" font-family="Helvetica,Arial,sans-serif" font-weight="bold" font-size="14.00">Open Backend</text>
<text text-anchor="start" x="34" y="-153.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">MemoryStorage::new() /</text>
<text text-anchor="start" x="34" y="-124.08" font-family="Helvetica,Arial,sans-serif" font-size="14.00">SqliteStorage::open(path) /</text>
<text text-anchor="start" x="34" y="-95.08" font-family="Helvetica,Arial,sans-serif" font-size="14.00">FjallStorage::open(path) / ...</text>
</g>
<!-- open_backend&#45;&gt;create_relation -->
<g id="edge2" class="edge">
<title>open_backend&#45;&gt;create_relation</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2" d="M213.57,-149.6C231.17,-151.2 249.8,-152.89 268.16,-154.55"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2" points="267.78,-158.03 278.05,-155.45 268.41,-151.06 267.78,-158.03"/>
</g>
<!-- begin_tx -->
<g id="node5" class="node">
<title>begin_tx</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5" d="M733.25,-387C733.25,-387 589.75,-387 589.75,-387 583.75,-387 577.75,-381 577.75,-375 577.75,-375 577.75,-349 577.75,-349 577.75,-343 583.75,-337 589.75,-337 589.75,-337 733.25,-337 733.25,-337 739.25,-337 745.25,-343 745.25,-349 745.25,-349 745.25,-375 745.25,-375 745.25,-381 739.25,-387 733.25,-387"/>
<text text-anchor="middle" x="661.5" y="-369.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">storage.transaction()</text>
<text text-anchor="middle" x="661.5" y="-348.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">&#45;&gt; Box&lt;dyn Transaction&gt;</text>
</g>
<!-- create_relation&#45;&gt;begin_tx -->
<g id="edge3" class="edge">
<title>create_relation&#45;&gt;begin_tx</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" d="M416.8,-184.23C444.61,-208.87 496.48,-253.65 543.75,-288 564.01,-302.72 587.16,-317.74 607.47,-330.37"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2" points="605.6,-333.32 615.94,-335.59 609.27,-327.37 605.6,-333.32"/>
</g>
<!-- scan_iter -->
<g id="node9" class="node">
<title>scan_iter</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5" d="M1774.5,-272C1774.5,-272 1635.5,-272 1635.5,-272 1629.5,-272 1623.5,-266 1623.5,-260 1623.5,-260 1623.5,-234 1623.5,-234 1623.5,-228 1629.5,-222 1635.5,-222 1635.5,-222 1774.5,-222 1774.5,-222 1780.5,-222 1786.5,-228 1786.5,-234 1786.5,-234 1786.5,-260 1786.5,-260 1786.5,-266 1780.5,-272 1774.5,-272"/>
<text text-anchor="middle" x="1705" y="-254.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">storage.scan_iter(name)</text>
<text text-anchor="middle" x="1705" y="-233.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">&#45;&gt; RowStream</text>
</g>
<!-- create_relation&#45;&gt;scan_iter -->
<g id="edge8" class="edge">
<title>create_relation&#45;&gt;scan_iter</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2" stroke-dasharray="5,2" d="M430.83,-184.43C480.17,-209.16 574.65,-250 660.5,-250 660.5,-250 660.5,-250 1261.62,-250 1382.54,-250 1522.03,-248.87 1611.53,-247.99"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2" points="1611.5,-251.49 1621.46,-247.89 1611.43,-244.49 1611.5,-251.49"/>
</g>
<!-- scan_where -->
<g id="node10" class="node">
<title>scan_where</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5" d="M1815.75,-72C1815.75,-72 1594.25,-72 1594.25,-72 1588.25,-72 1582.25,-66 1582.25,-60 1582.25,-60 1582.25,-34 1582.25,-34 1582.25,-28 1588.25,-22 1594.25,-22 1594.25,-22 1815.75,-22 1815.75,-22 1821.75,-22 1827.75,-28 1827.75,-34 1827.75,-34 1827.75,-60 1827.75,-60 1827.75,-66 1821.75,-72 1815.75,-72"/>
<text text-anchor="middle" x="1705" y="-54.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">storage.scan_where(name, col, value)</text>
<text text-anchor="middle" x="1705" y="-33.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">&#45;&gt; RowStream &#160;(filtered)</text>
</g>
<!-- create_relation&#45;&gt;scan_where -->
<g id="edge9" class="edge">
<title>create_relation&#45;&gt;scan_where</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2" stroke-dasharray="5,2" d="M419.28,-147.51C463.15,-113.85 563.58,-46 660.5,-46 660.5,-46 660.5,-46 1261.62,-46 1365.26,-46 1482.56,-46.28 1570.31,-46.54"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2" points="1570.12,-50.04 1580.13,-46.57 1570.15,-43.04 1570.12,-50.04"/>
</g>
<!-- scan_full -->
<g id="node11" class="node">
<title>scan_full</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5" d="M1792.5,-172C1792.5,-172 1617.5,-172 1617.5,-172 1611.5,-172 1605.5,-166 1605.5,-160 1605.5,-160 1605.5,-134 1605.5,-134 1605.5,-128 1611.5,-122 1617.5,-122 1617.5,-122 1792.5,-122 1792.5,-122 1798.5,-122 1804.5,-128 1804.5,-134 1804.5,-134 1804.5,-160 1804.5,-160 1804.5,-166 1798.5,-172 1792.5,-172"/>
<text text-anchor="middle" x="1705" y="-154.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">storage.scan(name)</text>
<text text-anchor="middle" x="1705" y="-133.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">&#45;&gt; Vec&lt;(RowId, Vec&lt;Value&gt;)&gt;</text>
</g>
<!-- create_relation&#45;&gt;scan_full -->
<g id="edge10" class="edge">
<title>create_relation&#45;&gt;scan_full</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2" stroke-dasharray="5,2" d="M511.06,-154.78C557.41,-151.13 611.46,-148 660.5,-148 660.5,-148 660.5,-148 1261.62,-148 1374.63,-148 1503.88,-147.67 1593.36,-147.39"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2" points="1593.37,-150.89 1603.35,-147.36 1593.34,-143.89 1593.37,-150.89"/>
</g>
<!-- begin_tx&#45;&gt;tx_ops -->
<g id="edge4" class="edge">
<title>begin_tx&#45;&gt;tx_ops</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" d="M745.52,-378.35C763.04,-381.8 781.87,-385.51 800.47,-389.17"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2" points="799.73,-392.59 810.22,-391.09 801.09,-385.72 799.73,-392.59"/>
</g>
<!-- commit -->
<g id="node7" class="node">
<title>commit</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5" d="M1409.5,-489.12C1409.5,-489.12 1111.75,-489.12 1111.75,-489.12 1105.75,-489.12 1099.75,-483.12 1099.75,-477.12 1099.75,-477.12 1099.75,-348.88 1099.75,-348.88 1099.75,-342.88 1105.75,-336.88 1111.75,-336.88 1111.75,-336.88 1409.5,-336.88 1409.5,-336.88 1415.5,-336.88 1421.5,-342.88 1421.5,-348.88 1421.5,-348.88 1421.5,-477.12 1421.5,-477.12 1421.5,-483.12 1415.5,-489.12 1409.5,-489.12"/>
<text text-anchor="start" x="1223.5" y="-468.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold" font-size="14.00">tx.commit()</text>
<text text-anchor="start" x="1111.75" y="-439.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• native commit (LMDB, redb, SQLite, geomerge)</text>
<text text-anchor="start" x="1111.75" y="-410.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• buffered apply (memory, fjall)</text>
<text text-anchor="start" x="1111.75" y="-381.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• law validation (geomerge)</text>
<text text-anchor="start" x="1111.75" y="-352.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• yields CommittedTx</text>
</g>
<!-- tx_ops&#45;&gt;commit -->
<g id="edge6" class="edge">
<title>tx_ops&#45;&gt;commit</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" d="M1033.09,-413C1050.7,-413 1069.29,-413 1087.94,-413"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2" points="1087.74,-416.5 1097.74,-413 1087.74,-409.5 1087.74,-416.5"/>
</g>
<!-- resolve_ids -->
<g id="node8" class="node">
<title>resolve_ids</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5" d="M1856.5,-438.12C1856.5,-438.12 1553.5,-438.12 1553.5,-438.12 1547.5,-438.12 1541.5,-432.12 1541.5,-426.12 1541.5,-426.12 1541.5,-355.88 1541.5,-355.88 1541.5,-349.88 1547.5,-343.88 1553.5,-343.88 1553.5,-343.88 1856.5,-343.88 1856.5,-343.88 1862.5,-343.88 1868.5,-349.88 1868.5,-355.88 1868.5,-355.88 1868.5,-426.12 1868.5,-426.12 1868.5,-432.12 1862.5,-438.12 1856.5,-438.12"/>
<text text-anchor="start" x="1633" y="-417.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold" font-size="14.00">CommittedTx::resolve</text>
<text text-anchor="start" x="1553.5" y="-388.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• KV: pending == real</text>
<text text-anchor="start" x="1553.5" y="-359.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• geomerge: pending counter → (commit, counter)</text>
</g>
<!-- commit&#45;&gt;resolve_ids -->
<g id="edge7" class="edge">
<title>commit&#45;&gt;resolve_ids</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" d="M1421.96,-405.03C1456.99,-403.28 1494.23,-401.43 1529.77,-399.66"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2" points="1529.61,-403.18 1539.43,-399.18 1529.27,-396.19 1529.61,-403.18"/>
<text text-anchor="middle" x="1481.5" y="-408.27" font-family="Helvetica,Arial,sans-serif" font-size="9.00" fill="#555555">CommittedTx</text>
</g>
<!-- commit&#45;&gt;scan_iter -->
<g id="edge11" class="edge">
<title>commit&#45;&gt;scan_iter</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" stroke-dasharray="5,2" d="M1421.96,-352.84C1491.15,-326.87 1568.97,-297.67 1625.3,-276.53"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2" points="1626.44,-279.84 1634.58,-273.05 1623.98,-273.29 1626.44,-279.84"/>
<text text-anchor="middle" x="1481.5" y="-344.89" font-family="Helvetica,Arial,sans-serif" font-size="9.00" fill="#555555">after commit</text>
</g>
<!-- rows_out -->
<g id="node12" class="node">
<title>rows_out</title>
<path fill="#eceff1" stroke="#607d8b" stroke-width="1.5" d="M2149.75,-258.62C2149.75,-258.62 1995.25,-258.62 1995.25,-258.62 1989.25,-258.62 1983.25,-252.62 1983.25,-246.62 1983.25,-246.62 1983.25,-147.38 1983.25,-147.38 1983.25,-141.38 1989.25,-135.38 1995.25,-135.38 1995.25,-135.38 2149.75,-135.38 2149.75,-135.38 2155.75,-135.38 2161.75,-141.38 2161.75,-147.38 2161.75,-147.38 2161.75,-246.62 2161.75,-246.62 2161.75,-252.62 2155.75,-258.62 2149.75,-258.62"/>
<text text-anchor="start" x="2054.5" y="-238.32" font-family="Helvetica,Arial,sans-serif" font-weight="bold" font-size="14.00">Rows</text>
<text text-anchor="start" x="1995.25" y="-209.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• (RowId, Vec&lt;Value&gt;)</text>
<text text-anchor="start" x="1995.25" y="-180.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• consumed by query&#45;ops</text>
<text text-anchor="start" x="1995.25" y="-151.07" font-family="Helvetica,Arial,sans-serif" font-size="14.00"> &#160;via scan_as_table</text>
</g>
<!-- resolve_ids&#45;&gt;rows_out -->
<g id="edge15" class="edge">
<title>resolve_ids&#45;&gt;rows_out</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" stroke-dasharray="5,2" d="M1847.09,-343.54C1859.24,-338.34 1871.2,-332.82 1882.5,-327 1916.36,-309.58 1951.29,-287.04 1981.77,-265.63"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2" points="1983.46,-268.72 1989.6,-260.08 1979.41,-263.01 1983.46,-268.72"/>
<text text-anchor="middle" x="1925.88" y="-320.11" font-family="Helvetica,Arial,sans-serif" font-size="9.00" fill="#555555">real RowIds</text>
</g>
<!-- scan_iter&#45;&gt;rows_out -->
<g id="edge12" class="edge">
<title>scan_iter&#45;&gt;rows_out</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2" d="M1786.66,-235.97C1841.16,-228.51 1913.48,-218.62 1971.62,-210.66"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2" points="1971.81,-214.17 1981.25,-209.35 1970.86,-207.23 1971.81,-214.17"/>
</g>
<!-- scan_where&#45;&gt;rows_out -->
<g id="edge13" class="edge">
<title>scan_where&#45;&gt;rows_out</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2" d="M1809.89,-72.49C1834.05,-79.5 1859.44,-87.75 1882.5,-97 1912.57,-109.06 1944.11,-124.52 1972.62,-139.66"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2" points="1970.91,-142.71 1981.37,-144.36 1974.22,-136.55 1970.91,-142.71"/>
</g>
<!-- scan_full&#45;&gt;rows_out -->
<g id="edge14" class="edge">
<title>scan_full&#45;&gt;rows_out</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2" d="M1804.91,-160.53C1856.5,-167.59 1919.48,-176.2 1971.27,-183.29"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2" points="1970.63,-186.73 1981.02,-184.62 1971.58,-179.8 1970.63,-186.73"/>
</g>
</g>
</svg>