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

494 lines
32 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: GeologQueryEngineNarrow Pages: 1 -->
<svg width="2622pt" height="670pt"
viewBox="0.00 0.00 2622.25 670.00" xmlns="http://www.w3.org/2000/svg">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 666)">
<title>GeologQueryEngineNarrow</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-666 2618.25,-666 2618.25,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_frontend</title>
<path fill="#fafafa" stroke="#666666"
d="M20,-207C20,-207 1383.75,-207 1383.75,-207 1389.75,-207 1395.75,-213 1395.75,-219 1395.75,-219 1395.75,-498 1395.75,-498 1395.75,-504 1389.75,-510 1383.75,-510 1383.75,-510 20,-510 20,-510 14,-510 8,-504 8,-498 8,-498 8,-219 8,-219 8,-213 14,-207 20,-207"/>
<text text-anchor="middle" x="701.88" y="-492.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,-227 28,-334 1375.75,-334 1375.75,-227 28,-227"/>
<text text-anchor="middle" x="701.88" y="-316.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,-354 733,-461 984,-461 984,-354 733,-354"/>
<text text-anchor="middle" x="858.5" y="-443.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#388e3c">Developer Tooling
</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_execution</title>
<polygon fill="white" stroke="#4caf50" stroke-dasharray="5,2"
points="1462.25,-230 1462.25,-331 1668.75,-331 1668.75,-230 1462.25,-230"/>
<text text-anchor="middle" x="1565.5" y="-313.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#388e3c">Execution Layer
</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_backends</title>
<path fill="#fafafa" stroke="#666666"
d="M1704.75,-8C1704.75,-8 2594.25,-8 2594.25,-8 2600.25,-8 2606.25,-14 2606.25,-20 2606.25,-20 2606.25,-642 2606.25,-642 2606.25,-648 2600.25,-654 2594.25,-654 2594.25,-654 1704.75,-654 1704.75,-654 1698.75,-654 1692.75,-648 1692.75,-642 1692.75,-642 1692.75,-20 1692.75,-20 1692.75,-14 1698.75,-8 1704.75,-8"/>
<text text-anchor="middle" x="2149.5" y="-636.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#333333">Backend Implementations
</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_inmemory</title>
<polygon fill="#fafafa" stroke="#ff9800" stroke-dasharray="5,2"
points="1712.75,-426 1712.75,-605 2324.38,-605 2324.38,-426 1712.75,-426"/>
<text text-anchor="middle" x="2018.56" y="-587.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#f57c00">In&#45;Memory Backend
</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_postgres</title>
<polygon fill="#fafafa" stroke="#ff9800" stroke-dasharray="5,2"
points="1729.25,-28 1729.25,-207 2317.62,-207 2317.62,-28 1729.25,-28"/>
<text text-anchor="middle" x="2023.44" y="-189.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#f57c00">Postgres Backend
</text>
</g>
<g id="clust8" class="cluster">
<title>cluster_rust</title>
<polygon fill="#fafafa" stroke="#ff9800" stroke-dasharray="5,2"
points="1727.75,-227 1727.75,-406 2586.25,-406 2586.25,-227 1727.75,-227"/>
<text text-anchor="middle" x="2157" y="-388.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00"
fill="#f57c00">Rust Backend
</text>
</g>
<!-- concrete -->
<g id="node1" class="node">
<title>concrete</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M145.75,-291C145.75,-291 54,-291 54,-291 48,-291 42,-285 42,-279 42,-279 42,-267 42,-267 42,-261 48,-255 54,-255 54,-255 145.75,-255 145.75,-255 151.75,-255 157.75,-261 157.75,-267 157.75,-267 157.75,-279 157.75,-279 157.75,-285 151.75,-291 145.75,-291"/>
<text text-anchor="middle" x="99.88" y="-270.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,-291C268.5,-291 236.75,-291 236.75,-291 230.75,-291 224.75,-285 224.75,-279 224.75,-279 224.75,-267 224.75,-267 224.75,-261 230.75,-255 236.75,-255 236.75,-255 268.5,-255 268.5,-255 274.5,-255 280.5,-261 280.5,-267 280.5,-267 280.5,-279 280.5,-279 280.5,-285 274.5,-291 268.5,-291"/>
<text text-anchor="middle" x="252.62" y="-270.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,-273C176.25,-273 196.19,-273 212.93,-273"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="212.68,-276.5 222.68,-273 212.68,-269.5 212.68,-276.5"/>
</g>
<!-- abstract -->
<g id="node3" class="node">
<title>abstract</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M446.75,-291C446.75,-291 359.5,-291 359.5,-291 353.5,-291 347.5,-285 347.5,-279 347.5,-279 347.5,-267 347.5,-267 347.5,-261 353.5,-255 359.5,-255 359.5,-255 446.75,-255 446.75,-255 452.75,-255 458.75,-261 458.75,-267 458.75,-267 458.75,-279 458.75,-279 458.75,-285 452.75,-291 446.75,-291"/>
<text text-anchor="middle" x="403.12" y="-270.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,-273C296.26,-273 316.24,-273 335.52,-273"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="335.25,-276.5 345.25,-273 335.25,-269.5 335.25,-276.5"/>
</g>
<!-- lsp -->
<g id="node8" class="node">
<title>lsp</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5"
d="M958,-418C958,-418 759,-418 759,-418 753,-418 747,-412 747,-406 747,-406 747,-380 747,-380 747,-374 753,-368 759,-368 759,-368 958,-368 958,-368 964,-368 970,-374 970,-380 970,-380 970,-406 970,-406 970,-412 964,-418 958,-418"/>
<text text-anchor="middle" x="858.5" y="-400.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
LSP
</text>
<text text-anchor="middle" x="858.5" y="-379.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,-287.9C299.1,-297.34 324.14,-309.04 347.5,-316 476.74,-354.52 630.42,-374.37 735.06,-384.18"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2"
points="734.53,-387.65 744.81,-385.08 735.17,-380.68 734.53,-387.65"/>
<text text-anchor="middle" x="513.5" y="-362.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,-291C634.5,-291 580.25,-291 580.25,-291 574.25,-291 568.25,-285 568.25,-279 568.25,-279 568.25,-267 568.25,-267 568.25,-261 574.25,-255 580.25,-255 580.25,-255 634.5,-255 634.5,-255 640.5,-255 646.5,-261 646.5,-267 646.5,-267 646.5,-279 646.5,-279 646.5,-285 640.5,-291 634.5,-291"/>
<text text-anchor="middle" x="607.38" y="-270.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,-273C489.45,-273 526.83,-273 556.33,-273"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="556.22,-276.5 566.22,-273 556.22,-269.5 556.22,-276.5"/>
</g>
<!-- typed -->
<g id="node5" class="node">
<title>typed</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M909.62,-291C909.62,-291 807.38,-291 807.38,-291 801.38,-291 795.38,-285 795.38,-279 795.38,-279 795.38,-253 795.38,-253 795.38,-247 801.38,-241 807.38,-241 807.38,-241 909.62,-241 909.62,-241 915.62,-241 921.62,-247 921.62,-253 921.62,-253 921.62,-279 921.62,-279 921.62,-285 915.62,-291 909.62,-291"/>
<text text-anchor="middle" x="858.5" y="-273.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
Elaborated Syntax
</text>
<text text-anchor="middle" x="858.5" y="-252.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,-271.92C683.09,-270.9 738.61,-269.34 783.55,-268.08"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="783.61,-271.58 793.5,-267.8 783.41,-264.58 783.61,-271.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,-291.22C661.12,-306.92 698.61,-329.58 733,-346 745.75,-352.09 759.51,-357.95 773.08,-363.34"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2"
points="771.61,-366.53 782.2,-366.91 774.16,-360.01 771.61,-366.53"/>
<text text-anchor="middle" x="696.75" y="-340.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,-284C1095.75,-284 1049,-284 1049,-284 1043,-284 1037,-278 1037,-272 1037,-272 1037,-260 1037,-260 1037,-254 1043,-248 1049,-248 1049,-248 1095.75,-248 1095.75,-248 1101.75,-248 1107.75,-254 1107.75,-260 1107.75,-260 1107.75,-272 1107.75,-272 1107.75,-278 1101.75,-284 1095.75,-284"/>
<text text-anchor="middle" x="1072.38" y="-263.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,-266C955.01,-266 994.94,-266 1025.21,-266"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="1024.89,-269.5 1034.89,-266 1024.89,-262.5 1024.89,-269.5"/>
</g>
<!-- ir -->
<g id="node7" class="node">
<title>ir</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5"
d="M1349.75,-291C1349.75,-291 1186.75,-291 1186.75,-291 1180.75,-291 1174.75,-285 1174.75,-279 1174.75,-279 1174.75,-253 1174.75,-253 1174.75,-247 1180.75,-241 1186.75,-241 1186.75,-241 1349.75,-241 1349.75,-241 1355.75,-241 1361.75,-247 1361.75,-253 1361.75,-253 1361.75,-279 1361.75,-279 1361.75,-285 1355.75,-291 1349.75,-291"/>
<text text-anchor="middle" x="1268.25" y="-273.7" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Intermediate Representation
</text>
<text text-anchor="middle" x="1268.25" y="-252.7" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">(backend&#45;neutral 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,-266C1123.7,-266 1143.12,-266 1162.95,-266"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2"
points="1162.83,-269.5 1172.83,-266 1162.83,-262.5 1162.83,-269.5"/>
</g>
<!-- query_translation -->
<g id="node9" class="node">
<title>query_translation</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5"
d="M1638.75,-284C1638.75,-284 1492.25,-284 1492.25,-284 1486.25,-284 1480.25,-278 1480.25,-272 1480.25,-272 1480.25,-260 1480.25,-260 1480.25,-254 1486.25,-248 1492.25,-248 1492.25,-248 1638.75,-248 1638.75,-248 1644.75,-248 1650.75,-254 1650.75,-260 1650.75,-260 1650.75,-272 1650.75,-272 1650.75,-278 1644.75,-284 1638.75,-284"/>
<text text-anchor="middle" x="1565.5" y="-263.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
IR to Backend Translation
</text>
</g>
<!-- ir&#45;&gt;query_translation -->
<g id="edge9" class="edge">
<title>ir&#45;&gt;query_translation</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2"
d="M1361.86,-266C1395.89,-266 1434.48,-266 1468.78,-266"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2"
points="1468.42,-269.5 1478.42,-266 1468.42,-262.5 1468.42,-269.5"/>
<text text-anchor="middle" x="1425.5" y="-270.95" font-family="Helvetica,Arial,sans-serif" font-size="9.00"
fill="#555555">compile IR
</text>
</g>
<!-- inmem_rel -->
<g id="node10" class="node">
<title>inmem_rel</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M1862.75,-562C1862.75,-562 1751.5,-562 1751.5,-562 1745.5,-562 1739.5,-556 1739.5,-550 1739.5,-550 1739.5,-538 1739.5,-538 1739.5,-532 1745.5,-526 1751.5,-526 1751.5,-526 1862.75,-526 1862.75,-526 1868.75,-526 1874.75,-532 1874.75,-538 1874.75,-538 1874.75,-550 1874.75,-550 1874.75,-556 1868.75,-562 1862.75,-562"/>
<text text-anchor="middle" x="1807.12" y="-541.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Relation Translation
</text>
</g>
<!-- query_translation&#45;&gt;inmem_rel -->
<g id="edge10" class="edge">
<title>query_translation&#45;&gt;inmem_rel</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1571.5,-284.4C1584.29,-328.11 1622.25,-439.15 1692.75,-501 1703.07,-510.06 1715.5,-517.29 1728.28,-523.04"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1726.81,-526.22 1737.39,-526.83 1729.5,-519.76 1726.81,-526.22"/>
</g>
<!-- inmem_laws -->
<g id="node11" class="node">
<title>inmem_laws</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M1875.5,-476C1875.5,-476 1738.75,-476 1738.75,-476 1732.75,-476 1726.75,-470 1726.75,-464 1726.75,-464 1726.75,-452 1726.75,-452 1726.75,-446 1732.75,-440 1738.75,-440 1738.75,-440 1875.5,-440 1875.5,-440 1881.5,-440 1887.5,-446 1887.5,-452 1887.5,-452 1887.5,-464 1887.5,-464 1887.5,-470 1881.5,-476 1875.5,-476"/>
<text text-anchor="middle" x="1807.12" y="-455.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Law / Chase Translation
</text>
</g>
<!-- query_translation&#45;&gt;inmem_laws -->
<g id="edge11" class="edge">
<title>query_translation&#45;&gt;inmem_laws</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1576.98,-284.17C1596.09,-315.75 1639.55,-380.94 1692.75,-418 1702.42,-424.74 1713.34,-430.45 1724.48,-435.25"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1722.94,-438.41 1733.52,-438.91 1725.57,-431.92 1722.94,-438.41"/>
</g>
<!-- pg_schema -->
<g id="node14" class="node">
<title>pg_schema</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M2077,-78C2077,-78 2002.5,-78 2002.5,-78 1996.5,-78 1990.5,-72 1990.5,-66 1990.5,-66 1990.5,-54 1990.5,-54 1990.5,-48 1996.5,-42 2002.5,-42 2002.5,-42 2077,-42 2077,-42 2083,-42 2089,-48 2089,-54 2089,-54 2089,-66 2089,-66 2089,-72 2083,-78 2077,-78"/>
<text text-anchor="middle" x="2039.75" y="-57.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00">
IR to Schema
</text>
</g>
<!-- query_translation&#45;&gt;pg_schema -->
<g id="edge12" class="edge">
<title>query_translation&#45;&gt;pg_schema</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1574.64,-247.73C1591.23,-212.86 1632.56,-137.28 1692.75,-103 1782.31,-51.99 1905.8,-49.81 1978.46,-54.08"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1978.09,-57.56 1988.3,-54.72 1978.55,-50.57 1978.09,-57.56"/>
</g>
<!-- pg_queries -->
<g id="node15" class="node">
<title>pg_queries</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M1859,-164C1859,-164 1755.25,-164 1755.25,-164 1749.25,-164 1743.25,-158 1743.25,-152 1743.25,-152 1743.25,-140 1743.25,-140 1743.25,-134 1749.25,-128 1755.25,-128 1755.25,-128 1859,-128 1859,-128 1865,-128 1871,-134 1871,-140 1871,-140 1871,-152 1871,-152 1871,-158 1865,-164 1859,-164"/>
<text text-anchor="middle" x="1807.12" y="-143.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">IR to SQL Queries
</text>
</g>
<!-- query_translation&#45;&gt;pg_queries -->
<g id="edge13" class="edge">
<title>query_translation&#45;&gt;pg_queries</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1603.42,-247.51C1645.23,-226.58 1713.45,-192.41 1759.05,-169.57"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1760.56,-172.73 1767.94,-165.12 1757.43,-166.47 1760.56,-172.73"/>
</g>
<!-- ffi -->
<g id="node18" class="node">
<title>ffi</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M1860.5,-291C1860.5,-291 1753.75,-291 1753.75,-291 1747.75,-291 1741.75,-285 1741.75,-279 1741.75,-279 1741.75,-253 1741.75,-253 1741.75,-247 1747.75,-241 1753.75,-241 1753.75,-241 1860.5,-241 1860.5,-241 1866.5,-241 1872.5,-247 1872.5,-253 1872.5,-253 1872.5,-279 1872.5,-279 1872.5,-285 1866.5,-291 1860.5,-291"/>
<text text-anchor="middle" x="1807.12" y="-273.7" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">FFI Haskell to Rust
</text>
<text text-anchor="middle" x="1807.12" y="-252.7" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">(IR marshalling)
</text>
</g>
<!-- query_translation&#45;&gt;ffi -->
<g id="edge14" class="edge">
<title>query_translation&#45;&gt;ffi</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1650.98,-266C1676.69,-266 1704.78,-266 1729.91,-266"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1729.79,-269.5 1739.79,-266 1729.79,-262.5 1729.79,-269.5"/>
</g>
<!-- inmem_qe -->
<g id="node12" class="node">
<title>inmem_qe</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M2113,-499C2113,-499 1966.5,-499 1966.5,-499 1960.5,-499 1954.5,-493 1954.5,-487 1954.5,-487 1954.5,-475 1954.5,-475 1954.5,-469 1960.5,-463 1966.5,-463 1966.5,-463 2113,-463 2113,-463 2119,-463 2125,-469 2125,-475 2125,-475 2125,-487 2125,-487 2125,-493 2119,-499 2113,-499"/>
<text text-anchor="middle" x="2039.75" y="-478.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">In&#45;Memory Query Engine
</text>
</g>
<!-- inmem_rel&#45;&gt;inmem_qe -->
<g id="edge15" class="edge">
<title>inmem_rel&#45;&gt;inmem_qe</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1875.14,-525.69C1901.67,-518.44 1932.37,-510.06 1959.96,-502.52"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1960.69,-505.95 1969.42,-499.94 1958.85,-499.2 1960.69,-505.95"/>
</g>
<!-- inmem_laws&#45;&gt;inmem_qe -->
<g id="edge16" class="edge">
<title>inmem_laws&#45;&gt;inmem_qe</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1887.82,-465.95C1905.52,-467.71 1924.47,-469.6 1942.75,-471.43"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1942.24,-474.89 1952.53,-472.4 1942.93,-467.93 1942.24,-474.89"/>
</g>
<!-- inmem_db -->
<g id="node13" class="node">
<title>inmem_db</title>
<path fill="#eceff1" stroke="#607d8b" stroke-width="1.5"
d="M2298.38,-499C2298.38,-499 2217.12,-499 2217.12,-499 2211.12,-499 2205.12,-493 2205.12,-487 2205.12,-487 2205.12,-475 2205.12,-475 2205.12,-469 2211.12,-463 2217.12,-463 2217.12,-463 2298.38,-463 2298.38,-463 2304.38,-463 2310.38,-469 2310.38,-475 2310.38,-475 2310.38,-487 2310.38,-487 2310.38,-493 2304.38,-499 2298.38,-499"/>
<text text-anchor="middle" x="2257.75" y="-478.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">In&#45;Memory DB
</text>
</g>
<!-- inmem_qe&#45;&gt;inmem_db -->
<g id="edge17" class="edge">
<title>inmem_qe&#45;&gt;inmem_db</title>
<path fill="none" stroke="#607d8b" stroke-width="1.2"
d="M2125.5,-481C2147.93,-481 2171.77,-481 2192.89,-481"/>
<polygon fill="#607d8b" stroke="#607d8b" stroke-width="1.2"
points="2192.83,-484.5 2202.83,-481 2192.83,-477.5 2192.83,-484.5"/>
</g>
<!-- pg_db -->
<g id="node17" class="node">
<title>pg_db</title>
<path fill="#eceff1" stroke="#607d8b" stroke-width="1.5"
d="M2291.62,-121C2291.62,-121 2223.88,-121 2223.88,-121 2217.88,-121 2211.88,-115 2211.88,-109 2211.88,-109 2211.88,-97 2211.88,-97 2211.88,-91 2217.88,-85 2223.88,-85 2223.88,-85 2291.62,-85 2291.62,-85 2297.62,-85 2303.62,-91 2303.62,-97 2303.62,-97 2303.62,-109 2303.62,-109 2303.62,-115 2297.62,-121 2291.62,-121"/>
<text text-anchor="middle" x="2257.75" y="-100.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Postgres DB
</text>
</g>
<!-- pg_schema&#45;&gt;pg_db -->
<g id="edge18" class="edge">
<title>pg_schema&#45;&gt;pg_db</title>
<path fill="none" stroke="#607d8b" stroke-width="1.2"
d="M2089.49,-69.7C2122.36,-76.25 2165.83,-84.9 2200.22,-91.75"/>
<polygon fill="#607d8b" stroke="#607d8b" stroke-width="1.2"
points="2199.23,-95.12 2209.72,-93.64 2200.6,-88.25 2199.23,-95.12"/>
</g>
<!-- pg_qe -->
<g id="node16" class="node">
<title>pg_qe</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M2106.25,-164C2106.25,-164 1973.25,-164 1973.25,-164 1967.25,-164 1961.25,-158 1961.25,-152 1961.25,-152 1961.25,-140 1961.25,-140 1961.25,-134 1967.25,-128 1973.25,-128 1973.25,-128 2106.25,-128 2106.25,-128 2112.25,-128 2118.25,-134 2118.25,-140 2118.25,-140 2118.25,-152 2118.25,-152 2118.25,-158 2112.25,-164 2106.25,-164"/>
<text text-anchor="middle" x="2039.75" y="-143.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Postgres Query Engine
</text>
</g>
<!-- pg_queries&#45;&gt;pg_qe -->
<g id="edge19" class="edge">
<title>pg_queries&#45;&gt;pg_qe</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1871.45,-146C1895.39,-146 1923.1,-146 1949.01,-146"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1948.95,-149.5 1958.95,-146 1948.95,-142.5 1948.95,-149.5"/>
</g>
<!-- pg_qe&#45;&gt;pg_db -->
<g id="edge20" class="edge">
<title>pg_qe&#45;&gt;pg_db</title>
<path fill="none" stroke="#607d8b" stroke-width="1.2"
d="M2118.73,-130.48C2145.65,-125.12 2175.26,-119.22 2200.14,-114.27"/>
<polygon fill="#607d8b" stroke="#607d8b" stroke-width="1.2"
points="2200.66,-117.73 2209.79,-112.35 2199.3,-110.87 2200.66,-117.73"/>
</g>
<!-- rust_rel -->
<g id="node19" class="node">
<title>rust_rel</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M2095.38,-277C2095.38,-277 1984.12,-277 1984.12,-277 1978.12,-277 1972.12,-271 1972.12,-265 1972.12,-265 1972.12,-253 1972.12,-253 1972.12,-247 1978.12,-241 1984.12,-241 1984.12,-241 2095.38,-241 2095.38,-241 2101.38,-241 2107.38,-247 2107.38,-253 2107.38,-253 2107.38,-265 2107.38,-265 2107.38,-271 2101.38,-277 2095.38,-277"/>
<text text-anchor="middle" x="2039.75" y="-256.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Relation Translation
</text>
</g>
<!-- ffi&#45;&gt;rust_rel -->
<g id="edge21" class="edge">
<title>ffi&#45;&gt;rust_rel</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1872.98,-264.03C1900.15,-263.21 1931.97,-262.24 1960.43,-261.38"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1960.27,-264.88 1970.16,-261.08 1960.06,-257.89 1960.27,-264.88"/>
</g>
<!-- rust_laws -->
<g id="node20" class="node">
<title>rust_laws</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M2108.12,-363C2108.12,-363 1971.38,-363 1971.38,-363 1965.38,-363 1959.38,-357 1959.38,-351 1959.38,-351 1959.38,-339 1959.38,-339 1959.38,-333 1965.38,-327 1971.38,-327 1971.38,-327 2108.12,-327 2108.12,-327 2114.12,-327 2120.12,-333 2120.12,-339 2120.12,-339 2120.12,-351 2120.12,-351 2120.12,-357 2114.12,-363 2108.12,-363"/>
<text text-anchor="middle" x="2039.75" y="-342.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Law / Chase Translation
</text>
</g>
<!-- ffi&#45;&gt;rust_laws -->
<g id="edge22" class="edge">
<title>ffi&#45;&gt;rust_laws</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M1872.98,-288.22C1904.56,-299.03 1942.43,-312.01 1974,-322.82"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="1972.57,-326.03 1983.17,-325.96 1974.84,-319.41 1972.57,-326.03"/>
</g>
<!-- rust_qe -->
<g id="node21" class="node">
<title>rust_qe</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5"
d="M2311.5,-300C2311.5,-300 2204,-300 2204,-300 2198,-300 2192,-294 2192,-288 2192,-288 2192,-276 2192,-276 2192,-270 2198,-264 2204,-264 2204,-264 2311.5,-264 2311.5,-264 2317.5,-264 2323.5,-270 2323.5,-276 2323.5,-276 2323.5,-288 2323.5,-288 2323.5,-294 2317.5,-300 2311.5,-300"/>
<text text-anchor="middle" x="2257.75" y="-279.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Rust Query Engine
</text>
</g>
<!-- rust_rel&#45;&gt;rust_qe -->
<g id="edge23" class="edge">
<title>rust_rel&#45;&gt;rust_qe</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M2107.61,-266.12C2130.61,-268.57 2156.54,-271.33 2180.25,-273.85"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="2179.56,-277.3 2189.88,-274.88 2180.3,-270.34 2179.56,-277.3"/>
</g>
<!-- rust_laws&#45;&gt;rust_qe -->
<g id="edge24" class="edge">
<title>rust_laws&#45;&gt;rust_qe</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2"
d="M2104.1,-326.52C2128.6,-319.38 2156.83,-311.14 2182.3,-303.71"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2"
points="2183.04,-307.14 2191.66,-300.98 2181.08,-300.42 2183.04,-307.14"/>
</g>
<!-- rust_store -->
<g id="node22" class="node">
<title>rust_store</title>
<path fill="#eceff1" stroke="#607d8b" stroke-width="1.5"
d="M2560.25,-300C2560.25,-300 2402.5,-300 2402.5,-300 2396.5,-300 2390.5,-294 2390.5,-288 2390.5,-288 2390.5,-276 2390.5,-276 2390.5,-270 2396.5,-264 2402.5,-264 2402.5,-264 2560.25,-264 2560.25,-264 2566.25,-264 2572.25,-270 2572.25,-276 2572.25,-276 2572.25,-288 2572.25,-288 2572.25,-294 2566.25,-300 2560.25,-300"/>
<text text-anchor="middle" x="2481.38" y="-279.2" font-family="Helvetica,Arial,sans-serif"
font-size="14.00">Rust Storage / Query Layer
</text>
</g>
<!-- rust_qe&#45;&gt;rust_store -->
<g id="edge25" class="edge">
<title>rust_qe&#45;&gt;rust_store</title>
<path fill="none" stroke="#607d8b" stroke-width="1.2"
d="M2323.75,-282C2340.99,-282 2360.02,-282 2378.71,-282"/>
<polygon fill="#607d8b" stroke="#607d8b" stroke-width="1.2"
points="2378.47,-285.5 2388.47,-282 2378.47,-278.5 2378.47,-285.5"/>
</g>
</g>
</svg>