Skip to content

Commit 899473c

Browse files
LQL Website fixes and F# Type Provider (#16)
# TLDR; Website fixes for LQL: VSCode launch config, code formatting, DataProvider link update, and F# Type Provider section improvements. # Brief Details - Fix VSCode launch.json project path (Lql/Website -> Lql/LqlWebsite) - Add preLaunchTask to kill port 5290 before launching website - Update DataProvider link from dataprovider.dev to dataprovider.tech - Fix code block whitespace formatting in Home.razor examples - Update F# Type Provider example to match actual LqlCommand API - Add white-space: pre-wrap to code blocks for consistent formatting - Remove unused CSS classes (features section, examples section) # How Do The Tests Prove This Works? Visual/config changes - verified by building and running the website locally.
1 parent b3a7fdd commit 899473c

19 files changed

Lines changed: 896 additions & 976 deletions

File tree

.gitignore

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,8 +399,15 @@ Website/docfx/api/
399399
Website/src/apidocs/
400400

401401
# Docs copied from README files (source of truth is in the project READMEs)
402-
Website/src/docs/sync.md
402+
Website/src/docs/index.md
403403
Website/src/docs/dataprovider.md
404404
Website/src/docs/lql.md
405+
Website/src/docs/sync.md
406+
Website/src/docs/gatekeeper.md
407+
Website/src/docs/migrations.md
408+
409+
# Images copied from repo at build time
410+
Website/src/assets/images/lqldbbrowser.png
411+
Website/src/assets/images/Samples/
405412

406413
Lql/Lql.TypeProvider.FSharp.Tests.Data/Generated/

.vscode/launch.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919
"name": "Launch Blazor LQL Website",
2020
"type": "coreclr",
2121
"request": "launch",
22+
"preLaunchTask": "kill-lql-website-port",
2223
"program": "dotnet",
23-
"args": ["run", "--project", "Lql/Website"],
24+
"args": ["run", "--project", "Lql/LqlWebsite"],
2425
"cwd": "${workspaceFolder}",
2526
"stopAtEntry": false,
2627
"serverReadyAction": {

.vscode/tasks.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
{
22
"version": "2.0.0",
33
"tasks": [
4+
{
5+
"label": "kill-lql-website-port",
6+
"type": "shell",
7+
"command": "lsof -ti:5290 | xargs kill -9 2>/dev/null || true",
8+
"presentation": {
9+
"reveal": "silent",
10+
"panel": "shared"
11+
},
12+
"problemMatcher": []
13+
},
414
{
515
"label": "build",
616
"command": "dotnet",

Lql/LqlWebsite/Components/Layout/MainLayout.razor

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,16 @@
88
<img src="lql-icon.png" alt="LQL Logo">
99
<span class="logo-text">LQL</span>
1010
</div>
11+
<div class="site-toggle">
12+
<a href="/" class="site-toggle-btn active">LQL</a>
13+
<a href="https://dataprovider.tech" class="site-toggle-btn">DataProvider</a>
14+
</div>
1115
<nav>
1216
<ul>
1317
<li><a href="#features">Features</a></li>
1418
<li><a href="#examples">Examples</a></li>
19+
<li><a href="#fsharp">F# Type Provider</a></li>
1520
<li><a href="#playground">Playground</a></li>
16-
<li><a href="https://dataprovider.dev" target="_blank">DataProvider</a></li>
1721
<li><a href="https://github.com/MelbourneDeveloper/DataProvider" target="_blank">GitHub</a></li>
1822
</ul>
1923
</nav>

Lql/LqlWebsite/Components/Pages/Home.razor

Lines changed: 59 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@
2626
<div class="code-dot"></div>
2727
<span class="code-title">complex_analytics.lql</span>
2828
</div>
29-
<div class="code-block">
30-
<span class="comment">-- Join users + orders, filter only completed orders</span>
29+
<div class="code-block"><span class="comment">-- Join users + orders, filter only completed orders</span>
3130
<span class="keyword">let</span> <span class="identifier">joined</span> <span class="operator">=</span>
3231
<span class="identifier">users</span>
3332
<span class="operator">|></span> <span class="function">join</span>(<span class="identifier">orders</span>, <span class="identifier">on</span> <span class="operator">=</span> <span class="identifier">users</span>.<span class="identifier">id</span> <span class="operator">=</span> <span class="identifier">orders</span>.<span class="identifier">user_id</span>)
@@ -40,8 +39,7 @@
4039
<span class="identifier">users</span>.<span class="identifier">name</span>,
4140
<span class="function">count</span>(*) <span class="keyword">as</span> <span class="identifier">total_orders</span>,
4241
<span class="function">sum</span>(<span class="identifier">orders</span>.<span class="identifier">total</span>) <span class="keyword">as</span> <span class="identifier">revenue</span>
43-
)
44-
</div>
42+
)</div>
4543
</div>
4644
</div>
4745
</div>
@@ -113,13 +111,11 @@
113111
</ul>
114112
</div>
115113
<div class="example-code">
116-
<div class="code-block">
117-
<span class="identifier">users</span> <span class="operator">|></span> <span class="function">select</span>(
118-
<span class="identifier">users</span>.<span class="identifier">id</span>,
119-
<span class="identifier">users</span>.<span class="identifier">name</span>,
114+
<div class="code-block"><span class="identifier">users</span> <span class="operator">|></span> <span class="function">select</span>(
115+
<span class="identifier">users</span>.<span class="identifier">id</span>,
116+
<span class="identifier">users</span>.<span class="identifier">name</span>,
120117
<span class="identifier">users</span>.<span class="identifier">email</span>
121-
)
122-
</div>
118+
)</div>
123119
</div>
124120
</div>
125121

@@ -134,18 +130,16 @@
134130
</ul>
135131
</div>
136132
<div class="example-code">
137-
<div class="code-block">
138-
<span class="identifier">employees</span>
133+
<div class="code-block"><span class="identifier">employees</span>
139134
<span class="operator">|></span> <span class="function">select</span>(
140-
<span class="identifier">employees</span>.<span class="identifier">id</span>,
141-
<span class="identifier">employees</span>.<span class="identifier">name</span>,
135+
<span class="identifier">employees</span>.<span class="identifier">id</span>,
136+
<span class="identifier">employees</span>.<span class="identifier">name</span>,
142137
<span class="identifier">employees</span>.<span class="identifier">salary</span>
143138
)
144-
<span class="operator">|></span> <span class="function">filter</span>(<span class="keyword">fn</span>(<span class="identifier">row</span>) <span class="operator">=></span>
145-
<span class="identifier">row</span>.<span class="identifier">employees</span>.<span class="identifier">salary</span> <span class="operator">></span> <span class="string">50000</span> <span class="keyword">and</span>
146-
<span class="identifier">row</span>.<span class="identifier">employees</span>.<span class="identifier">salary</span> <span class="operator"></span> <span class="string">100000</span>
147-
)
148-
</div>
139+
<span class="operator">|></span> <span class="function">filter</span>(<span class="keyword">fn</span>(<span class="identifier">row</span>) <span class="operator">=></span>
140+
<span class="identifier">row</span>.<span class="identifier">employees</span>.<span class="identifier">salary</span> <span class="operator">&gt;</span> <span class="string">50000</span> <span class="keyword">and</span>
141+
<span class="identifier">row</span>.<span class="identifier">employees</span>.<span class="identifier">salary</span> <span class="operator">&lt;</span> <span class="string">100000</span>
142+
)</div>
149143
</div>
150144
</div>
151145

@@ -160,18 +154,16 @@
160154
</ul>
161155
</div>
162156
<div class="example-code">
163-
<div class="code-block">
164-
<span class="identifier">products</span>
157+
<div class="code-block"><span class="identifier">products</span>
165158
<span class="operator">|></span> <span class="function">select</span>(
166159
<span class="identifier">products</span>.<span class="identifier">name</span>,
167160
<span class="identifier">products</span>.<span class="identifier">price</span> <span class="operator">*</span> <span class="identifier">products</span>.<span class="identifier">quantity</span> <span class="keyword">as</span> <span class="identifier">total_value</span>,
168161
<span class="identifier">products</span>.<span class="identifier">price</span> <span class="operator">+</span> <span class="string">10</span> <span class="keyword">as</span> <span class="identifier">price_plus_ten</span>,
169162
<span class="function">round</span>(<span class="identifier">products</span>.<span class="identifier">price</span> <span class="operator">/</span> <span class="string">2</span>, <span class="string">2</span>) <span class="keyword">as</span> <span class="identifier">half_price</span>
170163
)
171-
<span class="operator">|></span> <span class="function">filter</span>(<span class="keyword">fn</span>(<span class="identifier">row</span>) <span class="operator">=></span>
172-
<span class="identifier">row</span>.<span class="identifier">products</span>.<span class="identifier">price</span> <span class="operator">></span> <span class="string">0</span>
173-
)
174-
</div>
164+
<span class="operator">|></span> <span class="function">filter</span>(<span class="keyword">fn</span>(<span class="identifier">row</span>) <span class="operator">=></span>
165+
<span class="identifier">row</span>.<span class="identifier">products</span>.<span class="identifier">price</span> <span class="operator">&gt;</span> <span class="string">0</span>
166+
)</div>
175167
</div>
176168
</div>
177169

@@ -186,8 +178,7 @@
186178
</ul>
187179
</div>
188180
<div class="example-code">
189-
<div class="code-block">
190-
<span class="identifier">orders</span>
181+
<div class="code-block"><span class="identifier">orders</span>
191182
<span class="operator">|></span> <span class="function">group_by</span>(<span class="identifier">orders</span>.<span class="identifier">user_id</span>, <span class="identifier">orders</span>.<span class="identifier">status</span>)
192183
<span class="operator">|></span> <span class="function">select</span>(
193184
<span class="identifier">orders</span>.<span class="identifier">user_id</span>,
@@ -196,15 +187,53 @@
196187
<span class="function">sum</span>(<span class="identifier">orders</span>.<span class="identifier">total</span>) <span class="keyword">as</span> <span class="identifier">total_amount</span>,
197188
<span class="function">avg</span>(<span class="identifier">orders</span>.<span class="identifier">total</span>) <span class="keyword">as</span> <span class="identifier">avg_amount</span>
198189
)
199-
<span class="operator">|></span> <span class="function">having</span>(<span class="keyword">fn</span>(<span class="identifier">group</span>) <span class="operator">=></span> <span class="function">count</span>(*) <span class="operator">></span> <span class="string">2</span>)
200-
<span class="operator">|></span> <span class="function">order_by</span>(<span class="identifier">total_amount</span> <span class="keyword">desc</span>)
201-
</div>
190+
<span class="operator">|></span> <span class="function">having</span>(<span class="keyword">fn</span>(<span class="identifier">group</span>) <span class="operator">=></span> <span class="function">count</span>(*) <span class="operator">&gt;</span> <span class="string">2</span>)
191+
<span class="operator">|></span> <span class="function">order_by</span>(<span class="identifier">total_amount</span> <span class="keyword">desc</span>)</div>
202192
</div>
203193
</div>
204194
</div>
205195
</div>
206196
</section>
207197

198+
<section id="fsharp" class="fsharp">
199+
<div class="container">
200+
<div class="section-header">
201+
<h2>F# Type Provider</h2>
202+
<p>Use LQL with full type safety in F# through our native type provider.</p>
203+
</div>
204+
205+
<div class="fsharp-content">
206+
<div class="fsharp-info">
207+
<h3>Type-Safe LQL in F#</h3>
208+
<p>The LQL Type Provider brings compile-time type checking to your LQL queries in F#. Write queries with IntelliSense support, catch errors before runtime, and enjoy seamless integration with your F# codebase.</p>
209+
<ul class="fsharp-features">
210+
<li>Compile-time query validation</li>
211+
<li>Full IntelliSense support for table and column names</li>
212+
<li>Automatic SQL generation for PostgreSQL and SQL Server</li>
213+
<li>Strongly-typed result sets</li>
214+
</ul>
215+
</div>
216+
<div class="fsharp-code">
217+
<div class="code-header">
218+
<div class="code-dot"></div>
219+
<div class="code-dot"></div>
220+
<div class="code-dot"></div>
221+
<span class="code-title">Program.fs</span>
222+
</div>
223+
<div class="code-block"><span class="keyword">open</span> <span class="identifier">Lql</span>
224+
225+
<span class="comment">// Define types with validated LQL</span>
226+
<span class="keyword">type</span> <span class="identifier">GetUsers</span> <span class="operator">=</span>
227+
<span class="identifier">LqlCommand</span><span class="operator">&lt;</span><span class="string">"Users |> select(*)"</span><span class="operator">&gt;</span>
228+
229+
<span class="comment">// Access generated SQL</span>
230+
<span class="keyword">let</span> <span class="identifier">sql</span> <span class="operator">=</span> <span class="identifier">GetUsers</span>.<span class="identifier">Sql</span>
231+
<span class="keyword">let</span> <span class="identifier">query</span> <span class="operator">=</span> <span class="identifier">GetUsers</span>.<span class="identifier">Query</span></div>
232+
</div>
233+
</div>
234+
</div>
235+
</section>
236+
208237
<section id="playground" class="playground">
209238
<div class="container">
210239
<div class="section-header">

0 commit comments

Comments
 (0)