<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <h2 id="default-values" class="position-relative d-flex align-items-center group"> <span>Default Values</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="default-values" aria-haspopup="dialog" aria-label="Share link: Default Values"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h2><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden> <div class="hsm-dialog" role="document"> <div class="hsm-header"> <h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2> <button type="button" class="hsm-close" aria-label="Close"> <i class="fa-solid fa-xmark"></i> </button> </div> <div class="hsm-body"> <label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label> <div class="input-group mb-4 hsm-url-group"> <input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" /> <button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy"> <i class="fa-duotone fa-clipboard" aria-hidden="true"></i> </button> </div> <div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div> <div class="hsm-share-grid"> <a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-twitter me-2"></i>Twitter </a> <a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-linkedin me-2"></i>LinkedIn </a> <a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-facebook me-2"></i>Facebook </a> </div> </div> </div> </div> <style> .heading-share-modal { position: fixed; inset: 0; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.6); z-index: 1050; padding: 1rem; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .heading-share-modal[hidden] { display: none !important; } .hsm-dialog { max-width: 420px; width: 100%; background: var(--bs-body-bg, #fff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); border-radius: 1rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; animation: hsm-fade-in 0.2s ease-out; } @keyframes hsm-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } [data-bs-theme="dark"] .hsm-dialog { background: #1e293b; border-color: rgba(255,255,255,0.1); color: #f8f9fa; } .hsm-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); background: rgba(0,0,0,0.02); } [data-bs-theme="dark"] .hsm-header { background: rgba(255,255,255,0.02); border-color: rgba(255,255,255,0.1); } .hsm-close { background: transparent; border: none; color: inherit; opacity: 0.5; padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 1.2rem; line-height: 1; transition: opacity 0.2s; } .hsm-close:hover { opacity: 1; } .hsm-body { padding: 1.5rem; } .hsm-url-group { display: flex !important; align-items: stretch; } .hsm-url-group .form-control { flex: 1; min-width: 0; margin: 0; background: var(--bs-secondary-bg, #f8f9fa); border-color: var(--bs-border-color, #dee2e6); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 42px; } .hsm-url-group .btn { flex: 0 0 auto; margin: 0; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; height: 42px; display: flex; align-items: center; justify-content: center; padding: 0 1.25rem; z-index: 2; } [data-bs-theme="dark"] .hsm-url-group .form-control { background: #0f172a; border-color: #334155; color: #e2e8f0; } .hsm-share-grid { display: flex; flex-direction: column; gap: 0.5rem; } .hsm-share-grid .btn { display: flex; align-items: center; justify-content: center; font-size: 0.9rem; padding: 0.6rem; border-color: var(--bs-border-color); width: 100%; } [data-bs-theme="dark"] .hsm-share-grid .btn { color: #e2e8f0; border-color: #475569; } [data-bs-theme="dark"] .hsm-share-grid .btn:hover { background: #334155; border-color: #cbd5e1; } </style> <script> (function(){ const modal = document.getElementById('headingShareModal'); if(!modal) return; const input = modal.querySelector('#headingShareInput'); const copyBtn = modal.querySelector('.hsm-copy'); const twitter = modal.querySelector('#share-twitter'); const linkedin = modal.querySelector('#share-linkedin'); const facebook = modal.querySelector('#share-facebook'); const closeBtn = modal.querySelector('.hsm-close'); let lastFocus=null; let trapBound=false; function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; } function isOpen(){ return !modal.hasAttribute('hidden'); } function hydrate(id){ const url=buildUrl(id); input.value=url; const enc=encodeURIComponent(url); const text=encodeURIComponent(document.title); if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`; if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`; if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`; } function openModal(id){ lastFocus=document.activeElement; hydrate(id); if(!isOpen()){ modal.removeAttribute('hidden'); } requestAnimationFrame(()=>{ input.focus(); }); trapFocus(); } function closeModal(){ if(!isOpen()) return; modal.setAttribute('hidden',''); if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus(); } function copyCurrent(){ try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); } catch(e){ fallback(); } } function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} } function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); } function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); } function bindShareButtons(){ document.querySelectorAll('.h-share').forEach(btn=>{ if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; } }); } bindShareButtons(); if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bindShareButtons); } else { requestAnimationFrame(bindShareButtons); } document.addEventListener('click', function(e){ const shareBtn=e.target.closest && e.target.closest('.h-share'); if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); } }, true); document.addEventListener('click', e=>{ if(e.target===modal) closeModal(); if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); } if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); } }); document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); }); function trapFocus(){ if(trapBound) return; trapBound=true; modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } }); } if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); }); })(); </script><p>Default values in Geode automatically populate node and edge properties when they are not explicitly provided during INSERT operations. By leveraging defaults, you reduce boilerplate code in applications, enforce consistent initial states, and encode business logic directly in the schema. Geode supports static defaults, dynamic function-based defaults, and computed defaults that reference other properties.</p> <h3 id="why-use-default-values" class="position-relative d-flex align-items-center group"> <span>Why Use Default Values</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="why-use-default-values" aria-haspopup="dialog" aria-label="Share link: Why Use Default Values"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Default values serve several critical purposes in graph database design:</p> <ul> <li><strong>Reduce Application Complexity</strong>: Move initialization logic from application code to the database</li> <li><strong>Ensure Consistency</strong>: Guarantee that properties have predictable initial values</li> <li><strong>Auto-Generate Identifiers</strong>: Automatically create UUIDs, timestamps, and sequential IDs</li> <li><strong>Enforce Business Rules</strong>: Set appropriate initial states based on domain requirements</li> <li><strong>Simplify APIs</strong>: Allow client code to omit optional properties</li> <li><strong>Improve Data Quality</strong>: Prevent NULL values in properties that should have sensible defaults</li> </ul> <h3 id="static-default-values" class="position-relative d-flex align-items-center group"> <span>Static Default Values</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="static-default-values" aria-haspopup="dialog" aria-label="Share link: Static Default Values"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Static defaults assign fixed literal values when properties are omitted. These are the simplest and most common type of default.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Node</span><span class="w"> </span><span class="kd">type</span><span class="w"> </span><span class="nc">with</span><span class="w"> </span><span class="py">static</span><span class="w"> </span><span class="py">defaults</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Person</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">status</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="err">&#39;</span><span class="py">active</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">All</span><span class="w"> </span><span class="py">new</span><span class="w"> </span><span class="py">users</span><span class="w"> </span><span class="py">start</span><span class="w"> </span><span class="py">as</span><span class="w"> </span><span class="py">active</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">role</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Default</span><span class="w"> </span><span class="py">role</span><span class="w"> </span><span class="py">is</span><span class="w"> </span><span class="py">regular</span><span class="w"> </span><span class="py">user</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">verified</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">false</span><span class="p">,</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Email</span><span class="w"> </span><span class="py">not</span><span class="w"> </span><span class="py">verified</span><span class="w"> </span><span class="py">initially</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">notifications_enabled</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">true</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">theme</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="err">&#39;</span><span class="py">light</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Edge</span><span class="w"> </span><span class="kd">type</span><span class="w"> </span><span class="nc">with</span><span class="w"> </span><span class="py">static</span><span class="w"> </span><span class="py">metadata</span><span class="w"> </span><span class="py">defaults</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">EDGE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">FOLLOWS</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">followed_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">notification_enabled</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">true</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">relationship_type</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="err">&#39;</span><span class="py">standard</span><span class="err">&#39;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">vs</span><span class="w"> </span><span class="err">&#39;</span><span class="py">close_friend</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span><span class="err">&#39;</span><span class="py">muted</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Product</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">pricing</span><span class="w"> </span><span class="py">defaults</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Product</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">sku</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">price</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">tax_rate</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">0</span><span class="mf">.08</span><span class="p">,</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">8</span><span class="err">%</span><span class="w"> </span><span class="py">sales</span><span class="w"> </span><span class="py">tax</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">discount_pct</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">0</span><span class="mf">.0</span><span class="p">,</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">No</span><span class="w"> </span><span class="py">discount</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">default</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">in_stock</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p>Using nodes with static defaults:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python client - defaults applied automatically</span> </span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">Client</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s2">&#34;localhost&#34;</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">3141</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Only provide required fields, defaults fill in the rest</span> </span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;INSERT (p:Person {id: $id, name: $name}) RETURN p&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;id&#34;</span><span class="p">:</span> <span class="s2">&#34;user-001&#34;</span><span class="p">,</span> <span class="s2">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;Alice&#34;</span><span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">user</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">bindings</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&#34;p&#34;</span><span class="p">]</span> </span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">user</span><span class="p">[</span><span class="s2">&#34;status&#34;</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&#34;active&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">user</span><span class="p">[</span><span class="s2">&#34;role&#34;</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&#34;user&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">user</span><span class="p">[</span><span class="s2">&#34;verified&#34;</span><span class="p">]</span> <span class="o">==</span> <span class="kc">False</span> </span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">user</span><span class="p">[</span><span class="s2">&#34;notifications_enabled&#34;</span><span class="p">]</span> <span class="o">==</span> <span class="kc">True</span> </span></span></code></pre></div> <h3 id="dynamic-function-based-defaults" class="position-relative d-flex align-items-center group"> <span>Dynamic Function-Based Defaults</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="dynamic-function-based-defaults" aria-haspopup="dialog" aria-label="Share link: Dynamic Function-Based Defaults"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Dynamic defaults use built-in functions to generate values at insertion time. These are essential for timestamps, UUIDs, and user context.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Auto</span><span class="err">-</span><span class="py">generate</span><span class="w"> </span><span class="py">identifiers</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">timestamps</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Person</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">gen_random_uuid</span><span class="p">(),</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Random</span><span class="w"> </span><span class="py">UUID</span><span class="w"> </span><span class="py">v4</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">NOW</span><span class="p">(),</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Current</span><span class="w"> </span><span class="py">timestamp</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">updated_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">NOW</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_by</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CURRENT_USER</span><span class="p">()</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Authenticated</span><span class="w"> </span><span class="py">user</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Sequential</span><span class="w"> </span><span class="py">order</span><span class="w"> </span><span class="py">numbers</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Order</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">gen_random_uuid</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">order_number</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">next_order_id</span><span class="p">(),</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Custom</span><span class="w"> </span><span class="py">sequence</span><span class="w"> </span><span class="py">function</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">placed_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">NOW</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">status</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="err">&#39;</span><span class="py">pending</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Date</span><span class="err">-</span><span class="py">based</span><span class="w"> </span><span class="py">defaults</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Event</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">gen_random_uuid</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">event_date</span><span class="w"> </span><span class="py">DATE</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CURRENT_DATE</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">NOW</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">expires_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="p">(</span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">&#39;</span><span class="py">30</span><span class="w"> </span><span class="py">days</span><span class="err">&#39;</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="common-default-functions" class="position-relative d-flex align-items-center group"> <span>Common Default Functions</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="common-default-functions" aria-haspopup="dialog" aria-label="Share link: Common Default Functions"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Geode provides several built-in functions for dynamic defaults:</p> <table> <thead> <tr> <th>Function</th> <th>Returns</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>gen_random_uuid()</code></td> <td>STRING</td> <td>Random UUID v4 (preferred)</td> </tr> <tr> <td><code>uuid_generate_v4()</code></td> <td>STRING</td> <td>Alternative UUID generator</td> </tr> <tr> <td><code>NOW()</code></td> <td>TIMESTAMP</td> <td>Current timestamp with timezone</td> </tr> <tr> <td><code>CURRENT_TIMESTAMP()</code></td> <td>TIMESTAMP</td> <td>Alias for NOW()</td> </tr> <tr> <td><code>CURRENT_DATE()</code></td> <td>DATE</td> <td>Current date without time</td> </tr> <tr> <td><code>CURRENT_TIME()</code></td> <td>TIME</td> <td>Current time without date</td> </tr> <tr> <td><code>CURRENT_USER()</code></td> <td>STRING</td> <td>Authenticated user identifier</td> </tr> <tr> <td><code>CURRENT_DATABASE()</code></td> <td>STRING</td> <td>Database name</td> </tr> </tbody> </table> <p>Example with multiple dynamic defaults:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Go client - dynamic defaults in action </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">package</span> <span class="nx">main</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;context&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;fmt&#34;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;geodedb.com/geode&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">createEvent</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">db</span> <span class="o">*</span><span class="nx">geode</span><span class="p">.</span><span class="nx">DB</span><span class="p">,</span> <span class="nx">name</span> <span class="kt">string</span><span class="p">)</span> <span class="kt">error</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1">// Only provide name, all other fields use defaults </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">result</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">db</span><span class="p">.</span><span class="nf">QueryContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s">&#34;INSERT (e:Event {name: $1}) RETURN e&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nx">name</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">err</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kd">var</span> <span class="nx">event</span> <span class="kd">struct</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">ID</span> <span class="kt">string</span> </span></span><span class="line"><span class="cl"> <span class="nx">Name</span> <span class="kt">string</span> </span></span><span class="line"><span class="cl"> <span class="nx">EventDate</span> <span class="kt">string</span> </span></span><span class="line"><span class="cl"> <span class="nx">CreatedAt</span> <span class="kt">string</span> </span></span><span class="line"><span class="cl"> <span class="nx">ExpiresAt</span> <span class="kt">string</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">result</span><span class="p">.</span><span class="nf">Next</span><span class="p">()</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">result</span><span class="p">.</span><span class="nf">Scan</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">event</span><span class="p">);</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">err</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Created event with auto-generated ID: %s\n&#34;</span><span class="p">,</span> <span class="nx">event</span><span class="p">.</span><span class="nx">ID</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Event date: %s, Expires: %s\n&#34;</span><span class="p">,</span> <span class="nx">event</span><span class="p">.</span><span class="nx">EventDate</span><span class="p">,</span> <span class="nx">event</span><span class="p">.</span><span class="nx">ExpiresAt</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h3 id="expression-based-defaults" class="position-relative d-flex align-items-center group"> <span>Expression-Based Defaults</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="expression-based-defaults" aria-haspopup="dialog" aria-label="Share link: Expression-Based Defaults"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Expression defaults use GQL expressions to compute values based on literal values, functions, or other properties in the same node.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Computed</span><span class="w"> </span><span class="py">string</span><span class="w"> </span><span class="py">expressions</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Order</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">gen_random_uuid</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">sequence_number</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">order_number</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="p">(</span><span class="err">&#39;</span><span class="py">ORD</span><span class="err">-&#39;</span><span class="w"> </span><span class="p">||</span><span class="w"> </span><span class="py">LPAD</span><span class="p">(</span><span class="py">sequence_number</span><span class="p">::</span><span class="nc">TEXT</span><span class="p">,</span><span class="w"> </span><span class="nc">8</span><span class="p">,</span><span class="w"> </span><span class="err">&#39;</span><span class="py">0</span><span class="err">&#39;</span><span class="p">)),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Generates</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">ORD</span><span class="err">-</span><span class="py">00000001</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span><span class="err">&#39;</span><span class="py">ORD</span><span class="err">-</span><span class="py">00000002</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span><span class="py">etc</span><span class="err">.</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">NOW</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">year</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">EXTRACT</span><span class="p">(</span><span class="py">YEAR</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">created_at</span><span class="p">)::</span><span class="nc">TEXT</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">month</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">EXTRACT</span><span class="p">(</span><span class="py">MONTH</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">created_at</span><span class="p">)::</span><span class="nc">TEXT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="nc">Computed</span><span class="w"> </span><span class="py">numeric</span><span class="w"> </span><span class="py">expressions</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Product</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">base_price</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">tax_rate</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">0</span><span class="mf">.08</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">shipping_cost</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">5</span><span class="mf">.99</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_price</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="p">(</span><span class="py">base_price</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="p">(</span><span class="py">1</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">tax_rate</span><span class="p">)</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">shipping_cost</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Conditional</span><span class="w"> </span><span class="py">expressions</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">CASE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">user_type</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="err">&#39;</span><span class="py">premium</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span><span class="err">&#39;</span><span class="py">standard</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span><span class="err">&#39;</span><span class="py">trial</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">max_uploads</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CASE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">user_type</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">premium</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">10000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">user_type</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">standard</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">1000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">user_type</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">trial</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">50</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="py">10</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">storage_gb</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CASE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">user_type</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">premium</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">1000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">user_type</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">standard</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">100</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="py">10</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p>Rust client example:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// Rust client - inserting with computed defaults </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">use</span><span class="w"> </span><span class="n">geode_client</span>::<span class="p">{</span><span class="n">Client</span><span class="p">,</span><span class="w"> </span><span class="n">Value</span><span class="p">};</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">std</span>::<span class="n">collections</span>::<span class="n">HashMap</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">create_product</span><span class="p">(</span><span class="n">client</span>: <span class="kp">&amp;</span><span class="nc">Client</span><span class="p">,</span><span class="w"> </span><span class="n">base_price</span>: <span class="kt">f64</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="p">(),</span><span class="w"> </span><span class="n">geode_client</span>::<span class="n">Error</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">params</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">params</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="s">&#34;base_price&#34;</span><span class="p">,</span><span class="w"> </span><span class="n">Value</span>::<span class="n">Float</span><span class="p">(</span><span class="n">base_price</span><span class="p">));</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// tax_rate, shipping_cost, and total_price all computed via defaults </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="n">execute</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;INSERT (p:Product {base_price: $base_price}) RETURN p&#34;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="o">&amp;</span><span class="n">params</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">row</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">result</span><span class="p">.</span><span class="n">bindings</span><span class="p">.</span><span class="n">first</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">product</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">row</span><span class="p">[</span><span class="s">&#34;p&#34;</span><span class="p">];</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">println!</span><span class="p">(</span><span class="s">&#34;Created product with computed total: </span><span class="si">{:?}</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="n">product</span><span class="p">[</span><span class="s">&#34;total_price&#34;</span><span class="p">]);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(())</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w"> </span></span></span></code></pre></div> <h3 id="update-defaults-on-update" class="position-relative d-flex align-items-center group"> <span>Update Defaults (ON UPDATE)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="update-defaults-on-update" aria-haspopup="dialog" aria-label="Share link: Update Defaults (ON UPDATE)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Some properties should be automatically updated whenever a node is modified. Geode supports ON UPDATE defaults for this use case.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Person</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">NOW</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">updated_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">UPDATE</span><span class="p">,</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Auto</span><span class="err">-</span><span class="py">update</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">modification</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">modified_by</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CURRENT_USER</span><span class="p">()</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">UPDATE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Usage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">INSERT</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">user</span><span class="err">-</span><span class="py">001</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">Alice</span><span class="err">&#39;</span><span class="p">})</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">created_at</span><span class="p">:</span><span class="w"> </span><span class="nc">2026</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">24</span><span class="w"> </span><span class="py">10</span><span class="p">:</span><span class="nc">00</span><span class="p">:</span><span class="nc">00</span><span class="p">,</span><span class="w"> </span><span class="py">updated_at</span><span class="p">:</span><span class="w"> </span><span class="nc">2026</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">24</span><span class="w"> </span><span class="py">10</span><span class="p">:</span><span class="nc">00</span><span class="p">:</span><span class="nc">00</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">UPDATE</span><span class="w"> </span><span class="py">Person</span><span class="w"> </span><span class="py">SET</span><span class="w"> </span><span class="py">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">Alice</span><span class="w"> </span><span class="py">Smith</span><span class="err">&#39;</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">user</span><span class="err">-</span><span class="py">001</span><span class="err">&#39;;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">created_at</span><span class="p">:</span><span class="w"> </span><span class="nc">2026</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">24</span><span class="w"> </span><span class="py">10</span><span class="p">:</span><span class="nc">00</span><span class="p">:</span><span class="nc">00</span><span class="p">,</span><span class="w"> </span><span class="py">updated_at</span><span class="p">:</span><span class="w"> </span><span class="nc">2026</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">24</span><span class="w"> </span><span class="py">11</span><span class="p">:</span><span class="nc">30</span><span class="p">:</span><span class="nc">00</span><span class="w"> </span><span class="p">(</span><span class="py">auto</span><span class="err">-</span><span class="py">updated</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div> <h3 id="managing-defaults-after-schema-creation" class="position-relative d-flex align-items-center group"> <span>Managing Defaults After Schema Creation</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="managing-defaults-after-schema-creation" aria-haspopup="dialog" aria-label="Share link: Managing Defaults After Schema Creation"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Defaults can be added, modified, or removed after node or edge types are defined.</p> <h4 id="adding-defaults" class="position-relative d-flex align-items-center group"> <span>Adding Defaults</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="adding-defaults" aria-haspopup="dialog" aria-label="Share link: Adding Defaults"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Add</span><span class="w"> </span><span class="py">default</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">existing</span><span class="w"> </span><span class="py">property</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ALTER</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Person</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ALTER</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">status</span><span class="w"> </span><span class="py">SET</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="err">&#39;</span><span class="py">active</span><span class="err">&#39;;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Add</span><span class="w"> </span><span class="py">new</span><span class="w"> </span><span class="py">property</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">default</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ALTER</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Person</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ADD</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">last_login</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="changing-defaults" class="position-relative d-flex align-items-center group"> <span>Changing Defaults</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="changing-defaults" aria-haspopup="dialog" aria-label="Share link: Changing Defaults"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Update</span><span class="w"> </span><span class="py">default</span><span class="w"> </span><span class="py">value</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ALTER</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">User</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ALTER</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">max_connections</span><span class="w"> </span><span class="py">SET</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">1000</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Was</span><span class="w"> </span><span class="py">100</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Change</span><span class="w"> </span><span class="py">default</span><span class="w"> </span><span class="py">function</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ALTER</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Session</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ALTER</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">expires_at</span><span class="w"> </span><span class="py">SET</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="p">(</span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">&#39;</span><span class="py">24</span><span class="w"> </span><span class="py">hours</span><span class="err">&#39;</span><span class="p">)</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Was</span><span class="w"> </span><span class="py">1</span><span class="w"> </span><span class="py">hour</span><span class="w"> </span></span></span></code></pre></div> <h4 id="removing-defaults" class="position-relative d-flex align-items-center group"> <span>Removing Defaults</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="removing-defaults" aria-haspopup="dialog" aria-label="Share link: Removing Defaults"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Remove</span><span class="w"> </span><span class="py">default</span><span class="p">,</span><span class="w"> </span><span class="py">making</span><span class="w"> </span><span class="py">property</span><span class="w"> </span><span class="py">truly</span><span class="w"> </span><span class="py">optional</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ALTER</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Person</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ALTER</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">theme</span><span class="w"> </span><span class="py">DROP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Now</span><span class="w"> </span><span class="py">inserts</span><span class="w"> </span><span class="py">without</span><span class="w"> </span><span class="err">&#39;</span><span class="py">theme</span><span class="err">&#39;</span><span class="w"> </span><span class="py">will</span><span class="w"> </span><span class="py">have</span><span class="w"> </span><span class="py">NULL</span><span class="w"> </span><span class="py">instead</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="err">&#39;</span><span class="py">light</span><span class="err">&#39;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="querying-default-definitions" class="position-relative d-flex align-items-center group"> <span>Querying Default Definitions</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="querying-default-definitions" aria-haspopup="dialog" aria-label="Share link: Querying Default Definitions"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">View</span><span class="w"> </span><span class="py">defaults</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">a</span><span class="w"> </span><span class="py">node</span><span class="w"> </span><span class="kd">type</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">SHOW</span><span class="w"> </span><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Person</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">List</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">properties</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">defaults</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span><span class="py">property_name</span><span class="p">,</span><span class="w"> </span><span class="py">default_value</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">SYSTEM</span><span class="err">.</span><span class="py">PROPERTY_METADATA</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">node_type</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">Person</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">default_value</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="default-value-overrides" class="position-relative d-flex align-items-center group"> <span>Default Value Overrides</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="default-value-overrides" aria-haspopup="dialog" aria-label="Share link: Default Value Overrides"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Explicitly provided values always override defaults:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python - explicit values override defaults</span> </span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s2">&#34;localhost&#34;</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">3141</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Uses defaults</span> </span></span><span class="line"><span class="cl"> <span class="n">result1</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;INSERT (p:Person {name: &#39;Alice&#39;}) RETURN p&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="c1"># p.status = &#39;active&#39;, p.role = &#39;user&#39;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Overrides defaults</span> </span></span><span class="line"><span class="cl"> <span class="n">result2</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;INSERT (p:Person {name: &#39;Bob&#39;, status: &#39;suspended&#39;, role: &#39;admin&#39;}) RETURN p&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="c1"># p.status = &#39;suspended&#39;, p.role = &#39;admin&#39;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Partial override</span> </span></span><span class="line"><span class="cl"> <span class="n">result3</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;INSERT (p:Person {name: &#39;Carol&#39;, status: &#39;pending&#39;}) RETURN p&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{}</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="c1"># p.status = &#39;pending&#39;, p.role = &#39;user&#39; (default)</span> </span></span></code></pre></div> <h3 id="advanced-patterns" class="position-relative d-flex align-items-center group"> <span>Advanced Patterns</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="advanced-patterns" aria-haspopup="dialog" aria-label="Share link: Advanced Patterns"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="multi-tier-defaults" class="position-relative d-flex align-items-center group"> <span>Multi-Tier Defaults</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="multi-tier-defaults" aria-haspopup="dialog" aria-label="Share link: Multi-Tier Defaults"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Cascade</span><span class="w"> </span><span class="py">defaults</span><span class="w"> </span><span class="py">based</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">parent</span><span class="w"> </span><span class="py">values</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Subscription</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">tier</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="w"> </span><span class="py">CHECK</span><span class="w"> </span><span class="p">(</span><span class="py">tier</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="p">(</span><span class="err">&#39;</span><span class="py">free</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span><span class="err">&#39;</span><span class="py">basic</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span><span class="err">&#39;</span><span class="py">premium</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span><span class="err">&#39;</span><span class="py">enterprise</span><span class="err">&#39;</span><span class="p">)),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">price</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CASE</span><span class="w"> </span><span class="py">tier</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">free</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">basic</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">9</span><span class="mf">.99</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">premium</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">29</span><span class="mf">.99</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">enterprise</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">99</span><span class="mf">.99</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">max_users</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CASE</span><span class="w"> </span><span class="py">tier</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">free</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">basic</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">5</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">premium</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">50</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="py">1000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">support_level</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CASE</span><span class="w"> </span><span class="py">tier</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">enterprise</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">priority</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">premium</span><span class="err">&#39;</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">standard</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="err">&#39;</span><span class="py">community</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="temporal-defaults-with-business-logic" class="position-relative d-flex align-items-center group"> <span>Temporal Defaults with Business Logic</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="temporal-defaults-with-business-logic" aria-haspopup="dialog" aria-label="Share link: Temporal Defaults with Business Logic"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Contract</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">signed_date</span><span class="w"> </span><span class="py">DATE</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CURRENT_DATE</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">effective_date</span><span class="w"> </span><span class="py">DATE</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CURRENT_DATE</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">term_months</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">12</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">renewal_date</span><span class="w"> </span><span class="py">DATE</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="p">(</span><span class="py">effective_date</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="p">(</span><span class="py">term_months</span><span class="w"> </span><span class="p">||</span><span class="w"> </span><span class="err">&#39;</span><span class="w"> </span><span class="py">months</span><span class="err">&#39;</span><span class="p">)::</span><span class="nc">INTERVAL</span><span class="p">),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">next_review</span><span class="w"> </span><span class="py">DATE</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="p">(</span><span class="py">effective_date</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">&#39;</span><span class="py">6</span><span class="w"> </span><span class="py">months</span><span class="err">&#39;</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="audit-trail-defaults" class="position-relative d-flex align-items-center group"> <span>Audit Trail Defaults</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="audit-trail-defaults" aria-haspopup="dialog" aria-label="Share link: Audit Trail Defaults"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">NODE</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">AuditedEntity</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">gen_random_uuid</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">NOW</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_by</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CURRENT_USER</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_from_ip</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CLIENT_IP</span><span class="p">(),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">updated_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">UPDATE</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">updated_by</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">CURRENT_USER</span><span class="p">()</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">UPDATE</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">version</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="performance-considerations" class="position-relative d-flex align-items-center group"> <span>Performance Considerations</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-considerations" aria-haspopup="dialog" aria-label="Share link: Performance Considerations"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><strong>Static Defaults</strong>: Zero overhead, resolved at parse time</li> <li><strong>Function Defaults</strong>: Microsecond overhead per call (NOW(), UUID generation)</li> <li><strong>Expression Defaults</strong>: Depends on expression complexity</li> <li><strong>Computed Defaults</strong>: May require property ordering in schema</li> </ul> <h3 id="best-practices" class="position-relative d-flex align-items-center group"> <span>Best Practices</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="best-practices" aria-haspopup="dialog" aria-label="Share link: Best Practices"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ol> <li><strong>Use Defaults for Optional Fields</strong>: Every nullable field should consider if a default makes sense</li> <li><strong>Prefer Static Over Dynamic</strong>: Use static defaults when values don&rsquo;t change per-insert</li> <li><strong>Document Default Behavior</strong>: Comment why specific defaults were chosen</li> <li><strong>Test Default Application</strong>: Verify defaults in unit tests</li> <li><strong>Version Defaults</strong>: Track default changes in migration scripts</li> <li><strong>Avoid Expensive Computations</strong>: Don&rsquo;t use complex subqueries in defaults</li> <li><strong>Set Sensible Defaults</strong>: Choose values that work for 80%+ of cases</li> <li><strong>Use ON UPDATE Sparingly</strong>: Only for audit fields and timestamps</li> </ol> <h3 id="common-patterns" class="position-relative d-flex align-items-center group"> <span>Common Patterns</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="common-patterns" aria-haspopup="dialog" aria-label="Share link: Common Patterns"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p><strong>User Account Initialization</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">status</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">pending</span><span class="err">&#39;</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">requires</span><span class="w"> </span><span class="py">email</span><span class="w"> </span><span class="py">verification</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">verified</span><span class="p">:</span><span class="w"> </span><span class="nc">false</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">must</span><span class="w"> </span><span class="py">confirm</span><span class="w"> </span><span class="py">email</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">role</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">user</span><span class="err">&#39;</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">standard</span><span class="w"> </span><span class="py">permissions</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">created_at</span><span class="p">:</span><span class="w"> </span><span class="nc">NOW</span><span class="p">()</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">track</span><span class="w"> </span><span class="py">registration</span><span class="w"> </span><span class="py">time</span><span class="w"> </span></span></span></code></pre></div><p><strong>Order Management</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">status</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">draft</span><span class="err">&#39;</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">orders</span><span class="w"> </span><span class="py">start</span><span class="w"> </span><span class="py">as</span><span class="w"> </span><span class="py">drafts</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">placed_at</span><span class="p">:</span><span class="w"> </span><span class="nc">NULL</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">set</span><span class="w"> </span><span class="py">when</span><span class="w"> </span><span class="py">order</span><span class="w"> </span><span class="py">confirmed</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">total</span><span class="p">:</span><span class="w"> </span><span class="nc">0</span><span class="mf">.0</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">computed</span><span class="w"> </span><span class="py">from</span><span class="w"> </span><span class="py">line</span><span class="w"> </span><span class="py">items</span><span class="w"> </span></span></span></code></pre></div><p><strong>Content Creation</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">published</span><span class="p">:</span><span class="w"> </span><span class="nc">false</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">draft</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">default</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">created_at</span><span class="p">:</span><span class="w"> </span><span class="nc">NOW</span><span class="p">()</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">auto</span><span class="err">-</span><span class="py">timestamp</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">author</span><span class="p">:</span><span class="w"> </span><span class="nc">CURRENT_USER</span><span class="p">()</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="py">track</span><span class="w"> </span><span class="py">creator</span><span class="w"> </span></span></span></code></pre></div> <h3 id="troubleshooting" class="position-relative d-flex align-items-center group"> <span>Troubleshooting</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="troubleshooting" aria-haspopup="dialog" aria-label="Share link: Troubleshooting"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p><strong>Default not applied</strong>: Check if property was explicitly set to NULL</p> <p><strong>Expression error</strong>: Verify referenced properties exist and are defined before the defaulted property</p> <p><strong>Wrong timestamp</strong>: Ensure timezone configuration matches expectations</p> <p><strong>UUID collisions</strong>: Use <code>gen_random_uuid()</code> instead of custom generation</p> <h3 id="related-topics" class="position-relative d-flex align-items-center group"> <span>Related Topics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="related-topics" aria-haspopup="dialog" aria-label="Share link: Related Topics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><a href="/tags/constraints" >Constraints</a> - NOT NULL and CHECK constraints that work with defaults</li> <li><a href="/tags/nullable" >Nullable</a> - Understanding NULL vs default value behavior</li> <li><a href="/tags/validation" >Validation</a> - Validating default values meet business rules</li> <li><a href="/tags/schema/" >Schemas</a> - Schema design with default values</li> <li><a href="/tags/migration/" >Migrations</a> - Adding defaults in schema migrations</li> </ul>

Related Articles

No articles found with this tag yet.

Back to Home