useful-notes/scratches/query-engine-broad.svg

398 lines
26 KiB
XML
Raw Normal View History

<?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: GeologQueryEngineBroad Pages: 1 -->
<svg width="2357pt" height="601pt"
viewBox="0.00 0.00 2357.00 601.00" xmlns="http://www.w3.org/2000/svg">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 597)">
<title>GeologQueryEngineBroad</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-597 2353,-597 2353,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_frontend</title>
<path fill="#fafafa" stroke="#666666"
d="M20,-59C20,-59 1383.75,-59 1383.75,-59 1389.75,-59 1395.75,-65 1395.75,-71 1395.75,-71 1395.75,-350 1395.75,-350 1395.75,-356 1389.75,-362 1383.75,-362 1383.75,-362 20,-362 20,-362 14,-362 8,-356 8,-350 8,-350 8,-71 8,-71 8,-65 14,-59 20,-59"/>
<text text-anchor="middle" x="701.88" y="-344.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#333333">Geolog Front End
</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_language</title>
<polygon fill="#fafafa" stroke="#9c27b0" stroke-dasharray="5,2"
points="28,-79 28,-186 1375.75,-186 1375.75,-79 28,-79"/>
<text text-anchor="middle" x="701.88" y="-168.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#7b1fa2">Language Pipeline
</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_tools</title>
<polygon fill="#fafafa" stroke="#4caf50" stroke-dasharray="5,2"
points="733,-206 733,-313 984,-313 984,-206 733,-206"/>
<text text-anchor="middle" x="858.5" y="-295.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#388e3c">Developer Tooling
</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_runtime</title>
<path fill="#fafafa" stroke="#666666"
d="M1466.5,-8C1466.5,-8 2087.25,-8 2087.25,-8 2093.25,-8 2099.25,-14 2099.25,-20 2099.25,-20 2099.25,-573 2099.25,-573 2099.25,-579 2093.25,-585 2087.25,-585 2087.25,-585 1466.5,-585 1466.5,-585 1460.5,-585 1454.5,-579 1454.5,-573 1454.5,-573 1454.5,-20 1454.5,-20 1454.5,-14 1460.5,-8 1466.5,-8"/>
<text text-anchor="middle" x="1776.88" y="-567.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#333333">Shared Runtime / Execution Layer
</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_engine</title>
<polygon fill="#fafafa" stroke="#4caf50" stroke-dasharray="5,2"
points="1474.5,-28 1474.5,-237 1917.5,-237 1917.5,-28 1474.5,-28"/>
<text text-anchor="middle" x="1696" y="-219.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#388e3c">IR Execution Engine
</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_adapters</title>
<polygon fill="#fafafa" stroke="#ff9800" stroke-dasharray="5,2"
points="1749.38,-257 1749.38,-536 2079.25,-536 2079.25,-257 1749.38,-257"/>
<text text-anchor="middle" x="1914.31" y="-518.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#f57c00">Backend Adapters
</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_backends</title>
<polygon fill="white" stroke="#888888" stroke-dasharray="5,2"
points="2123.25,-253 2123.25,-526 2341,-526 2341,-253 2123.25,-253"/>
<text text-anchor="middle" x="2232.12" y="-508.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#555555">Execution Targets
</text>
</g>
<!-- concrete -->
<g id="node1" class="node">
<title>concrete</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M145.75,-143C145.75,-143 54,-143 54,-143 48,-143 42,-137 42,-131 42,-131 42,-119 42,-119 42,-113 48,-107 54,-107 54,-107 145.75,-107 145.75,-107 151.75,-107 157.75,-113 157.75,-119 157.75,-119 157.75,-131 157.75,-131 157.75,-137 151.75,-143 145.75,-143"/>
<text text-anchor="middle" x="99.88" y="-122.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
Concrete Syntax
</text>
</g>
<!-- parser -->
<g id="node2" class="node">
<title>parser</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M268.5,-143C268.5,-143 236.75,-143 236.75,-143 230.75,-143 224.75,-137 224.75,-131 224.75,-131 224.75,-119 224.75,-119 224.75,-113 230.75,-107 236.75,-107 236.75,-107 268.5,-107 268.5,-107 274.5,-107 280.5,-113 280.5,-119 280.5,-119 280.5,-131 280.5,-131 280.5,-137 274.5,-143 268.5,-143"/>
<text text-anchor="middle" x="252.62" y="-122.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
Parser
</text>
</g>
<!-- concrete&#45;&gt;parser -->
<g id="edge1" class="edge">
<title>concrete&#45;&gt;parser</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2" d="M157.87,-125C176.25,-125 196.19,-125 212.93,-125"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="212.68,-128.5 222.68,-125 212.68,-121.5 212.68,-128.5"/>
</g>
<!-- abstract -->
<g id="node3" class="node">
<title>abstract</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M446.75,-143C446.75,-143 359.5,-143 359.5,-143 353.5,-143 347.5,-137 347.5,-131 347.5,-131 347.5,-119 347.5,-119 347.5,-113 353.5,-107 359.5,-107 359.5,-107 446.75,-107 446.75,-107 452.75,-107 458.75,-113 458.75,-119 458.75,-119 458.75,-131 458.75,-131 458.75,-137 452.75,-143 446.75,-143"/>
<text text-anchor="middle" x="403.12" y="-122.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
Abstract Syntax
</text>
</g>
<!-- parser&#45;&gt;abstract -->
<g id="edge2" class="edge">
<title>parser&#45;&gt;abstract</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2" d="M280.86,-125C296.26,-125 316.24,-125 335.52,-125"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="335.25,-128.5 345.25,-125 335.25,-121.5 335.25,-128.5"/>
</g>
<!-- lsp -->
<g id="node8" class="node">
<title>lsp</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5"
d="M958,-270C958,-270 759,-270 759,-270 753,-270 747,-264 747,-258 747,-258 747,-232 747,-232 747,-226 753,-220 759,-220 759,-220 958,-220 958,-220 964,-220 970,-226 970,-232 970,-232 970,-258 970,-258 970,-264 964,-270 958,-270"/>
<text text-anchor="middle" x="858.5" y="-252.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
LSP
</text>
<text text-anchor="middle" x="858.5" y="-231.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
(parsing + elaboration diagnostics)
</text>
</g>
<!-- parser&#45;&gt;lsp -->
<g id="edge7" class="edge">
<title>parser&#45;&gt;lsp</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" stroke-dasharray="5,2"
d="M280.77,-139.9C299.1,-149.34 324.14,-161.04 347.5,-168 476.74,-206.52 630.42,-226.37 735.06,-236.18"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2"
points="734.53,-239.65 744.81,-237.08 735.17,-232.68 734.53,-239.65"/>
<text text-anchor="middle" x="513.5" y="-214.93" font-family="Helvetica,Arial,sans-serif" font-size="9.00"
fill="#555555">syntax info
</text>
</g>
<!-- elaborator -->
<g id="node4" class="node">
<title>elaborator</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M634.5,-143C634.5,-143 580.25,-143 580.25,-143 574.25,-143 568.25,-137 568.25,-131 568.25,-131 568.25,-119 568.25,-119 568.25,-113 574.25,-107 580.25,-107 580.25,-107 634.5,-107 634.5,-107 640.5,-107 646.5,-113 646.5,-119 646.5,-119 646.5,-131 646.5,-131 646.5,-137 640.5,-143 634.5,-143"/>
<text text-anchor="middle" x="607.38" y="-122.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
Elaborator
</text>
</g>
<!-- abstract&#45;&gt;elaborator -->
<g id="edge3" class="edge">
<title>abstract&#45;&gt;elaborator</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2" d="M459.12,-125C489.45,-125 526.83,-125 556.33,-125"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="556.22,-128.5 566.22,-125 556.22,-121.5 556.22,-128.5"/>
</g>
<!-- typed -->
<g id="node5" class="node">
<title>typed</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M909.62,-143C909.62,-143 807.38,-143 807.38,-143 801.38,-143 795.38,-137 795.38,-131 795.38,-131 795.38,-105 795.38,-105 795.38,-99 801.38,-93 807.38,-93 807.38,-93 909.62,-93 909.62,-93 915.62,-93 921.62,-99 921.62,-105 921.62,-105 921.62,-131 921.62,-131 921.62,-137 915.62,-143 909.62,-143"/>
<text text-anchor="middle" x="858.5" y="-125.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
Elaborated Syntax
</text>
<text text-anchor="middle" x="858.5" y="-104.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
(with types)
</text>
</g>
<!-- elaborator&#45;&gt;typed -->
<g id="edge4" class="edge">
<title>elaborator&#45;&gt;typed</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2"
d="M646.75,-123.92C683.09,-122.9 738.61,-121.34 783.55,-120.08"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="783.61,-123.58 793.5,-119.8 783.41,-116.58 783.61,-123.58"/>
</g>
<!-- elaborator&#45;&gt;lsp -->
<g id="edge8" class="edge">
<title>elaborator&#45;&gt;lsp</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" stroke-dasharray="5,2"
d="M636.34,-143.22C661.12,-158.92 698.61,-181.58 733,-198 745.75,-204.09 759.51,-209.95 773.08,-215.34"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2"
points="771.61,-218.53 782.2,-218.91 774.16,-212.01 771.61,-218.53"/>
<text text-anchor="middle" x="696.75" y="-192.34" font-family="Helvetica,Arial,sans-serif" font-size="9.00"
fill="#555555">type info
</text>
</g>
<!-- lowering -->
<g id="node6" class="node">
<title>lowering</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M1095.75,-136C1095.75,-136 1049,-136 1049,-136 1043,-136 1037,-130 1037,-124 1037,-124 1037,-112 1037,-112 1037,-106 1043,-100 1049,-100 1049,-100 1095.75,-100 1095.75,-100 1101.75,-100 1107.75,-106 1107.75,-112 1107.75,-112 1107.75,-124 1107.75,-124 1107.75,-130 1101.75,-136 1095.75,-136"/>
<text text-anchor="middle" x="1072.38" y="-115.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Lowering
</text>
</g>
<!-- typed&#45;&gt;lowering -->
<g id="edge5" class="edge">
<title>typed&#45;&gt;lowering</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2"
d="M921.92,-118C955.01,-118 994.94,-118 1025.21,-118"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="1024.89,-121.5 1034.89,-118 1024.89,-114.5 1024.89,-121.5"/>
</g>
<!-- ir -->
<g id="node7" class="node">
<title>ir</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M1349.75,-143C1349.75,-143 1186.75,-143 1186.75,-143 1180.75,-143 1174.75,-137 1174.75,-131 1174.75,-131 1174.75,-105 1174.75,-105 1174.75,-99 1180.75,-93 1186.75,-93 1186.75,-93 1349.75,-93 1349.75,-93 1355.75,-93 1361.75,-99 1361.75,-105 1361.75,-105 1361.75,-131 1361.75,-131 1361.75,-137 1355.75,-143 1349.75,-143"/>
<text text-anchor="middle" x="1268.25" y="-125.7" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Intermediate Representation
</text>
<text text-anchor="middle" x="1268.25" y="-104.7" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">(shared execution contract)
</text>
</g>
<!-- lowering&#45;&gt;ir -->
<g id="edge6" class="edge">
<title>lowering&#45;&gt;ir</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2"
d="M1108.04,-118C1123.7,-118 1143.12,-118 1162.95,-118"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="1162.83,-121.5 1172.83,-118 1162.83,-114.5 1162.83,-121.5"/>
</g>
<!-- engine -->
<g id="node9" class="node">
<title>engine</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5"
d="M1639.25,-194.12C1639.25,-194.12 1500.5,-194.12 1500.5,-194.12 1494.5,-194.12 1488.5,-188.12 1488.5,-182.12 1488.5,-182.12 1488.5,-53.88 1488.5,-53.88 1488.5,-47.88 1494.5,-41.88 1500.5,-41.88 1500.5,-41.88 1639.25,-41.88 1639.25,-41.88 1645.25,-41.88 1651.25,-47.88 1651.25,-53.88 1651.25,-53.88 1651.25,-182.12 1651.25,-182.12 1651.25,-188.12 1645.25,-194.12 1639.25,-194.12"/>
<text text-anchor="start" x="1500.5" y="-173.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold"
font-size="14.00">Shared Query Engine
</text>
<text text-anchor="start" x="1500.5" y="-144.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
• user queries
</text>
<text text-anchor="start" x="1500.5" y="-115.58" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
• law checking
</text>
<text text-anchor="start" x="1500.5" y="-86.58" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
chase / fixpoint steps
</text>
<text text-anchor="start" x="1500.5" y="-57.58" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
planning / rewriting
</text>
</g>
<!-- ir&#45;&gt;engine -->
<g id="edge9" class="edge">
<title>ir&#45;&gt;engine</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2"
d="M1362,-118C1398.45,-118 1440.19,-118 1476.59,-118"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2"
points="1476.39,-121.5 1486.39,-118 1476.39,-114.5 1476.39,-121.5"/>
<text text-anchor="middle" x="1425.12" y="-122.95" font-family="Helvetica,Arial,sans-serif" font-size="9.00"
fill="#555555">execute IR
</text>
</g>
<!-- runtime_ir -->
<g id="node10" class="node">
<title>runtime_ir</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5"
d="M1891.5,-153.5C1891.5,-153.5 1769,-153.5 1769,-153.5 1763,-153.5 1757,-147.5 1757,-141.5 1757,-141.5 1757,-94.5 1757,-94.5 1757,-88.5 1763,-82.5 1769,-82.5 1769,-82.5 1891.5,-82.5 1891.5,-82.5 1897.5,-82.5 1903.5,-88.5 1903.5,-94.5 1903.5,-94.5 1903.5,-141.5 1903.5,-141.5 1903.5,-147.5 1897.5,-153.5 1891.5,-153.5"/>
<text text-anchor="middle" x="1830.25" y="-136.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Runtime State
</text>
<text text-anchor="middle" x="1830.25" y="-115.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">(branches, witnesses,
</text>
<text text-anchor="middle" x="1830.25" y="-94.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
equality, provenance)
</text>
</g>
<!-- engine&#45;&gt;runtime_ir -->
<g id="edge10" class="edge">
<title>engine&#45;&gt;runtime_ir</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" stroke-dasharray="5,2"
d="M1651.56,-118C1681.24,-118 1714.9,-118 1744.89,-118"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2"
points="1744.8,-121.5 1754.8,-118 1744.8,-114.5 1744.8,-121.5"/>
<text text-anchor="middle" x="1704.12" y="-122.95" font-family="Helvetica,Arial,sans-serif" font-size="9.00"
fill="#555555">maintains
</text>
</g>
<!-- inmem_adapter -->
<g id="node11" class="node">
<title>inmem_adapter</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M1885.12,-393C1885.12,-393 1775.38,-393 1775.38,-393 1769.38,-393 1763.38,-387 1763.38,-381 1763.38,-381 1763.38,-369 1763.38,-369 1763.38,-363 1769.38,-357 1775.38,-357 1775.38,-357 1885.12,-357 1885.12,-357 1891.12,-357 1897.12,-363 1897.12,-369 1897.12,-369 1897.12,-381 1897.12,-381 1897.12,-387 1891.12,-393 1885.12,-393"/>
<text text-anchor="middle" x="1830.25" y="-372.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">In&#45;Memory Adapter
</text>
</g>
<!-- engine&#45;&gt;inmem_adapter -->
<g id="edge11" class="edge">
<title>engine&#45;&gt;inmem_adapter</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1623.39,-194.6C1656.08,-238.5 1701.03,-292.53 1749.38,-332 1757.98,-339.02 1767.9,-345.44 1777.76,-351.05"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1775.91,-354.03 1786.37,-355.73 1779.25,-347.88 1775.91,-354.03"/>
</g>
<!-- pg_adapter -->
<g id="node12" class="node">
<title>pg_adapter</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M1878.38,-307C1878.38,-307 1782.12,-307 1782.12,-307 1776.12,-307 1770.12,-301 1770.12,-295 1770.12,-295 1770.12,-283 1770.12,-283 1770.12,-277 1776.12,-271 1782.12,-271 1782.12,-271 1878.38,-271 1878.38,-271 1884.38,-271 1890.38,-277 1890.38,-283 1890.38,-283 1890.38,-295 1890.38,-295 1890.38,-301 1884.38,-307 1878.38,-307"/>
<text text-anchor="middle" x="1830.25" y="-286.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Postgres Adapter
</text>
</g>
<!-- engine&#45;&gt;pg_adapter -->
<g id="edge12" class="edge">
<title>engine&#45;&gt;pg_adapter</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1651.52,-181.65C1681.48,-204.09 1716.25,-228.75 1749.38,-249 1758.61,-254.64 1768.74,-260.18 1778.59,-265.25"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1777,-268.37 1787.5,-269.74 1780.15,-262.12 1777,-268.37"/>
</g>
<!-- ffi -->
<g id="node14" class="node">
<title>ffi</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M1883.62,-493C1883.62,-493 1776.88,-493 1776.88,-493 1770.88,-493 1764.88,-487 1764.88,-481 1764.88,-481 1764.88,-455 1764.88,-455 1764.88,-449 1770.88,-443 1776.88,-443 1776.88,-443 1883.62,-443 1883.62,-443 1889.62,-443 1895.62,-449 1895.62,-455 1895.62,-455 1895.62,-481 1895.62,-481 1895.62,-487 1889.62,-493 1883.62,-493"/>
<text text-anchor="middle" x="1830.25" y="-475.7" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">FFI Haskell to Rust
</text>
<text text-anchor="middle" x="1830.25" y="-454.7" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">(IR marshalling)
</text>
</g>
<!-- engine&#45;&gt;ffi -->
<g id="edge13" class="edge">
<title>engine&#45;&gt;ffi</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1603.74,-194.34C1634.46,-259.33 1685.19,-352.35 1749.38,-418 1755.73,-424.5 1763.08,-430.53 1770.71,-435.99"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1768.71,-438.87 1778.95,-441.58 1772.64,-433.07 1768.71,-438.87"/>
</g>
<!-- inmem_db -->
<g id="node15" class="node">
<title>inmem_db</title>
<path fill="#eceff1" stroke="#607d8b" stroke-width="1.5"
d="M2272.75,-393C2272.75,-393 2191.5,-393 2191.5,-393 2185.5,-393 2179.5,-387 2179.5,-381 2179.5,-381 2179.5,-369 2179.5,-369 2179.5,-363 2185.5,-357 2191.5,-357 2191.5,-357 2272.75,-357 2272.75,-357 2278.75,-357 2284.75,-363 2284.75,-369 2284.75,-369 2284.75,-381 2284.75,-381 2284.75,-387 2278.75,-393 2272.75,-393"/>
<text text-anchor="middle" x="2232.12" y="-372.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">In&#45;Memory DB
</text>
</g>
<!-- inmem_adapter&#45;&gt;inmem_db -->
<g id="edge15" class="edge">
<title>inmem_adapter&#45;&gt;inmem_db</title>
<path fill="none" stroke="#607d8b" stroke-width="1.2"
d="M1897.28,-375C1972.24,-375 2093.68,-375 2167.59,-375"/>
<polygon fill="#607d8b" stroke="#607d8b" stroke-width="1.2"
points="2167.21,-378.5 2177.21,-375 2167.21,-371.5 2167.21,-378.5"/>
</g>
<!-- pg_db -->
<g id="node16" class="node">
<title>pg_db</title>
<path fill="#eceff1" stroke="#607d8b" stroke-width="1.5"
d="M2266,-307C2266,-307 2198.25,-307 2198.25,-307 2192.25,-307 2186.25,-301 2186.25,-295 2186.25,-295 2186.25,-283 2186.25,-283 2186.25,-277 2192.25,-271 2198.25,-271 2198.25,-271 2266,-271 2266,-271 2272,-271 2278,-277 2278,-283 2278,-283 2278,-295 2278,-295 2278,-301 2272,-307 2266,-307"/>
<text text-anchor="middle" x="2232.12" y="-286.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Postgres DB
</text>
</g>
<!-- pg_adapter&#45;&gt;pg_db -->
<g id="edge16" class="edge">
<title>pg_adapter&#45;&gt;pg_db</title>
<path fill="none" stroke="#607d8b" stroke-width="1.2"
d="M1890.68,-289C1967.2,-289 2099.22,-289 2174.4,-289"/>
<polygon fill="#607d8b" stroke="#607d8b" stroke-width="1.2"
points="2174.14,-292.5 2184.14,-289 2174.14,-285.5 2174.14,-292.5"/>
</g>
<!-- rust_adapter -->
<g id="node13" class="node">
<title>rust_adapter</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M2053.25,-487C2053.25,-487 1982.5,-487 1982.5,-487 1976.5,-487 1970.5,-481 1970.5,-475 1970.5,-475 1970.5,-463 1970.5,-463 1970.5,-457 1976.5,-451 1982.5,-451 1982.5,-451 2053.25,-451 2053.25,-451 2059.25,-451 2065.25,-457 2065.25,-463 2065.25,-463 2065.25,-475 2065.25,-475 2065.25,-481 2059.25,-487 2053.25,-487"/>
<text text-anchor="middle" x="2017.88" y="-466.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Rust Adapter
</text>
</g>
<!-- rust_store -->
<g id="node17" class="node">
<title>rust_store</title>
<path fill="#eceff1" stroke="#607d8b" stroke-width="1.5"
d="M2311,-479C2311,-479 2153.25,-479 2153.25,-479 2147.25,-479 2141.25,-473 2141.25,-467 2141.25,-467 2141.25,-455 2141.25,-455 2141.25,-449 2147.25,-443 2153.25,-443 2153.25,-443 2311,-443 2311,-443 2317,-443 2323,-449 2323,-455 2323,-455 2323,-467 2323,-467 2323,-473 2317,-479 2311,-479"/>
<text text-anchor="middle" x="2232.12" y="-458.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Rust Storage / Query Layer
</text>
</g>
<!-- rust_adapter&#45;&gt;rust_store -->
<g id="edge17" class="edge">
<title>rust_adapter&#45;&gt;rust_store</title>
<path fill="none" stroke="#607d8b" stroke-width="1.2"
d="M2065.72,-467.23C2084.53,-466.53 2107.01,-465.68 2129.24,-464.84"/>
<polygon fill="#607d8b" stroke="#607d8b" stroke-width="1.2"
points="2129.15,-468.35 2139.01,-464.47 2128.88,-461.35 2129.15,-468.35"/>
</g>
<!-- ffi&#45;&gt;rust_adapter -->
<g id="edge14" class="edge">
<title>ffi&#45;&gt;rust_adapter</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1895.91,-468.35C1916.28,-468.46 1938.65,-468.58 1958.56,-468.69"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1958.44,-472.19 1968.45,-468.74 1958.47,-465.19 1958.44,-472.19"/>
</g>
</g>
</svg>