Skip to content

Commit 622873b

Browse files
author
Documenter.jl
committed
build based on 8382546
1 parent 7a2d0ef commit 622873b

37 files changed

Lines changed: 115 additions & 111 deletions

File tree

dev/.documenter-siteinfo.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"documenter":{"documenter_version":"1.17.0","generation_timestamp":"2026-06-22T21:11:53","julia_version":"1.12.6"}}
1+
{"documenter":{"documenter_version":"1.17.0","generation_timestamp":"2026-06-23T19:32:37","julia_version":"1.12.6"}}

dev/advisory_lock/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@
2020
# This block is protected by the lock "update_constructor_1"
2121
# Perform complex logic here...
2222
@info "Exclusive access granted"
23-
end</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/PingoLee/PormG.jl/blob/56b20717232d8972f999ef5838f9b32f0d12fe86/src/AdvisoryLock.jl#L35-L64">source</a></section></details></article></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../import_django/">« Import from Django</a><a class="docs-footer-nextpage" href="../extending/">Extending PormG »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.17.0 on <span class="colophon-date" title="Monday 22 June 2026 21:11">Monday 22 June 2026</span>. Using Julia version 1.12.6.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
23+
end</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/PingoLee/PormG.jl/blob/838254642698e09457afdf3a1762daf955273b04/src/AdvisoryLock.jl#L35-L64">source</a></section></details></article></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../import_django/">« Import from Django</a><a class="docs-footer-nextpage" href="../extending/">Extending PormG »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.17.0 on <span class="colophon-date" title="Tuesday 23 June 2026 19:32">Tuesday 23 June 2026</span>. Using Julia version 1.12.6.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>

dev/api/index.html

Lines changed: 47 additions & 40 deletions
Large diffs are not rendered by default.

dev/configuration/advanced/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@
88
M.Result.objects.create(&quot;year&quot; =&gt; 2025, &quot;name&quot; =&gt; &quot;New Race&quot;)
99
bulk_insert(M.Result.objects, results_df)
1010
end
11-
end</code></pre><h3 id="Key-Technical-Details"><a class="docs-heading-anchor" href="#Key-Technical-Details">Key Technical Details</a><a id="Key-Technical-Details-1"></a><a class="docs-heading-anchor-permalink" href="#Key-Technical-Details" title="Permalink"></a></h3><ul><li><strong>Hashing:</strong> Keys are hashed using MD5 to provide a 64-bit bigint identifier.</li><li><strong>Cleanup:</strong> PostgreSQL releases the lock automatically if the session drops.</li><li><strong>SQLite Limitation:</strong> SQLite does not support advisory locks; the helper will no-op with a warning on that backend.</li></ul><hr/><h2 id="The-Boot-Time-Hazard"><a class="docs-heading-anchor" href="#The-Boot-Time-Hazard">The Boot-Time Hazard</a><a id="The-Boot-Time-Hazard-1"></a><a class="docs-heading-anchor-permalink" href="#The-Boot-Time-Hazard" title="Permalink"></a></h2><p>There is an important boot-time hazard when using <code>@import_models</code> in a server module.</p><p><code>@import_models</code> eventually calls <code>Models.set_models(...)</code>. If the corresponding configuration path is not loaded yet, <code>set_models(...)</code> can trigger <code>Configuration.load(path)</code> implicitly. If that happens before the server has selected the intended environment, PormG may initialize that settings object using the default environment and retain it for the rest of the process.</p><p><strong>Recommendation:</strong> Always call <code>Configuration.load(path; env=&quot;...&quot;)</code> explicitly before <code>@import_models</code> in server-side code.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../dynamic/">« Dynamic &amp; Multi-Tenancy</a><a class="docs-footer-nextpage" href="../../migrations/">Overview »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.17.0 on <span class="colophon-date" title="Monday 22 June 2026 21:11">Monday 22 June 2026</span>. Using Julia version 1.12.6.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
11+
end</code></pre><h3 id="Key-Technical-Details"><a class="docs-heading-anchor" href="#Key-Technical-Details">Key Technical Details</a><a id="Key-Technical-Details-1"></a><a class="docs-heading-anchor-permalink" href="#Key-Technical-Details" title="Permalink"></a></h3><ul><li><strong>Hashing:</strong> Keys are hashed using MD5 to provide a 64-bit bigint identifier.</li><li><strong>Cleanup:</strong> PostgreSQL releases the lock automatically if the session drops.</li><li><strong>SQLite Limitation:</strong> SQLite does not support advisory locks; the helper will no-op with a warning on that backend.</li></ul><hr/><h2 id="The-Boot-Time-Hazard"><a class="docs-heading-anchor" href="#The-Boot-Time-Hazard">The Boot-Time Hazard</a><a id="The-Boot-Time-Hazard-1"></a><a class="docs-heading-anchor-permalink" href="#The-Boot-Time-Hazard" title="Permalink"></a></h2><p>There is an important boot-time hazard when using <code>@import_models</code> in a server module.</p><p><code>@import_models</code> eventually calls <code>Models.set_models(...)</code>. If the corresponding configuration path is not loaded yet, <code>set_models(...)</code> can trigger <code>Configuration.load(path)</code> implicitly. If that happens before the server has selected the intended environment, PormG may initialize that settings object using the default environment and retain it for the rest of the process.</p><p><strong>Recommendation:</strong> Always call <code>Configuration.load(path; env=&quot;...&quot;)</code> explicitly before <code>@import_models</code> in server-side code.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../dynamic/">« Dynamic &amp; Multi-Tenancy</a><a class="docs-footer-nextpage" href="../../migrations/">Overview »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.17.0 on <span class="colophon-date" title="Tuesday 23 June 2026 19:32">Tuesday 23 June 2026</span>. Using Julia version 1.12.6.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>

dev/configuration/connection_yml/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,4 @@
5656
return true
5757
end
5858

59-
PormG.Configuration.load_many([&quot;db&quot;, &quot;db_esus&quot;]; env=&quot;dev&quot;)</code></pre><p>The callback receives <code>(key::String, settings::Settings)</code> and must return <code>true</code> to allow the physical connection or <code>false</code> to abort.</p><p>Semantics:</p><ul><li>It runs <strong>only when a new physical connection must be opened</strong>, not on connection reuse — so a warm pool does not pay the hook cost on every query.</li><li>It runs <strong>outside the pool lock</strong>, so a slow hook (VPN bring-up, <code>sleep</code>) does not block other tasks acquiring connections.</li><li>Returning <code>false</code> aborts the acquire with a clear error naming the connection key.</li><li>When no hook is registered, connections proceed normally.</li></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../setup/">« Setup</a><a class="docs-footer-nextpage" href="../server/">Server Patterns »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.17.0 on <span class="colophon-date" title="Monday 22 June 2026 21:11">Monday 22 June 2026</span>. Using Julia version 1.12.6.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
59+
PormG.Configuration.load_many([&quot;db&quot;, &quot;db_esus&quot;]; env=&quot;dev&quot;)</code></pre><p>The callback receives <code>(key::String, settings::Settings)</code> and must return <code>true</code> to allow the physical connection or <code>false</code> to abort.</p><p>Semantics:</p><ul><li>It runs <strong>only when a new physical connection must be opened</strong>, not on connection reuse — so a warm pool does not pay the hook cost on every query.</li><li>It runs <strong>outside the pool lock</strong>, so a slow hook (VPN bring-up, <code>sleep</code>) does not block other tasks acquiring connections.</li><li>Returning <code>false</code> aborts the acquire with a clear error naming the connection key.</li><li>When no hook is registered, connections proceed normally.</li></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../setup/">« Setup</a><a class="docs-footer-nextpage" href="../server/">Server Patterns »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.17.0 on <span class="colophon-date" title="Tuesday 23 June 2026 19:32">Tuesday 23 June 2026</span>. Using Julia version 1.12.6.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>

dev/configuration/dynamic/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414
end
1515

1616
# Use the key! PormG loads it lazily.
17-
results = M.Driver.objects.db(&quot;client_42&quot;).list()</code></pre><p>This is the standard way to implement multi-tenancy in PormG. The developer logic resides in the resolver function, keeping the app code clean of connection-management details.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../server/">« Server Patterns</a><a class="docs-footer-nextpage" href="../advanced/">Advanced »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.17.0 on <span class="colophon-date" title="Monday 22 June 2026 21:11">Monday 22 June 2026</span>. Using Julia version 1.12.6.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
17+
results = M.Driver.objects.db(&quot;client_42&quot;).list()</code></pre><p>This is the standard way to implement multi-tenancy in PormG. The developer logic resides in the resolver function, keeping the app code clean of connection-management details.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../server/">« Server Patterns</a><a class="docs-footer-nextpage" href="../advanced/">Advanced »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.17.0 on <span class="colophon-date" title="Tuesday 23 June 2026 19:32">Tuesday 23 June 2026</span>. Using Julia version 1.12.6.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>

0 commit comments

Comments
 (0)