Add a glossary of important terms related to the IP
This commit is contained in:
parent
4f1e247043
commit
b1b17e631e
@ -88,7 +88,9 @@ So the IR should be treated as the interface, and the query engine should be tre
|
|||||||
4. Do we expect the first real executor to be in-memory, Postgres-backed, or Rust-native?
|
4. Do we expect the first real executor to be in-memory, Postgres-backed, or Rust-native?
|
||||||
5. Is Postgres only a storage/query backend, or is it intended to become a serious execution target for law checking and chase steps too?
|
5. Is Postgres only a storage/query backend, or is it intended to become a serious execution target for law checking and chase steps too?
|
||||||
6. What parts of execution must be backend-independent: query planning, law translation, chase scheduling, provenance, branch management?
|
6. What parts of execution must be backend-independent: query planning, law translation, chase scheduling, provenance, branch management?
|
||||||
7. Do existential witness generation, disjunctive branching, and equality merging belong inside the query engine, or in a separate chase/runtime layer above it?
|
7. Do existential witness generation, disjunctive branching, and equality merging belong inside the query engine, or in a separate chase/runtime layer
|
||||||
8. Should the query engine operate directly on relational tables, or should it also understand higher-level Geolog structure like paths, theories, and dependencies?
|
above it?
|
||||||
|
8. Should the query engine operate directly on relational tables, or should it also understand higher-level Geolog structure like paths, theories, and
|
||||||
|
dependencies?
|
||||||
9. What is the expected contract between Haskell lowering and Rust execution: raw IR data only, or also precompiled queries/plans?
|
9. What is the expected contract between Haskell lowering and Rust execution: raw IR data only, or also precompiled queries/plans?
|
||||||
10. What is the earliest milestone for the engine: run queries, check laws, perform simple fixpoint evaluation, or support full chase behavior?
|
10. What is the earliest milestone for the engine: run queries, check laws, perform simple fixpoint evaluation, or support full chase behavior?
|
||||||
|
|||||||
397
scratches/query-engine-broad.svg
Normal file
397
scratches/query-engine-broad.svg
Normal file
@ -0,0 +1,397 @@
|
|||||||
|
<?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->parser -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>concrete->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->abstract -->
|
||||||
|
<g id="edge2" class="edge">
|
||||||
|
<title>parser->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->lsp -->
|
||||||
|
<g id="edge7" class="edge">
|
||||||
|
<title>parser->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->elaborator -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>abstract->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->typed -->
|
||||||
|
<g id="edge4" class="edge">
|
||||||
|
<title>elaborator->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->lsp -->
|
||||||
|
<g id="edge8" class="edge">
|
||||||
|
<title>elaborator->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->lowering -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>typed->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->ir -->
|
||||||
|
<g id="edge6" class="edge">
|
||||||
|
<title>lowering->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->engine -->
|
||||||
|
<g id="edge9" class="edge">
|
||||||
|
<title>ir->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->runtime_ir -->
|
||||||
|
<g id="edge10" class="edge">
|
||||||
|
<title>engine->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-Memory Adapter
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<!-- engine->inmem_adapter -->
|
||||||
|
<g id="edge11" class="edge">
|
||||||
|
<title>engine->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->pg_adapter -->
|
||||||
|
<g id="edge12" class="edge">
|
||||||
|
<title>engine->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->ffi -->
|
||||||
|
<g id="edge13" class="edge">
|
||||||
|
<title>engine->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-Memory DB
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<!-- inmem_adapter->inmem_db -->
|
||||||
|
<g id="edge15" class="edge">
|
||||||
|
<title>inmem_adapter->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->pg_db -->
|
||||||
|
<g id="edge16" class="edge">
|
||||||
|
<title>pg_adapter->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->rust_store -->
|
||||||
|
<g id="edge17" class="edge">
|
||||||
|
<title>rust_adapter->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->rust_adapter -->
|
||||||
|
<g id="edge14" class="edge">
|
||||||
|
<title>ffi->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>
|
||||||
|
After Width: | Height: | Size: 26 KiB |
36
scratches/query-engine-glossary.md
Normal file
36
scratches/query-engine-glossary.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# Query Engine Glossary
|
||||||
|
|
||||||
|
This is a short glossary for the query-engine and IR discussion.
|
||||||
|
|
||||||
|
## Terms
|
||||||
|
|
||||||
|
- `IR`: Intermediate representation. A simpler form that sits between elaboration and execution.
|
||||||
|
- `lowering`: The step that converts elaborated Geolog code into the IR.
|
||||||
|
- `table`: A relational object in the IR. It describes stored data with columns and sometimes a primary key.
|
||||||
|
- `law`: A logical rule or constraint in the IR. It says what relationships must hold about the data.
|
||||||
|
- `law checking`: Testing whether the current data satisfies a law.
|
||||||
|
- `query engine`: The execution component that consumes the IR and answers queries. In a broader design it may also do law checking, chase steps, and
|
||||||
|
fixpoint work.
|
||||||
|
- `backend`: A concrete execution target, such as an in-memory database, Postgres, or a Rust-native storage/query layer.
|
||||||
|
- `backend-neutral`: Not tied to one storage or execution technology. The IR should ideally be backend-neutral.
|
||||||
|
- `RelTable`: A table representing a relation or predicate.
|
||||||
|
- `FunTable`: A table representing something function-like, where input columns determine an output.
|
||||||
|
- `foreignKeys`: Generated laws saying that if one row exists, dependent rows must also exist.
|
||||||
|
- `total`: Generated laws saying that if the inputs to a function exist, an output row must exist too.
|
||||||
|
- `runtime IR`: A second execution-oriented representation above the lowered theory IR. It would hold changing state needed during execution.
|
||||||
|
- `runtime state`: Mutable or evolving execution data, such as current facts, branch identity, witness allocation, equality classes, or provenance.
|
||||||
|
- `fixpoint`: The point where running the rules produces no new facts or changes.
|
||||||
|
- `chase`: The general reasoning process that repeatedly checks laws and adds whatever is needed to satisfy them.
|
||||||
|
- `witness`: A fresh element introduced to satisfy an existential conclusion.
|
||||||
|
- `branch`: One possible world or execution path created by a disjunctive rule.
|
||||||
|
- `equality merging`: Collapsing two terms or elements when the theory says they must be equal.
|
||||||
|
- `provenance`: Information about where a fact came from or which rules produced it.
|
||||||
|
- `planning`: Choosing how to execute a query or check a law efficiently.
|
||||||
|
- `adapter`: A layer that maps shared IR execution concepts onto one specific backend.
|
||||||
|
|
||||||
|
## Short mental model
|
||||||
|
|
||||||
|
- the front end parses, elaborates, and lowers
|
||||||
|
- the IR is the contract
|
||||||
|
- the query engine consumes that contract
|
||||||
|
- the backend is where execution actually lands
|
||||||
493
scratches/query-engine-narrow.svg
Normal file
493
scratches/query-engine-narrow.svg
Normal file
@ -0,0 +1,493 @@
|
|||||||
|
<?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-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->parser -->
|
||||||
|
<g id="edge1" class="edge">
|
||||||
|
<title>concrete->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->abstract -->
|
||||||
|
<g id="edge2" class="edge">
|
||||||
|
<title>parser->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->lsp -->
|
||||||
|
<g id="edge7" class="edge">
|
||||||
|
<title>parser->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->elaborator -->
|
||||||
|
<g id="edge3" class="edge">
|
||||||
|
<title>abstract->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->typed -->
|
||||||
|
<g id="edge4" class="edge">
|
||||||
|
<title>elaborator->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->lsp -->
|
||||||
|
<g id="edge8" class="edge">
|
||||||
|
<title>elaborator->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->lowering -->
|
||||||
|
<g id="edge5" class="edge">
|
||||||
|
<title>typed->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-neutral contract)
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<!-- lowering->ir -->
|
||||||
|
<g id="edge6" class="edge">
|
||||||
|
<title>lowering->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->query_translation -->
|
||||||
|
<g id="edge9" class="edge">
|
||||||
|
<title>ir->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->inmem_rel -->
|
||||||
|
<g id="edge10" class="edge">
|
||||||
|
<title>query_translation->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->inmem_laws -->
|
||||||
|
<g id="edge11" class="edge">
|
||||||
|
<title>query_translation->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->pg_schema -->
|
||||||
|
<g id="edge12" class="edge">
|
||||||
|
<title>query_translation->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->pg_queries -->
|
||||||
|
<g id="edge13" class="edge">
|
||||||
|
<title>query_translation->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->ffi -->
|
||||||
|
<g id="edge14" class="edge">
|
||||||
|
<title>query_translation->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-Memory Query Engine
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<!-- inmem_rel->inmem_qe -->
|
||||||
|
<g id="edge15" class="edge">
|
||||||
|
<title>inmem_rel->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->inmem_qe -->
|
||||||
|
<g id="edge16" class="edge">
|
||||||
|
<title>inmem_laws->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-Memory DB
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<!-- inmem_qe->inmem_db -->
|
||||||
|
<g id="edge17" class="edge">
|
||||||
|
<title>inmem_qe->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->pg_db -->
|
||||||
|
<g id="edge18" class="edge">
|
||||||
|
<title>pg_schema->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->pg_qe -->
|
||||||
|
<g id="edge19" class="edge">
|
||||||
|
<title>pg_queries->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->pg_db -->
|
||||||
|
<g id="edge20" class="edge">
|
||||||
|
<title>pg_qe->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->rust_rel -->
|
||||||
|
<g id="edge21" class="edge">
|
||||||
|
<title>ffi->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->rust_laws -->
|
||||||
|
<g id="edge22" class="edge">
|
||||||
|
<title>ffi->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->rust_qe -->
|
||||||
|
<g id="edge23" class="edge">
|
||||||
|
<title>rust_rel->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->rust_qe -->
|
||||||
|
<g id="edge24" class="edge">
|
||||||
|
<title>rust_laws->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->rust_store -->
|
||||||
|
<g id="edge25" class="edge">
|
||||||
|
<title>rust_qe->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>
|
||||||
|
After Width: | Height: | Size: 32 KiB |
Loading…
x
Reference in New Issue
Block a user