<!-- CANARY: REQ=REQ-GQL-017-STATUS; FEATURE="Docs"; ASPECT=StatusWireMapping; STATUS=TESTED; OWNER=engine; UPDATED=2026-01-16 -->
<p>Geode follows ISO/IEC SQL error code standards for consistent error reporting across all client libraries and interfaces. This reference provides complete documentation of all error codes, their meanings, and resolution strategies.</p>
<h3 id="error-code-format" class="position-relative d-flex align-items-center group">
<span>Error Code Format</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="error-code-format"
aria-haspopup="dialog"
aria-label="Share link: Error Code Format">
<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><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>Geode uses two types of error codes:</p>
<ol>
<li><strong>GQLSTATUS Codes</strong>: 5-character SQL-standard status codes (e.g., <code>00000</code>, <code>42000</code>)</li>
<li><strong>Internal Error Codes</strong>: Descriptive error names (e.g., <code>ERR_OOM</code>, <code>ERR_FLOAT_NAN</code>)</li>
</ol>
<h4 id="error-response-structure" class="position-relative d-flex align-items-center group">
<span>Error Response Structure</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="error-response-structure"
aria-haspopup="dialog"
aria-label="Share link: Error Response Structure">
<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>All error responses follow this JSON format:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"status_class"</span><span class="p">:</span> <span class="s2">"42000"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"status"</span><span class="p">:</span> <span class="s2">"42001"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"message"</span><span class="p">:</span> <span class="s2">"Undefined table: NonExistentTable"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"details"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"table_name"</span><span class="p">:</span> <span class="s2">"NonExistentTable"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"suggestion"</span><span class="p">:</span> <span class="s2">"Check table name spelling or create the table first"</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></code></pre></div>
<h3 id="gqlstatus-codes" class="position-relative d-flex align-items-center group">
<span>GQLSTATUS Codes</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="gqlstatus-codes"
aria-haspopup="dialog"
aria-label="Share link: GQLSTATUS Codes">
<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="success-codes" class="position-relative d-flex align-items-center group">
<span>Success Codes</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="success-codes"
aria-haspopup="dialog"
aria-label="Share link: Success Codes">
<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><table>
<thead>
<tr>
<th>Code</th>
<th>Class</th>
<th>Description</th>
<th>Action Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>00000</code></td>
<td>Success</td>
<td>Query executed successfully</td>
<td>None</td>
</tr>
<tr>
<td><code>01000</code></td>
<td>Warning</td>
<td>Warning (with successful completion)</td>
<td>Review warning message</td>
</tr>
<tr>
<td><code>02000</code></td>
<td>No Data</td>
<td>Query returned no rows</td>
<td>None (expected in some cases)</td>
</tr>
</tbody>
</table>
<p><strong>Example</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="err">--</span><span class="w"> </span><span class="py">Returns</span><span class="w"> </span><span class="py">00000</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">success</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="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">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Alice</span><span class="err">'</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">Returns</span><span class="w"> </span><span class="py">02000</span><span class="w"> </span><span class="py">if</span><span class="w"> </span><span class="py">no</span><span class="w"> </span><span class="py">matches</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</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">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">NonExistent</span><span class="err">'</span><span class="p">})</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="client-errors-class-0a" class="position-relative d-flex align-items-center group">
<span>Client Errors (Class 0A)</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="client-errors-class-0a"
aria-haspopup="dialog"
aria-label="Share link: Client Errors (Class 0A)">
<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><table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Common Causes</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>0A000</code></td>
<td>Feature not supported</td>
<td>Unsupported GQL feature or operation</td>
<td>Check GQL compliance documentation</td>
</tr>
<tr>
<td><code>0A001</code></td>
<td>Transaction already active</td>
<td>BEGIN called while transaction active</td>
<td>COMMIT or ROLLBACK current transaction first</td>
</tr>
<tr>
<td><code>0A002</code></td>
<td>No active transaction</td>
<td>COMMIT/ROLLBACK without BEGIN</td>
<td>Start transaction with BEGIN before committing</td>
</tr>
</tbody>
</table>
<p><strong>Examples</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="err">--</span><span class="w"> </span><span class="py">0A001</span><span class="p">:</span><span class="w"> </span><span class="nc">Transaction</span><span class="w"> </span><span class="py">already</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">BEGIN</span><span class="w"> </span><span class="py">TRANSACTION</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">BEGIN</span><span class="w"> </span><span class="py">TRANSACTION</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</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">0A002</span><span class="p">:</span><span class="w"> </span><span class="nc">No</span><span class="w"> </span><span class="py">active</span><span class="w"> </span><span class="py">transaction</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">COMMIT</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</span><span class="w"> </span><span class="p">(</span><span class="py">no</span><span class="w"> </span><span class="py">transaction</span><span class="w"> </span><span class="py">started</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="err">--</span><span class="w"> </span><span class="py">Correct</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">BEGIN</span><span class="w"> </span><span class="py">TRANSACTION</span><span class="err">;</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="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">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Bob</span><span class="err">'</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="py">COMMIT</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="data-exception-class-22" class="position-relative d-flex align-items-center group">
<span>Data Exception (Class 22)</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="data-exception-class-22"
aria-haspopup="dialog"
aria-label="Share link: Data Exception (Class 22)">
<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><table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Common Causes</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>22000</code></td>
<td>Data exception</td>
<td>General data error</td>
<td>See specific code</td>
</tr>
<tr>
<td><code>22001</code></td>
<td>String data, right truncation</td>
<td>String exceeds maximum length</td>
<td>Reduce string length or increase limit</td>
</tr>
<tr>
<td><code>22002</code></td>
<td>Null value, no indicator</td>
<td>NULL in non-nullable context</td>
<td>Provide non-null value</td>
</tr>
<tr>
<td><code>22003</code></td>
<td>Numeric value out of range</td>
<td>Number too large/small for type</td>
<td>Use appropriate numeric type</td>
</tr>
<tr>
<td><code>22004</code></td>
<td>Null value not allowed</td>
<td>NULL where NOT NULL constraint exists</td>
<td>Provide non-null value</td>
</tr>
<tr>
<td><code>22005</code></td>
<td>Error in assignment</td>
<td>Type mismatch in assignment</td>
<td>Check type compatibility</td>
</tr>
<tr>
<td><code>22007</code></td>
<td>Invalid datetime format</td>
<td>Malformed date/time string</td>
<td>Use ISO 8601 format</td>
</tr>
<tr>
<td><code>22008</code></td>
<td>Datetime field overflow</td>
<td>Date/time value out of valid range</td>
<td>Check date/time bounds</td>
</tr>
<tr>
<td><code>22012</code></td>
<td>Division by zero</td>
<td>Arithmetic division by zero</td>
<td>Add zero check before division</td>
</tr>
<tr>
<td><code>22015</code></td>
<td>Interval field overflow</td>
<td>Interval exceeds maximum</td>
<td>Use smaller interval</td>
</tr>
<tr>
<td><code>22018</code></td>
<td>Invalid character value</td>
<td>Invalid encoding or character</td>
<td>Check string encoding (UTF-8)</td>
</tr>
<tr>
<td><code>22019</code></td>
<td>Invalid escape character</td>
<td>Bad escape sequence in string</td>
<td>Use valid escape sequences</td>
</tr>
<tr>
<td><code>22021</code></td>
<td>Character not in repertoire</td>
<td>Character not supported in encoding</td>
<td>Use supported UTF-8 characters</td>
</tr>
<tr>
<td><code>22023</code></td>
<td>Invalid parameter value</td>
<td>Function parameter invalid</td>
<td>Check parameter constraints</td>
</tr>
<tr>
<td><code>22025</code></td>
<td>Invalid escape sequence</td>
<td>Bad regex or LIKE escape</td>
<td>Fix escape sequence</td>
</tr>
<tr>
<td><code>22027</code></td>
<td>Trim error</td>
<td>Invalid TRIM specification</td>
<td>Check TRIM syntax</td>
</tr>
</tbody>
</table>
<p><strong>Examples</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="err">--</span><span class="w"> </span><span class="py">22001</span><span class="p">:</span><span class="w"> </span><span class="nc">String</span><span class="w"> </span><span class="py">truncation</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="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">name</span><span class="p">:</span><span class="w"> </span><span class="nc">Char</span><span class="p">(</span><span class="err">'</span><span class="py">VeryLongNameThatExceedsLimit</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">10</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">ERROR</span><span class="p">:</span><span class="w"> </span><span class="nc">String</span><span class="w"> </span><span class="err">'</span><span class="py">VeryLongNameThatExceedsLimit</span><span class="err">'</span><span class="w"> </span><span class="py">exceeds</span><span class="w"> </span><span class="py">Char</span><span class="p">(</span><span class="py">10</span><span class="p">)</span><span class="w"> </span><span class="py">limit</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">22003</span><span class="p">:</span><span class="w"> </span><span class="nc">Numeric</span><span class="w"> </span><span class="py">out</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">range</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">SmallInt</span><span class="p">(</span><span class="py">100000</span><span class="p">)</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</span><span class="p">:</span><span class="w"> </span><span class="nc">Value</span><span class="w"> </span><span class="py">exceeds</span><span class="w"> </span><span class="py">i16</span><span class="w"> </span><span class="py">range</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">22007</span><span class="p">:</span><span class="w"> </span><span class="nc">Invalid</span><span class="w"> </span><span class="py">datetime</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">Date</span><span class="p">(</span><span class="err">'</span><span class="py">invalid</span><span class="err">-</span><span class="py">date</span><span class="err">'</span><span class="p">)</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</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">22012</span><span class="p">:</span><span class="w"> </span><span class="nc">Division</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">zero</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">10</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">0</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</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">Correct</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">RETURN</span><span class="w"> </span><span class="py">10</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">CASE</span><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="nv">$divisor</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">1</span><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="nv">$divisor</span><span class="w"> </span><span class="py">END</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="integrity-constraint-violation-class-23" class="position-relative d-flex align-items-center group">
<span>Integrity Constraint Violation (Class 23)</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="integrity-constraint-violation-class-23"
aria-haspopup="dialog"
aria-label="Share link: Integrity Constraint Violation (Class 23)">
<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><table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Common Causes</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>23000</code></td>
<td>Integrity constraint violation</td>
<td>General constraint violation</td>
<td>See specific code</td>
</tr>
<tr>
<td><code>23001</code></td>
<td>Restrict violation</td>
<td>Foreign key constraint prevents delete</td>
<td>Delete dependent records first</td>
</tr>
<tr>
<td><code>23502</code></td>
<td>Not null violation</td>
<td>NULL value in NOT NULL column</td>
<td>Provide non-null value</td>
</tr>
<tr>
<td><code>23503</code></td>
<td>Foreign key violation</td>
<td>Referenced record doesn’t exist</td>
<td>Create referenced record first</td>
</tr>
<tr>
<td><code>23505</code></td>
<td>Unique violation</td>
<td>Duplicate value in unique index</td>
<td>Use unique value</td>
</tr>
<tr>
<td><code>23514</code></td>
<td>Check constraint violation</td>
<td>Value fails CHECK constraint</td>
<td>Provide valid value</td>
</tr>
</tbody>
</table>
<p><strong>Examples</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="err">--</span><span class="w"> </span><span class="py">23502</span><span class="p">:</span><span class="w"> </span><span class="nc">Not</span><span class="w"> </span><span class="py">null</span><span class="w"> </span><span class="py">violation</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="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">age</span><span class="p">:</span><span class="w"> </span><span class="nc">null</span><span class="p">})</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</span><span class="w"> </span><span class="py">if</span><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="py">has</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">constraint</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">23505</span><span class="p">:</span><span class="w"> </span><span class="nc">Unique</span><span class="w"> </span><span class="py">violation</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="p">(</span><span class="py">p1</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="p">[</span><span class="nc">email</span><span class="w"> </span><span class="py">protected</span><span class="p">]</span><span class="err">'</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="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">p2</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="p">[</span><span class="nc">email</span><span class="w"> </span><span class="py">protected</span><span class="p">]</span><span class="err">'</span><span class="p">})</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</span><span class="w"> </span><span class="py">if</span><span class="w"> </span><span class="py">email</span><span class="w"> </span><span class="py">is</span><span class="w"> </span><span class="py">UNIQUE</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">23503</span><span class="p">:</span><span class="w"> </span><span class="nc">Foreign</span><span class="w"> </span><span class="py">key</span><span class="w"> </span><span class="py">violation</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="p">(</span><span class="py">o</span><span class="p">:</span><span class="nc">Order</span><span class="w"> </span><span class="p">{</span><span class="py">customer_id</span><span class="p">:</span><span class="w"> </span><span class="nc">999</span><span class="p">})</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</span><span class="w"> </span><span class="py">if</span><span class="w"> </span><span class="py">customer</span><span class="w"> </span><span class="py">999</span><span class="w"> </span><span class="py">doesn</span><span class="err">'</span><span class="py">t</span><span class="w"> </span><span class="py">exist</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="syntax-error-or-access-violation-class-42" class="position-relative d-flex align-items-center group">
<span>Syntax Error or Access Violation (Class 42)</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="syntax-error-or-access-violation-class-42"
aria-haspopup="dialog"
aria-label="Share link: Syntax Error or Access Violation (Class 42)">
<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><table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Common Causes</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>42000</code></td>
<td>Syntax error or access rule violation</td>
<td>General syntax error</td>
<td>Check GQL syntax</td>
</tr>
<tr>
<td><code>42001</code></td>
<td>Undefined object</td>
<td>Table, column, or function not found</td>
<td>Verify object names</td>
</tr>
<tr>
<td><code>42002</code></td>
<td>Duplicate object</td>
<td>Object already exists</td>
<td>Use IF NOT EXISTS or drop first</td>
</tr>
<tr>
<td><code>42601</code></td>
<td>Syntax error</td>
<td>Malformed GQL query</td>
<td>Fix query syntax</td>
</tr>
<tr>
<td><code>42602</code></td>
<td>Invalid name</td>
<td>Reserved keyword or invalid identifier</td>
<td>Use quotes for identifiers</td>
</tr>
<tr>
<td><code>42611</code></td>
<td>Invalid column definition</td>
<td>Bad column specification</td>
<td>Check column syntax</td>
</tr>
<tr>
<td><code>42701</code></td>
<td>Duplicate column</td>
<td>Column specified multiple times</td>
<td>Remove duplicate</td>
</tr>
<tr>
<td><code>42703</code></td>
<td>Undefined column</td>
<td>Column doesn’t exist</td>
<td>Check column name</td>
</tr>
<tr>
<td><code>42704</code></td>
<td>Undefined object</td>
<td>Referenced object not found</td>
<td>Create object or fix reference</td>
</tr>
<tr>
<td><code>42710</code></td>
<td>Duplicate object</td>
<td>Object name collision</td>
<td>Use unique name</td>
</tr>
<tr>
<td><code>42712</code></td>
<td>Duplicate alias</td>
<td>Alias used multiple times</td>
<td>Use unique aliases</td>
</tr>
<tr>
<td><code>42723</code></td>
<td>Duplicate function</td>
<td>Function already defined</td>
<td>Drop function or use different name</td>
</tr>
<tr>
<td><code>42883</code></td>
<td>Undefined function</td>
<td>Function not found</td>
<td>Check function name and arguments</td>
</tr>
<tr>
<td><code>42939</code></td>
<td>Reserved name</td>
<td>Using reserved keyword</td>
<td>Quote identifier or use different name</td>
</tr>
<tr>
<td><code>42P01</code></td>
<td>Undefined table</td>
<td>Table doesn’t exist</td>
<td>Create table first</td>
</tr>
<tr>
<td><code>42P02</code></td>
<td>Undefined parameter</td>
<td>Parameter not provided</td>
<td>Supply parameter value</td>
</tr>
<tr>
<td><code>42P07</code></td>
<td>Duplicate table</td>
<td>Table already exists</td>
<td>Use IF NOT EXISTS or different name</td>
</tr>
</tbody>
</table>
<p><strong>Examples</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="err">--</span><span class="w"> </span><span class="py">42001</span><span class="p">:</span><span class="w"> </span><span class="nc">Undefined</span><span class="w"> </span><span class="py">object</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">NonExistentLabel</span><span class="p">)</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">n</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">ERROR</span><span class="p">:</span><span class="w"> </span><span class="nc">Label</span><span class="w"> </span><span class="err">'</span><span class="py">NonExistentLabel</span><span class="err">'</span><span class="w"> </span><span class="py">not</span><span class="w"> </span><span class="py">found</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">42002</span><span class="p">:</span><span class="w"> </span><span class="nc">Duplicate</span><span class="w"> </span><span class="py">object</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">INDEX</span><span class="w"> </span><span class="py">person_email</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Person</span><span class="p">(</span><span class="py">email</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="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">person_email</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Person</span><span class="p">(</span><span class="py">email</span><span class="p">)</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</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">42601</span><span class="p">:</span><span class="w"> </span><span class="nc">Syntax</span><span class="w"> </span><span class="py">error</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">n</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">30</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</span><span class="p">:</span><span class="w"> </span><span class="nc">WHERE</span><span class="w"> </span><span class="py">after</span><span class="w"> </span><span class="py">RETURN</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">42P01</span><span class="p">:</span><span class="w"> </span><span class="nc">Undefined</span><span class="w"> </span><span class="py">table</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">30</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">n</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">ERROR</span><span class="w"> </span><span class="py">if</span><span class="w"> </span><span class="py">Person</span><span class="w"> </span><span class="py">label</span><span class="w"> </span><span class="py">doesn</span><span class="err">'</span><span class="py">t</span><span class="w"> </span><span class="py">exist</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">Correct</span><span class="p">:</span><span class="w"> </span><span class="nc">Use</span><span class="w"> </span><span class="py">IF</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">EXISTS</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">INDEX</span><span class="w"> </span><span class="py">IF</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">EXISTS</span><span class="w"> </span><span class="py">person_email</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Person</span><span class="p">(</span><span class="py">email</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="insufficient-resources-class-53" class="position-relative d-flex align-items-center group">
<span>Insufficient Resources (Class 53)</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="insufficient-resources-class-53"
aria-haspopup="dialog"
aria-label="Share link: Insufficient Resources (Class 53)">
<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><table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Common Causes</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>53000</code></td>
<td>Insufficient resources</td>
<td>General resource issue</td>
<td>Increase resources or optimize query</td>
</tr>
<tr>
<td><code>53100</code></td>
<td>Disk full</td>
<td>Out of disk space</td>
<td>Free disk space</td>
</tr>
<tr>
<td><code>53200</code></td>
<td>Out of memory</td>
<td>Insufficient RAM</td>
<td>Increase memory or reduce query complexity</td>
</tr>
<tr>
<td><code>53300</code></td>
<td>Too many connections</td>
<td>Connection pool exhausted</td>
<td>Close unused connections or increase pool size</td>
</tr>
<tr>
<td><code>53400</code></td>
<td>Configuration limit exceeded</td>
<td>Limit setting reached</td>
<td>Adjust configuration limits</td>
</tr>
</tbody>
</table>
<p><strong>Examples</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="err">--</span><span class="w"> </span><span class="py">53200</span><span class="p">:</span><span class="w"> </span><span class="nc">Out</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">memory</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="err">*</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">m</span><span class="p">)</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</span><span class="p">:</span><span class="w"> </span><span class="nc">Unbounded</span><span class="w"> </span><span class="py">path</span><span class="w"> </span><span class="py">may</span><span class="w"> </span><span class="py">exhaust</span><span class="w"> </span><span class="py">memory</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">n</span><span class="p">,</span><span class="w"> </span><span class="py">m</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">Correct</span><span class="p">:</span><span class="w"> </span><span class="nc">Limit</span><span class="w"> </span><span class="py">path</span><span class="w"> </span><span class="py">length</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="err">*</span><span class="py">1</span><span class="err">.</span><span class="mf">.5</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">m</span><span class="p">)</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">n</span><span class="err">.</span><span class="py">id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">123</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">n</span><span class="p">,</span><span class="w"> </span><span class="py">m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">100</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="system-error-class-58" class="position-relative d-flex align-items-center group">
<span>System Error (Class 58)</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="system-error-class-58"
aria-haspopup="dialog"
aria-label="Share link: System Error (Class 58)">
<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><table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Common Causes</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>58000</code></td>
<td>System error</td>
<td>General I/O error</td>
<td>Check system logs</td>
</tr>
<tr>
<td><code>58030</code></td>
<td>I/O error</td>
<td>Disk read/write failure</td>
<td>Check disk health</td>
</tr>
<tr>
<td><code>58P01</code></td>
<td>Undefined file</td>
<td>File not found</td>
<td>Verify file path</td>
</tr>
<tr>
<td><code>58P02</code></td>
<td>Duplicate file</td>
<td>File already exists</td>
<td>Delete file or use different path</td>
</tr>
</tbody>
</table>
<h4 id="internal-error-class-xx" class="position-relative d-flex align-items-center group">
<span>Internal Error (Class XX)</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="internal-error-class-xx"
aria-haspopup="dialog"
aria-label="Share link: Internal Error (Class XX)">
<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><table>
<thead>
<tr>
<th>Code</th>
<th>Description</th>
<th>Common Causes</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>XX000</code></td>
<td>Internal error</td>
<td>Database bug</td>
<td>Report to developers with reproduction steps</td>
</tr>
<tr>
<td><code>XX001</code></td>
<td>Data corrupted</td>
<td>Storage corruption</td>
<td>Restore from backup</td>
</tr>
<tr>
<td><code>XX002</code></td>
<td>Index corrupted</td>
<td>Index integrity violation</td>
<td>Rebuild index</td>
</tr>
</tbody>
</table>
<h3 id="internal-error-codes" class="position-relative d-flex align-items-center group">
<span>Internal Error Codes</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="internal-error-codes"
aria-haspopup="dialog"
aria-label="Share link: Internal Error Codes">
<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="memory-errors" class="position-relative d-flex align-items-center group">
<span>Memory Errors</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="memory-errors"
aria-haspopup="dialog"
aria-label="Share link: Memory Errors">
<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><table>
<thead>
<tr>
<th>Error Code</th>
<th>Description</th>
<th>Context</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ERR_OOM</code></td>
<td>Out of memory</td>
<td>Memory allocation failed</td>
<td>Reduce query complexity or increase system memory</td>
</tr>
<tr>
<td><code>ERR_ALLOCATION_FAILED</code></td>
<td>Memory allocation error</td>
<td>Allocator returned error</td>
<td>Check system resources</td>
</tr>
</tbody>
</table>
<p><strong>Example</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="err">--</span><span class="w"> </span><span class="py">ERR_OOM</span><span class="p">:</span><span class="w"> </span><span class="nc">Large</span><span class="w"> </span><span class="py">aggregation</span><span class="w"> </span><span class="py">without</span><span class="w"> </span><span class="py">limits</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="err">*</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">m</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">collect</span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">all_nodes</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">May</span><span class="w"> </span><span class="py">cause</span><span class="w"> </span><span class="py">OOM</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">Solution</span><span class="p">:</span><span class="w"> </span><span class="nc">Add</span><span class="w"> </span><span class="py">limits</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="err">*</span><span class="py">1</span><span class="err">.</span><span class="mf">.3</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">m</span><span class="p">)</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">n</span><span class="err">.</span><span class="py">id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">123</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">collect</span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">nearby_nodes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">1000</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="type-errors" class="position-relative d-flex align-items-center group">
<span>Type Errors</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="type-errors"
aria-haspopup="dialog"
aria-label="Share link: Type Errors">
<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><table>
<thead>
<tr>
<th>Error Code</th>
<th>Description</th>
<th>Context</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ERR_FLOAT_NAN</code></td>
<td>Invalid float (NaN or Inf)</td>
<td>Float arithmetic produced NaN/Inf</td>
<td>Check for division by zero or invalid operations</td>
</tr>
<tr>
<td><code>ERR_CHAR_LEN</code></td>
<td>String exceeds length limit</td>
<td>String longer than declared Char(n)</td>
<td>Reduce string length or use Varchar/Text</td>
</tr>
<tr>
<td><code>ERR_DEC_DIV_ZERO</code></td>
<td>Decimal division by zero</td>
<td>Division by zero in Decimal arithmetic</td>
<td>Add zero check</td>
</tr>
<tr>
<td><code>ERR_IP_PARSE</code></td>
<td>Invalid IP address</td>
<td>Malformed IP address string</td>
<td>Use valid IPv4/IPv6 format</td>
</tr>
<tr>
<td><code>ERR_JSON_PARSE</code></td>
<td>Invalid JSON</td>
<td>Malformed JSON string</td>
<td>Fix JSON syntax</td>
</tr>
<tr>
<td><code>ERR_RANGE_BOUNDS</code></td>
<td>Invalid range bounds</td>
<td>Range start > end or invalid inclusive/exclusive</td>
<td>Fix range bounds</td>
</tr>
</tbody>
</table>
<p><strong>Examples</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="err">--</span><span class="w"> </span><span class="py">ERR_FLOAT_NAN</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">sqrt</span><span class="p">(</span><span class="err">-</span><span class="py">1</span><span class="p">)</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</span><span class="p">:</span><span class="w"> </span><span class="nc">NaN</span><span class="w"> </span><span class="py">not</span><span class="w"> </span><span class="py">allowed</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">ERR_CHAR_LEN</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="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">code</span><span class="p">:</span><span class="w"> </span><span class="nc">Char</span><span class="p">(</span><span class="err">'</span><span class="py">TOOLONG</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="py">5</span><span class="p">)})</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</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">ERR_IP_PARSE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">IpAddr</span><span class="p">(</span><span class="err">'</span><span class="py">999</span><span class="mf">.999.999.999</span><span class="err">'</span><span class="p">)</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</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">ERR_JSON_PARSE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">Json</span><span class="p">(</span><span class="err">'</span><span class="p">{</span><span class="py">invalid</span><span class="w"> </span><span class="py">json</span><span class="p">}</span><span class="err">'</span><span class="p">)</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">ERROR</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">Correct</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">RETURN</span><span class="w"> </span><span class="py">IpAddr</span><span class="p">(</span><span class="err">'</span><span class="py">192</span><span class="mf">.168.1.1</span><span class="err">'</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="py">RETURN</span><span class="w"> </span><span class="py">Json</span><span class="p">(</span><span class="err">'</span><span class="p">{</span><span class="s">"valid"</span><span class="p">:</span><span class="w"> </span><span class="s">"json"</span><span class="p">}</span><span class="err">'</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="index-errors" class="position-relative d-flex align-items-center group">
<span>Index Errors</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="index-errors"
aria-haspopup="dialog"
aria-label="Share link: Index Errors">
<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><table>
<thead>
<tr>
<th>Error Code</th>
<th>Description</th>
<th>Context</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ERR_INDEX_CORRUPTION</code></td>
<td>Index structure corrupted</td>
<td>Index integrity check failed</td>
<td>Rebuild index</td>
</tr>
<tr>
<td><code>ERR_INDEX_FULL</code></td>
<td>Index size limit exceeded</td>
<td>Index too large</td>
<td>Partition data or increase limits</td>
</tr>
</tbody>
</table>
<h4 id="network-errors" class="position-relative d-flex align-items-center group">
<span>Network Errors</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="network-errors"
aria-haspopup="dialog"
aria-label="Share link: Network Errors">
<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><table>
<thead>
<tr>
<th>Error Code</th>
<th>Description</th>
<th>Context</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ERR_CONNECTION_FAILED</code></td>
<td>Connection failure</td>
<td>Cannot connect to server</td>
<td>Check network and server status</td>
</tr>
<tr>
<td><code>ERR_TIMEOUT</code></td>
<td>Operation timeout</td>
<td>Query or connection timed out</td>
<td>Increase timeout or optimize query</td>
</tr>
<tr>
<td><code>ERR_PROTOCOL_ERROR</code></td>
<td>Protocol violation</td>
<td>Invalid message format</td>
<td>Update client library</td>
</tr>
</tbody>
</table>
<h4 id="transaction-errors" class="position-relative d-flex align-items-center group">
<span>Transaction Errors</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="transaction-errors"
aria-haspopup="dialog"
aria-label="Share link: Transaction Errors">
<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><table>
<thead>
<tr>
<th>Error Code</th>
<th>Description</th>
<th>Context</th>
<th>Resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ERR_TRANSACTION_CONFLICT</code></td>
<td>Transaction conflict</td>
<td>Concurrent modification conflict</td>
<td>Retry transaction</td>
</tr>
<tr>
<td><code>ERR_DEADLOCK</code></td>
<td>Deadlock detected</td>
<td>Circular lock dependency</td>
<td>Retry transaction</td>
</tr>
<tr>
<td><code>ERR_SERIALIZATION_FAILURE</code></td>
<td>Serialization failure</td>
<td>SSI conflict in SERIALIZABLE isolation</td>
<td>Retry transaction</td>
</tr>
</tbody>
</table>
<p><strong>Example</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="err">--</span><span class="w"> </span><span class="py">ERR_TRANSACTION_CONFLICT</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">BEGIN</span><span class="w"> </span><span class="py">TRANSACTION</span><span class="w"> </span><span class="py">ISOLATION</span><span class="w"> </span><span class="py">LEVEL</span><span class="w"> </span><span class="py">SERIALIZABLE</span><span class="w"> </span><span class="py">SNAPSHOT</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="kd">...</span><span class="w"> </span><span class="py">operations</span><span class="w"> </span><span class="kd">...</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">COMMIT</span><span class="err">;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">May</span><span class="w"> </span><span class="py">fail</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">conflict</span><span class="p">,</span><span class="w"> </span><span class="py">retry</span><span class="w"> </span><span class="py">needed</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">Retry</span><span class="w"> </span><span class="py">logic</span><span class="w"> </span><span class="p">(</span><span class="py">pseudocode</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_retries</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">for</span><span class="w"> </span><span class="py">attempt</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">range</span><span class="p">(</span><span class="py">max_retries</span><span class="p">):</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">try</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">execute_transaction</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">break</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">except</span><span class="w"> </span><span class="py">ERR_TRANSACTION_CONFLICT</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">if</span><span class="w"> </span><span class="py">attempt</span><span class="w"> </span><span class="p">==</span><span class="w"> </span><span class="py">max_retries</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">1</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">raise</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">sleep</span><span class="p">(</span><span class="py">exponential_backoff</span><span class="p">(</span><span class="py">attempt</span><span class="p">))</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="error-handling-best-practices" class="position-relative d-flex align-items-center group">
<span>Error Handling 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="error-handling-best-practices"
aria-haspopup="dialog"
aria-label="Share link: Error Handling 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>
<h4 id="check-for-common-errors" class="position-relative d-flex align-items-center group">
<span>Check for Common Errors</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="check-for-common-errors"
aria-haspopup="dialog"
aria-label="Share link: Check for Common Errors">
<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-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python client example</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 class="p">,</span> <span class="n">QueryError</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">"localhost"</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="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">page</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 class="s2">"MATCH (p:Person) RETURN p"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="n">QueryError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">message</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"42P01:"</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s2">"Table doesn't exist - creating it"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"CREATE (:Person {name: 'Alice'})"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">elif</span> <span class="n">message</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"53200:"</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s2">"Out of memory - reducing query complexity"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">page</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 class="s2">"MATCH (p:Person) RETURN p LIMIT 100"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">raise</span>
</span></span></code></pre></div>
<h4 id="retry-transient-errors" class="position-relative d-flex align-items-center group">
<span>Retry Transient Errors</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="retry-transient-errors"
aria-haspopup="dialog"
aria-label="Share link: Retry Transient Errors">
<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-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Go client example
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kn">import</span> <span class="s">"geodedb.com/geode"</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">executeWithRetry</span><span class="p">(</span><span class="nx">db</span> <span class="o">*</span><span class="nx">sql</span><span class="p">.</span><span class="nx">DB</span><span class="p">,</span> <span class="nx">query</span> <span class="kt">string</span><span class="p">,</span> <span class="nx">maxRetries</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">error</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="nx">i</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="p"><</span> <span class="nx">maxRetries</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">_</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">Exec</span><span class="p">(</span><span class="nx">query</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="kc">nil</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="c1">// Check if error is retryable
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">if</span> <span class="nf">isRetryable</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">time</span><span class="p">.</span><span class="nf">Sleep</span><span class="p">(</span><span class="nx">time</span><span class="p">.</span><span class="nf">Duration</span><span class="p">(</span><span class="nx">i</span><span class="o">*</span><span class="mi">100</span><span class="p">)</span> <span class="o">*</span> <span class="nx">time</span><span class="p">.</span><span class="nx">Millisecond</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">continue</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">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="k">return</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">"max retries exceeded"</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="kd">func</span> <span class="nf">isRetryable</span><span class="p">(</span><span class="nx">err</span> <span class="kt">error</span><span class="p">)</span> <span class="kt">bool</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="c1">// Transaction conflicts, deadlocks, timeouts
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">statusCode</span> <span class="o">:=</span> <span class="nf">extractStatusCode</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">statusCode</span> <span class="o">==</span> <span class="s">"ERR_TRANSACTION_CONFLICT"</span> <span class="o">||</span>
</span></span><span class="line"><span class="cl"> <span class="nx">statusCode</span> <span class="o">==</span> <span class="s">"ERR_DEADLOCK"</span> <span class="o">||</span>
</span></span><span class="line"><span class="cl"> <span class="nx">statusCode</span> <span class="o">==</span> <span class="s">"ERR_TIMEOUT"</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>
<h4 id="validate-input-data" class="position-relative d-flex align-items-center group">
<span>Validate Input Data</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="validate-input-data"
aria-haspopup="dialog"
aria-label="Share link: Validate Input Data">
<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-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// Rust client example
</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">Connection</span><span class="p">,</span><span class="w"> </span><span class="n">Error</span><span class="p">,</span><span class="w"> </span><span class="nb">Result</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_person</span><span class="p">(</span><span class="n">conn</span>: <span class="kp">&</span><span class="nc">mut</span><span class="w"> </span><span class="n">Connection</span><span class="p">,</span><span class="w"> </span><span class="n">name</span>: <span class="kp">&</span><span class="kt">str</span><span class="p">,</span><span class="w"> </span><span class="n">age</span>: <span class="kt">i32</span><span class="p">)</span><span class="w"> </span>-> <span class="nb">Result</span><span class="o"><</span><span class="p">()</span><span class="o">></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="c1">// Validate before sending to database
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">name</span><span class="p">.</span><span class="n">is_empty</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="k">return</span><span class="w"> </span><span class="nb">Err</span><span class="p">(</span><span class="n">Error</span>::<span class="n">validation</span><span class="p">(</span><span class="s">"Name cannot be empty"</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="k">if</span><span class="w"> </span><span class="n">age</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">age</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">150</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="k">return</span><span class="w"> </span><span class="nb">Err</span><span class="p">(</span><span class="n">Error</span>::<span class="n">validation</span><span class="p">(</span><span class="s">"Age must be 0-150"</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="kd">let</span><span class="w"> </span><span class="n">query</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="fm">format!</span><span class="p">(</span><span class="s">"CREATE (p:Person </span><span class="se">{{</span><span class="s">name: '</span><span class="si">{}</span><span class="s">', age: </span><span class="si">{}</span><span class="se">}}</span><span class="s">)"</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">age</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">query</span><span class="p">(</span><span class="o">&</span><span class="n">query</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="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>
<h4 id="log-errors-for-debugging" class="position-relative d-flex align-items-center group">
<span>Log Errors for Debugging</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="log-errors-for-debugging"
aria-haspopup="dialog"
aria-label="Share link: Log Errors for Debugging">
<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">Enable</span><span class="w"> </span><span class="py">detailed</span><span class="w"> </span><span class="py">error</span><span class="w"> </span><span class="py">logging</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">Set</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">server</span><span class="w"> </span><span class="py">configuration</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">logging</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">level</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">debug</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">include_stack_traces</span><span class="p">:</span><span class="w"> </span><span class="nc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">error_details</span><span class="p">:</span><span class="w"> </span><span class="nc">true</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="common-error-scenarios" class="position-relative d-flex align-items-center group">
<span>Common Error Scenarios</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-error-scenarios"
aria-haspopup="dialog"
aria-label="Share link: Common Error Scenarios">
<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="scenario-1-undefined-label" class="position-relative d-flex align-items-center group">
<span>Scenario 1: Undefined Label</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="scenario-1-undefined-label"
aria-haspopup="dialog"
aria-label="Share link: Scenario 1: Undefined Label">
<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><strong>Error</strong>: <code>42001 - Undefined object: Label 'Person' not found</code></p>
<p><strong>Cause</strong>: Querying non-existent label</p>
<p><strong>Solution</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="err">--</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">if</span><span class="w"> </span><span class="py">label</span><span class="w"> </span><span class="py">exists</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SHOW</span><span class="w"> </span><span class="py">LABELS</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">Create</span><span class="w"> </span><span class="py">label</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">inserting</span><span class="w"> </span><span class="py">node</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="p">(:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">Alice</span><span class="err">'</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">Then</span><span class="w"> </span><span class="py">retry</span><span class="w"> </span><span class="kd">query</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">MATCH</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="p">)</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="scenario-2-unique-constraint-violation" class="position-relative d-flex align-items-center group">
<span>Scenario 2: Unique Constraint Violation</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="scenario-2-unique-constraint-violation"
aria-haspopup="dialog"
aria-label="Share link: Scenario 2: Unique Constraint Violation">
<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><strong>Error</strong>: <code>23505 - Unique violation: email '[email protected]' already exists</code></p>
<p><strong>Cause</strong>: Duplicate value in unique index</p>
<p><strong>Solution</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="err">--</span><span class="w"> </span><span class="py">Option</span><span class="w"> </span><span class="py">1</span><span class="p">:</span><span class="w"> </span><span class="nc">Use</span><span class="w"> </span><span class="py">different</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">CREATE</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">email</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="p">[</span><span class="nc">email</span><span class="w"> </span><span class="py">protected</span><span class="p">]</span><span class="err">'</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">Option</span><span class="w"> </span><span class="py">2</span><span class="p">:</span><span class="w"> </span><span class="nc">Update</span><span class="w"> </span><span class="py">existing</span><span class="w"> </span><span class="py">record</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</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">email</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="p">[</span><span class="nc">email</span><span class="w"> </span><span class="py">protected</span><span class="p">]</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SET</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">updated_at</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">timestamp</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">Option</span><span class="w"> </span><span class="py">3</span><span class="p">:</span><span class="w"> </span><span class="nc">Use</span><span class="w"> </span><span class="py">MERGE</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">update</span><span class="w"> </span><span class="py">or</span><span class="w"> </span><span class="py">insert</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MERGE</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">email</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="p">[</span><span class="nc">email</span><span class="w"> </span><span class="py">protected</span><span class="p">]</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ON</span><span class="w"> </span><span class="py">CREATE</span><span class="w"> </span><span class="py">SET</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">created_at</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">timestamp</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ON</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="py">SET</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">updated_at</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">timestamp</span><span class="p">()</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="scenario-3-transaction-conflict" class="position-relative d-flex align-items-center group">
<span>Scenario 3: Transaction Conflict</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="scenario-3-transaction-conflict"
aria-haspopup="dialog"
aria-label="Share link: Scenario 3: Transaction Conflict">
<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><strong>Error</strong>: <code>ERR_TRANSACTION_CONFLICT - Concurrent modification detected</code></p>
<p><strong>Cause</strong>: Two transactions modifying same data</p>
<p><strong>Solution</strong>:</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"># Implement retry with exponential backoff</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">time</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 class="p">,</span> <span class="n">QueryError</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">"localhost"</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">def</span> <span class="nf">execute_with_retry</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="n">max_retries</span><span class="o">=</span><span class="mi">3</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">attempt</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">max_retries</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span>
</span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="n">QueryError</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">rollback</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">attempt</span> <span class="o">==</span> <span class="n">max_retries</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">raise</span>
</span></span><span class="line"><span class="cl"> <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.1</span> <span class="o">*</span> <span class="p">(</span><span class="mi">2</span> <span class="o">**</span> <span class="n">attempt</span><span class="p">))</span> <span class="c1"># Exponential backoff</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># async with client.connection() as conn:</span>
</span></span><span class="line"><span class="cl"><span class="c1"># await execute_with_retry(conn, "MATCH (n) RETURN count(n)")</span>
</span></span></code></pre></div>
<h4 id="scenario-4-query-timeout" class="position-relative d-flex align-items-center group">
<span>Scenario 4: Query Timeout</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="scenario-4-query-timeout"
aria-haspopup="dialog"
aria-label="Share link: Scenario 4: Query Timeout">
<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><strong>Error</strong>: <code>ERR_TIMEOUT - Query exceeded timeout (30000ms)</code></p>
<p><strong>Cause</strong>: Query too complex or slow</p>
<p><strong>Solution</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="err">--</span><span class="w"> </span><span class="py">Original</span><span class="w"> </span><span class="p">(</span><span class="py">slow</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="err">*</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">m</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">n</span><span class="p">,</span><span class="w"> </span><span class="py">m</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">Optimized</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="err">*</span><span class="py">1</span><span class="err">.</span><span class="mf">.3</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">m</span><span class="p">)</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">n</span><span class="err">.</span><span class="py">id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">123</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">n</span><span class="p">,</span><span class="w"> </span><span class="py">m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">100</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">Or</span><span class="w"> </span><span class="py">increase</span><span class="w"> </span><span class="py">timeout</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">Client</span><span class="w"> </span><span class="py">configuration</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="nc">timeout_ms</span><span class="p">:</span><span class="w"> </span><span class="nc">60000</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="related-documentation" class="position-relative d-flex align-items-center group">
<span>Related Documentation</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-documentation"
aria-haspopup="dialog"
aria-label="Share link: Related Documentation">
<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><a
href="/docs/guides/troubleshooting/"
>Troubleshooting Guide</a>
</strong> - Common issues and solutions</li>
<li><strong><a
href="/docs/query/performance-tuning/"
>Query Performance Tuning</a>
</strong> - Optimize queries to avoid errors</li>
<li><strong><a
href="/docs/transactions/advanced-patterns/"
>Advanced Transaction Patterns</a>
</strong> - Handle transaction errors</li>
<li><strong><a
href="/docs/api-reference/"
>API Reference</a>
</strong> - Complete function and error documentation</li>
</ul>
<h3 id="summary" class="position-relative d-flex align-items-center group">
<span>Summary</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="summary"
aria-haspopup="dialog"
aria-label="Share link: Summary">
<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>Geode provides comprehensive error reporting with:</p>
<ul>
<li><strong>GQLSTATUS Codes</strong>: ISO/IEC SQL-standard 5-character codes for interoperability</li>
<li><strong>Internal Error Codes</strong>: Descriptive error names for specific conditions</li>
<li><strong>Detailed Messages</strong>: Clear explanations and resolution guidance</li>
<li><strong>Structured Errors</strong>: JSON format with context and suggestions</li>
</ul>
<p>Use error codes to:</p>
<ol>
<li><strong>Identify issues</strong> - Understand what went wrong</li>
<li><strong>Handle gracefully</strong> - Implement retry logic for transient errors</li>
<li><strong>Validate input</strong> - Prevent errors before they occur</li>
<li><strong>Debug efficiently</strong> - Use error context to locate root causes</li>
</ol>
<p>Always check error codes and implement appropriate error handling in production applications.</p>
Error Codes Reference
Complete reference for Geode error codes, GQLSTATUS codes, and troubleshooting guidance following ISO/IEC SQL standards