Skip to content

Error codes

Every QQL error carries a stable code, a broad kind, a human-readable message, and an optional zero-based UTF-8 byte span [start, end). The message text is not normative — match on the code, which is fixed by the conformance fixtures. A code already asserted by a v1 invalid fixture cannot change before QQL 2; new codes may only refine previously unspecified cases.

The tables below cover the full set of codes the reference implementation emits. Codes are grouped by the failure family:

PrefixFamily
QQL-LEX-*Lexical failures
QQL-PARSE-*Syntax, clause order, and value-range failures
QQL-VALIDATION-*Semantic validation of a parsed program
QQL-PLAN-*, QQL-MISSING-*, QQL-UNKNOWN-*, QQL-VECTOR-KINDPlanning and schema resolution
QQL-JSON-*Value conversion to JSON
QQL-EMBEDDING-*UPSERT embedding inference
QQL-EDGE-*In-process edge backend capability and runtime failures

The same structured fields are projected differently by each host binding.

HostShape
RustQqlError { kind, code, message, span: Option<Span { start, end }>, fields, source }; the kind is one of Lex, Parse, Validation, Execution, Transport, Backend
PythonError attributes code, kind, and span
Node.jserror.code, error.kind, error.span on the thrown error
WebAssemblyAnalysisError { code, message, start, end } (nulls when a span is absent)
CodeMeaning
QQL-LEX-CHARA character cannot start any token
QQL-LEX-STRINGUnterminated string literal
CodeMeaning
QQL-PARSE-STATEMENTUnknown or legacy statement keyword (SELECT, INSERT, BOOST)
QQL-PARSE-EMPTY-STATEMENTEmpty script element, such as a leading or repeated separator
QQL-PARSE-EXPECTEDA required token is missing (for example an unmatched parenthesis)
QQL-PARSE-QUERY-INPUTInvalid query input form (a bare number is not a query input)
QQL-PARSE-CLAUSE-ORDERDuplicate or out-of-order query clause
QQL-PARSE-VECTOR-KINDAS is not DENSE, SPARSE, MULTI, or MULTIVECTOR
QQL-PARSE-DUPLICATE-CTEDuplicate CTE name in one script
QQL-PARSE-DUPLICATE-KEYDuplicate object or config key (ASCII case-insensitive)
QQL-PARSE-POSITIVE-INTEGERValue must be a positive integer (for example LIMIT, CANDIDATES, vector size)
QQL-PARSE-NONNEGATIVE-INTEGERValue must be non-negative (for example OFFSET, VALUES_COUNT)
QQL-PARSE-SYNTAXProduction-specific syntax or range failure
QQL-PARSE-COMPARISONExpected a comparison operator
QQL-PARSE-CONTEXTCONTEXT requires at least one positive/negative pair
QQL-PARSE-CROSS-RERANKCROSS RERANK requires TEXT '…' or a string query input
QQL-PARSE-EMBEDEMBED USING requires DENSE, SPARSE, MULTI, IMAGE, or MODEL
QQL-PARSE-EMBEDDINGDuplicate clause in a HYBRID embedding spec
QQL-PARSE-ESCAPEUnterminated escape sequence
QQL-PARSE-FIELDExpected a field name
QQL-PARSE-FILTERExpected a filter operator (for example IS requires NULL/EMPTY)
QQL-PARSE-FLOATInvalid float literal
QQL-PARSE-IDENTIFIERExpected an identifier or quoted name
QQL-PARSE-ININ / NOT IN requires a non-empty value list
QQL-PARSE-INDEX-TYPEUnsupported CREATE INDEX field type
QQL-PARSE-INTEGERInvalid integer literal
QQL-PARSE-LITERALExpected a scalar literal
QQL-PARSE-MATCH-ANYMATCH ANY requires a non-empty exact-value list
QQL-PARSE-NUMBERExpected a number
QQL-PARSE-OBJECT-KEYExpected an object key
QQL-PARSE-PAYLOAD-SELECTORWITH PAYLOAD requires true, false, INCLUDE (...), or EXCLUDE (...)
QQL-PARSE-POINT-IDA point ID must be an unsigned integer or a string
QQL-PARSE-POINT-IDSA point ID list cannot be empty
QQL-PARSE-PREFETCHPREFETCH cannot be empty
QQL-PARSE-SAMPLESAMPLE requires RANDOM
QQL-PARSE-SELECTORA selector list cannot be empty
QQL-PARSE-SEPARATORMultiple statements must be separated by a semicolon
QQL-PARSE-STATEMENT-LIMITA script may contain at most 256 statements
QQL-PARSE-TRAILINGUnexpected trailing token
QQL-PARSE-UPDATEExpected VECTOR or PAYLOAD after SET
QQL-PARSE-VALUEUnexpected value token
CodeMeaning
QQL-VALIDATION-FROMA top-level query lacks FROM
QQL-VALIDATION-PREFETCH-CTEA PREFETCH name does not resolve to a CTE
QQL-VALIDATION-FUSION-PREFETCHQUERY FUSION has no PREFETCH
QQL-VALIDATION-RERANK-PREFETCHQUERY RERANK has no PREFETCH
QQL-VALIDATION-POINTS-CLAUSEQUERY POINTS uses a clause it cannot accept
QQL-VALIDATION-UPSERT-IDAn UPSERT point lacks a valid id key
QQL-VALIDATION-MMRMMR DIVERSITY is outside [0, 1] or not finite
QQL-VALIDATION-HYBRIDInvalid USING HYBRID / QUERY HYBRID combination
QQL-VALIDATION-FILTER-INJECTinject_filter does not apply to this statement type
QQL-VALIDATION-ID-PREDICATEA point ID predicate uses an operator other than =, !=, IN, or NOT IN
QQL-VALIDATION-POINT-IDA value used as a point ID is neither an unsigned integer nor a string
QQL-VALIDATION-ACORN-SELECTIVITYmax_selectivity requires PARAMS (acorn = true, …)
QQL-VALIDATION-CONFIGInvalid collection configuration block
QQL-VALIDATION-CONSISTENCYconsistency must be a non-negative integer factor or majority / quorum / all
QQL-VALIDATION-CREATE-MODELCREATE COLLECTION … HYBRID rejects a single dense MODEL
QQL-VALIDATION-CROSS-RERANK-PREFETCHCROSS RERANK requires PREFETCH
QQL-VALIDATION-FEEDBACK-STRATEGYA feedback strategy parameter is not numeric
QQL-VALIDATION-FUSIONThe fusion method must be RRF or DBSF
QQL-VALIDATION-GEOInvalid geo coordinates, radius, or polygon ring
QQL-VALIDATION-LIMIT-OVERFLOWLIMIT + OFFSET (or hybrid candidate scaling) overflows u64
QQL-VALIDATION-PREFETCHThis query expression does not accept PREFETCH
QQL-VALIDATION-RECOMMEND-STRATEGYUnknown RECOMMEND STRATEGY
QQL-VALIDATION-RERANK-USINGRERANK requires USING <vector>
QQL-VALIDATION-SCOREA score threshold must be finite
QQL-VALIDATION-SEARCH-PARAMUnknown search parameter
QQL-VALIDATION-USINGThis query expression does not accept USING
QQL-VALIDATION-VECTORInvalid vector value
CodeMeaning
QQL-PLAN-VECTOR-KINDStructural vector input and the declared AS role disagree
QQL-MISSING-USINGSchema inference is ambiguous; add USING <vector>
QQL-UNKNOWN-VECTORThe explicit vector name does not exist in the collection
QQL-VECTOR-KINDThe schema role conflicts with the requested role, or the kind is unresolved before embedding
QQL-PLAN-COLLECTIONA query collection name must not be empty
QQL-PLAN-CROSS-RERANK-CANDIDATEA CROSS RERANK prefetch must plan as a search query
QQL-PLAN-CROSS-RERANK-CTEPREFETCH references an unknown CTE
QQL-PLAN-CROSS-RERANK-MODELCROSS RERANK MODEL must not be empty
QQL-PLAN-CROSS-RERANK-PREFETCHCROSS RERANK requires at least one PREFETCH
QQL-PLAN-CROSS-RERANK-QUERYCROSS RERANK query text must not be empty
QQL-PLAN-FUSION-PREFETCHFUSION requires at least one prefetch
QQL-PLAN-PREFETCH-CTEPREFETCH references an unknown CTE
QQL-PLAN-PREFETCH-GROUPGROUP BY is not supported inside a PREFETCH source
QQL-PLAN-RERANK-PREFETCHRERANK requires at least one PREFETCH
QQL-PLAN-RERANK-USINGRERANK requires a non-empty USING vector name
QQL-PLAN-RRF-PARAMSrrf_k and rrf_weights are valid only with RRF fusion
QQL-PLAN-RRF-WEIGHTSrrf_weights length must equal the prefetch count
QQL-PLAN-UNSUPPORTED-PREFETCHPOINTS / CROSS RERANK are not supported inside PREFETCH
QQL-REST-CLIENT-SIDEThe operation is executed client-side and has no single Qdrant REST route
QQL-BACKENDGeneric backend or transport failure
CodeMeaning
QQL-JSON-NONFINITEA non-finite float cannot be serialized to JSON
QQL-JSON-NUMBERA value cannot be represented as a JSON number
CodeMeaning
QQL-EMBEDDING-TOPOLOGYUPSERT embedding inference is ambiguous across the collection topology
QQL-EMBEDDING-TARGETThe UPSERT embedding target is absent or has the wrong role

The in-process edge backend reports capability limits with a stable QQL-EDGE-UNSUPPORTED-* code instead of a generic failure. These errors usually carry a remediation hint pointing at remote Qdrant.

CodeMeaning
QQL-EDGE-UNSUPPORTED-GROUP-BYGROUP BY / query groups are not available offline
QQL-EDGE-UNSUPPORTED-SHARDSHARD routing or collection sharding options are not available offline
QQL-EDGE-UNSUPPORTED-SHARD-KEYCREATE / DROP SHARD KEY are not available offline
QQL-EDGE-UNSUPPORTED-ALTERALTER COLLECTION is not available offline
QQL-EDGE-UNSUPPORTED-COLLECTION-PARAMSCollection WITH PARAMS is not available offline
QQL-EDGE-UNSUPPORTED-ACORNPARAMS (acorn = ...) is not available offline
QQL-EDGE-UNSUPPORTED-TIMEOUTPARAMS (timeout = ...) is not available offline
QQL-EDGE-UNSUPPORTED-CONSISTENCYPARAMS (consistency = ...) is not available offline
QQL-EDGE-UNSUPPORTED-RECOMMEND-STRATEGYRECOMMEND STRATEGY average_vector; offline supports best_score and sum_scores only
QQL-EDGE-UNSUPPORTED-POINT-REFPoint-ID query inputs need materialized vectors offline
QQL-EDGE-UNSUPPORTED-FIELD-TYPEThe index field type is not available offline
QQL-EDGE-UNSUPPORTED-ROUTEThe planned operation has no edge route implementation (defensive fallback)
QQL-EDGE-INVALID-POINT-IDOffline point IDs accept unsigned integers or UUIDs only

Edge also emits QQL-EDGE-* runtime failures for storage and configuration problems: collection lifecycle (QQL-EDGE-COLLECTION-EXISTS, QQL-EDGE-COLLECTION-NOT-FOUND, QQL-EDGE-DELETE-COLLECTION, QQL-EDGE-DELETE-COLLECTION-CLOSE, QQL-EDGE-CLOSE), storage I/O (QQL-EDGE-CREATE-DIR, QQL-EDGE-READ-DIR, QQL-EDGE-DIR-ENTRY, QQL-EDGE-LIB, QQL-EDGE-SPAWN, QQL-EDGE-CONFIG), vector handling (QQL-EDGE-VECTOR, QQL-EDGE-VECTOR-NAME-MISSING, QQL-EDGE-MISSING-VECTOR, QQL-EDGE-MULTI-VECTOR-NAMES, QQL-EDGE-FIELD-NAME), filters (QQL-EDGE-FILTER-CONVERT, QQL-EDGE-FILTER-SERIALIZE, QQL-EDGE-FILTER-DESERIALIZE), query conversion (QQL-EDGE-QUERY), embedding (QQL-EDGE-EMBED), and mutations that require a target (QQL-EDGE-DELETE-REQUIRES-TARGET, QQL-EDGE-CLEAR-PAYLOAD-REQUIRES-TARGET, QQL-EDGE-DELETE-PAYLOAD-REQUIRES-TARGET, QQL-EDGE-DELETE-VECTORS-REQUIRES-TARGET, QQL-EDGE-SET-PAYLOAD-REQUIRES-TARGET).

The Backend compatibility matrix covers which features are available on each backend.

The full set of codes emitted by the reference implementation, generated from rg -o 'QQL-[A-Z0-9-]+' crates/qql-core/src crates/qql-plan/src crates/qql-edge/src:

QQL-BACKEND
QQL-EDGE-CLEAR-PAYLOAD-REQUIRES-TARGET
QQL-EDGE-CLOSE
QQL-EDGE-COLLECTION-EXISTS
QQL-EDGE-COLLECTION-NOT-FOUND
QQL-EDGE-CONFIG
QQL-EDGE-CREATE-DIR
QQL-EDGE-DELETE-COLLECTION
QQL-EDGE-DELETE-COLLECTION-CLOSE
QQL-EDGE-DELETE-PAYLOAD-REQUIRES-TARGET
QQL-EDGE-DELETE-REQUIRES-TARGET
QQL-EDGE-DELETE-VECTORS-REQUIRES-TARGET
QQL-EDGE-DIR-ENTRY
QQL-EDGE-EMBED
QQL-EDGE-FIELD-NAME
QQL-EDGE-FILTER-CONVERT
QQL-EDGE-FILTER-DESERIALIZE
QQL-EDGE-FILTER-SERIALIZE
QQL-EDGE-INVALID-POINT-ID
QQL-EDGE-LIB
QQL-EDGE-MISSING-VECTOR
QQL-EDGE-MULTI-VECTOR-NAMES
QQL-EDGE-QUERY
QQL-EDGE-READ-DIR
QQL-EDGE-SET-PAYLOAD-REQUIRES-TARGET
QQL-EDGE-SPAWN
QQL-EDGE-UNSUPPORTED-ACORN
QQL-EDGE-UNSUPPORTED-ALTER
QQL-EDGE-UNSUPPORTED-COLLECTION-PARAMS
QQL-EDGE-UNSUPPORTED-CONSISTENCY
QQL-EDGE-UNSUPPORTED-FIELD-TYPE
QQL-EDGE-UNSUPPORTED-GROUP-BY
QQL-EDGE-UNSUPPORTED-POINT-REF
QQL-EDGE-UNSUPPORTED-RECOMMEND-STRATEGY
QQL-EDGE-UNSUPPORTED-ROUTE
QQL-EDGE-UNSUPPORTED-SHARD
QQL-EDGE-UNSUPPORTED-SHARD-KEY
QQL-EDGE-UNSUPPORTED-TIMEOUT
QQL-EDGE-VECTOR
QQL-EDGE-VECTOR-NAME-MISSING
QQL-JSON-NONFINITE
QQL-JSON-NUMBER
QQL-LEX-CHAR
QQL-LEX-STRING
QQL-PARSE-CLAUSE-ORDER
QQL-PARSE-COMPARISON
QQL-PARSE-CONTEXT
QQL-PARSE-CROSS-RERANK
QQL-PARSE-DUPLICATE-CTE
QQL-PARSE-DUPLICATE-KEY
QQL-PARSE-EMBED
QQL-PARSE-EMBEDDING
QQL-PARSE-EMPTY-STATEMENT
QQL-PARSE-ESCAPE
QQL-PARSE-EXPECTED
QQL-PARSE-FIELD
QQL-PARSE-FILTER
QQL-PARSE-FLOAT
QQL-PARSE-IDENTIFIER
QQL-PARSE-IN
QQL-PARSE-INDEX-TYPE
QQL-PARSE-INTEGER
QQL-PARSE-LITERAL
QQL-PARSE-MATCH-ANY
QQL-PARSE-NONNEGATIVE-INTEGER
QQL-PARSE-NUMBER
QQL-PARSE-OBJECT-KEY
QQL-PARSE-PAYLOAD-SELECTOR
QQL-PARSE-POINT-ID
QQL-PARSE-POINT-IDS
QQL-PARSE-POSITIVE-INTEGER
QQL-PARSE-PREFETCH
QQL-PARSE-QUERY-INPUT
QQL-PARSE-SAMPLE
QQL-PARSE-SELECTOR
QQL-PARSE-SEPARATOR
QQL-PARSE-STATEMENT
QQL-PARSE-STATEMENT-LIMIT
QQL-PARSE-SYNTAX
QQL-PARSE-TRAILING
QQL-PARSE-UPDATE
QQL-PARSE-VALUE
QQL-PARSE-VECTOR-KIND
QQL-PLAN-COLLECTION
QQL-PLAN-CROSS-RERANK-CANDIDATE
QQL-PLAN-CROSS-RERANK-CTE
QQL-PLAN-CROSS-RERANK-MODEL
QQL-PLAN-CROSS-RERANK-PREFETCH
QQL-PLAN-CROSS-RERANK-QUERY
QQL-PLAN-FUSION-PREFETCH
QQL-PLAN-PREFETCH-CTE
QQL-PLAN-PREFETCH-GROUP
QQL-PLAN-RERANK-PREFETCH
QQL-PLAN-RERANK-USING
QQL-PLAN-RRF-PARAMS
QQL-PLAN-RRF-WEIGHTS
QQL-PLAN-UNSUPPORTED-PREFETCH
QQL-PLAN-VECTOR-KIND
QQL-REST-CLIENT-SIDE
QQL-VALIDATION-ACORN-SELECTIVITY
QQL-VALIDATION-CONFIG
QQL-VALIDATION-CONSISTENCY
QQL-VALIDATION-CREATE-MODEL
QQL-VALIDATION-CROSS-RERANK-PREFETCH
QQL-VALIDATION-FEEDBACK-STRATEGY
QQL-VALIDATION-FILTER-INJECT
QQL-VALIDATION-FROM
QQL-VALIDATION-FUSION
QQL-VALIDATION-FUSION-PREFETCH
QQL-VALIDATION-GEO
QQL-VALIDATION-HYBRID
QQL-VALIDATION-ID-PREDICATE
QQL-VALIDATION-LIMIT-OVERFLOW
QQL-VALIDATION-MMR
QQL-VALIDATION-POINT-ID
QQL-VALIDATION-POINTS-CLAUSE
QQL-VALIDATION-PREFETCH
QQL-VALIDATION-PREFETCH-CTE
QQL-VALIDATION-RECOMMEND-STRATEGY
QQL-VALIDATION-RERANK-PREFETCH
QQL-VALIDATION-RERANK-USING
QQL-VALIDATION-SCORE
QQL-VALIDATION-SEARCH-PARAM
QQL-VALIDATION-UPSERT-ID
QQL-VALIDATION-USING
QQL-VALIDATION-VECTOR

The QQL-EDGE-UNSUPPORTED- prefix is the family marker used by the edge backend to classify capability rejections; individual codes always carry the full suffix. New codes may be introduced in a v1 minor release (see language/v1/spec/versioning.md), so treat this list as a snapshot of the current reference implementation.