Skip to main content

Error and Diagnostic Codes

Complete reference for all ConjureDB compiler, schema, and runtime diagnostic codes.

Modeled after PostgreSQL Appendix A — Error Codes. Every code emitted by the compiler or schema processor is documented here with severity, description, and remediation guidance.


How Diagnostics Work​

ConjureDB uses a structured diagnostic system across two subsystems:

SubsystemPrefixFormatExample
CompilerUMUM{category}{number} (6 chars)UM1001
SchemaSCHSCH{category}{number}SCH2001
Binding ResolutionBIND_RESBIND_RES_{number}BIND_RES_001
Binding Build (IR)BIND_BLDBIND_BLD_{number}BIND_BLD_001
Binding ContractBIND_CONTRACTfixed stringBIND_CONTRACT
Join PlanningJOINJOIN{number}JOIN0001

Severity Levels​

LevelMeaning
ErrorQuery cannot be compiled. Must be fixed before code generation proceeds.
WarningQuery compiles but may have performance or correctness issues.
InfoInformational notice; no action required.

Where Diagnostics Appear​

  • Manual compiler output — from ConjureDB.Compiler verify or generate.
  • IDE — as squiggles / warning list in Visual Studio / Rider.
  • [DebugGeneration] — attach attribute to emit optimization trace as code comments.
  • CompilerDiagnostic.ToString() — formatted as "{Id} {Location}: {Message}".

Diagnostic Structure​

Each CompilerDiagnostic contains:

FieldTypeDescription
IdCompilerDiagnosticIdStrongly-typed code (e.g., UM1001)
SeverityDiagnosticSeverityError / Warning / Info
MessagestringHuman-readable description
LocationSourceLocationSource position (line, column) if available
OriginNodeIdIrNodeId?IR node for late-binding location mapping
TimestampDateTimeOffsetWhen the diagnostic was created

Internal Errors (UM0xxx)​

Internal errors indicate compiler bugs or infrastructure problems. Users should never see these under normal operation.

CodeNameSeverityMessageDescriptionAction
UM0000UnknownErrorUnknown diagnosticPlaceholder for unclassified diagnostics. Should never appear in production.Report as bug with full query text.
UM0001InternalErrorErrorInternal compiler errorAn unexpected condition occurred inside the compiler pipeline.Report as bug. Include the query, schema, and full diagnostic output.
UM0002InvariantViolationErrorCompiler invariant violatedA structural invariant assumed by the compiler was broken. This is always a compiler bug.Report as bug. The optimizer or planner encountered an impossible state.
UM0003PipelineValidationErrorErrorPipeline validation failedThe compiler pipeline detected an inconsistency between stages (e.g., missing output from a prior stage).Report as bug. May indicate a stage was skipped or produced invalid output.
UM0004MissingSchemaErrorSchema metadata is missing or emptyNo schema was provided to the compiler, or the schema contains zero table definitions.Ensure your .conjure schema file is present and contains at least one table declaration.

Example triggering UM0004:

// Intentionally invalid context: no table schema is supplied to the compiler.
// A query declaration alone does not supply metadata for the Users table.
query GetUserNames() -> string[] {
from Users | select Name
}
// Then call the generated method on the entity set:
string[] names = context.Users.GetUserNames(); // UM0004 occurs when no schema metadata exists

Semantic Errors (UM1xxx)​

Semantic errors occur during name resolution, type checking, and semantic validation. These are the most common user-facing errors.

Table and Column Resolution (UM1001–UM1009)​

CodeNameSeverityMessageDescriptionAction
UM1001MissingTableAliasErrorTable referenced without alias in multi-table contextWhen multiple tables are in scope (e.g., after a JOIN), column references must be qualified with a table alias.Add table alias: u.Name instead of Name.
UM1002AmbiguousColumnReferenceErrorColumn reference is ambiguousA column name exists in more than one table in scope, and no alias was used to disambiguate.Qualify the column with a table alias: u.Name or o.Name.
UM1003MissingSourceErrorNo source table in scopeA query expression references columns but no from clause introduced a table.Ensure your pipeline starts with from TableName.
UM1004DuplicateAliasErrorAlias already defined for different tableTwo tables in the same scope share the same alias.Use distinct aliases for each table/join source.
UM1005InvalidAggregateUsageErrorAggregate function used incorrectlyAn aggregate function (SUM, COUNT, etc.) appears in a context where it is not allowed, such as a WHERE clause or nested inside another aggregate.Move aggregate to SELECT or GROUP clause. Use a subquery or CTE for complex cases.
UM1006InvalidWindowFrameErrorInvalid window frame specificationThe ROWS/RANGE frame specified for a window function is invalid (e.g., start > end).Check frame bounds. See UM1037–UM1040 for specific frame errors.
UM1007UnknownTableErrorTable not found in schemaThe table name used in from does not match any table in the schema.Check spelling. Verify the table is declared in your .conjure schema file.
UM1008UnknownColumnErrorColumn not found on entityThe referenced column does not exist on the target table.Check column name spelling. Run schema validation to see available columns.
UM1009TypeMismatchErrorType mismatch in expressionOperand types are incompatible (e.g., comparing string to int without a cast).Check operand types. Use explicit CAST if conversion is intended.

Example triggering UM1001:

from Users u
| join Orders o (u.Id == o.UserId)
| select Name, o.Total
^^^^ UM1001: Must qualify as u.Name

Example triggering UM1007:

from Userz
^^^^^ UM1007: Table 'Userz' not found in schema

Binding Semantic Errors (UM1010–UM1028)​

CodeNameSeverityMessageDescriptionAction
UM1010DuplicateLetBindingErrorLet binding already definedA let variable with the same name is declared twice in the same scope.Rename one of the bindings to a unique name.
UM1011LetBindingNullRootErrorLet binding produced null rootInternal: the let binding resolved to a null expression tree.Simplify the let expression or report as bug if the expression looks valid.
UM1012UntypedParameterErrorParameter type cannot be inferredA query parameter was used but its CLR type could not be determined.Declare the parameter with an explicit type in the schema query header: query GetById(id: int) -> ....
UM1013CaseTypeMismatchErrorCASE expression has incompatible branch typesThe THEN/ELSE branches of a CASE return different types that cannot be unified.Ensure all branches return the same type, or add explicit CASTs.
UM1014AmbiguousColumnErrorColumn reference is ambiguous between multiple tablesSame as UM1002 but raised during binding phase. Column matches multiple sources.Qualify with table alias.
UM1015UnknownNavigationPropertyErrorNavigation property not found on entityA navigation (foreign key traversal) path references a property that doesn't exist.Check the navigation property name and verify the FK relationship in schema.
UM1016CircularNavigationErrorCircular navigation reference detectedNavigation properties form a cycle (A → B → A).Break the cycle by using explicit JOINs instead of navigation.
UM1017AggregateMissingArgumentErrorAggregate function requires argumentAn aggregate like SUM or AVG was called without an argument (except COUNT which allows *).Provide an argument: sum(Amount) instead of sum().
UM1018UnknownAggregateFunctionErrorUnknown aggregate functionThe function name is not recognized as a built-in or UDF aggregate.Check spelling. Supported: count, sum, avg, min, max, bool_and, bool_or.
UM1019DuplicateAggregateAliasErrorDuplicate aggregate aliasTwo aggregates in the same GROUP/SELECT produce columns with the same name.Use explicit aliases: total_a = sum(a), total_b = sum(b).
UM1020SetOperationArityMismatchErrorSet operation arity mismatchUNION/INTERSECT/EXCEPT sides have different column counts.Ensure both sides of the set operation SELECT the same number of columns.
UM1021SetOperationTypeMismatchErrorSet operation type mismatchCorresponding columns in a set operation have incompatible types.Align types with CASTs or select compatible columns.
UM1022ExistsSubqueryErrorErrorEXISTS subquery errorAn EXISTS subquery is malformed or references invalid scope.Check subquery syntax and ensure it references valid outer scope columns.
UM1023InvalidLimitOffsetErrorInvalid TAKE/SKIP valueTAKE or SKIP has a non-positive value or is out of Int32 range.Use a positive integer literal or parameter for TAKE/SKIP.
UM1024DeriveColumnErrorErrorDerive column expression errorA computed column in derive could not be resolved.Check the expression syntax and referenced columns.
UM1025FunctionArgumentErrorErrorFunction argument errorWrong number or type of arguments passed to a function.Check function signature. See Query Language for built-in function reference.
UM1026CaseImplicitConversionWarningImplicit type conversion in CASE expressionCASE branches have different types that were implicitly converted. May lose precision.Add explicit CASTs to make the conversion intentional.
UM1027AmbiguousNavigationPathErrorNavigation path is ambiguousMultiple navigation paths exist between two entities; the compiler cannot pick deterministically.Qualify the navigation or use an explicit JOIN with a specific FK.
UM1028NavigationLineageUnavailableErrorNavigation path cannot be expanded — lineage metadata unavailableThe compiler cannot trace the FK chain because required metadata is missing.Ensure all FK relationships are declared in the schema with @relation.

Example triggering UM1020:

from Users | select Name, Age
| union
from Orders | select OrderId
^^^^^^^ UM1020: Left has 2 columns, right has 1

Binding Resolution Conditions (UM1202–UM1214)​

CodeNameSeverityMessageDescriptionAction
UM1202BareReferenceNoneRequiresDomainErrorBare none requires an exact expected ref entity domainBIND_RES_074: a bare none was written where no destination states a concrete, non-nullable entity-handle domain to type it.Annotate the binding or fold seed with the ref type, or write into a declared handle column.
UM1203FoldResultRequiresMemberErrorA fold result is not a whole valueBIND_RES_075: an immutable fold result was read as a whole scalar or record value instead of one of its readonly fields.Select one result field (result.Field).
UM1204FoldResultMemberNotDeclaredErrorFold result has no such fieldBIND_RES_076: the selected member is not declared by the issuing immutable fold result.Use a field the fold result declares.
UM1205InferredPositionRequiresTypedValueErrorCannot infer a type from nullBIND_RES_077: a position typed by its value alone — an unrouted command event or error payload member, an inferred nested payload record member, a command var, a function let, a system var or unannotated fold seed, a select output with no declared target (neither a declared result record member nor the single output of a declared scalar result) — received a bare null (or another untyped value), which states no type.Write a value of a concrete type, or write into storage that declares the type (an event table route, a declared result record, an annotation).
UM1206NumericConstantOverflowErrorIntegral constant overflowBIND_RES_NUMERIC_CONSTANT_OVERFLOW: an integral constant expression is proven to leave its carrier under the governing checked overflow mode.Widen the operand type, use unchecked(...) where wrapping is intended, or change the constant.
UM1207NumericConstantDivisionByZeroErrorIntegral constant division by zeroBIND_RES_NUMERIC_CONSTANT_DIVZERO: an integral constant expression is proven to divide or take a remainder by zero.Change the divisor.
UM1208PureNominalConstructionTypeNotAdmittedErrorConstruction type is not an admitted declared structBIND_RECORD_008: a pure function constructs a type that is not an admitted declared struct.Construct a declared struct that the pure function surface admits.
UM1209PureNominalConstructionShapeNotAdmittedErrorConstruction shape is not admittedBIND_RECORD_009: a pure function constructs a declared struct whose fields are not all non-nullable int or whose original declared-type publication is unavailable.Use a struct with non-nullable int fields only.
UM1210NoMatchingFunctionOverloadErrorNo overload of the function accepts the argumentsBIND_RES_007: the function exists, but none of its overloads accepts the call's argument types or count. The message names the argument types and the available signatures.Pass arguments of an accepted type or arity, or cast an argument to one of the listed parameter types.
UM1211RetiredSpellingErrorA retired spellingParser code C109: the query writes a spelling Syntax V3 retired (every one is listed in Retired Spellings). The parser refuses it, so the query is never bound; the message names the replacement exactly and the diagnostic carries the catalog's fix-it. A schema body reports the same refusal as SCH2173.Write the replacement the message names, or apply the fix-it.
UM1213IdentifierCaseMismatchErrorIdentifier differs only by case from its declarationBIND_RES_180: an authored reference does not exactly match an existing declaration's spelling.Use the exact declared spelling. A fix-it is available only when the binder owns the original identifier token.
UM1214IdentifierCaseCollisionErrorSibling names cannot differ only in caseBIND_RES_181: a new declaration conflicts with an existing sibling declaration by case alone. This is a declaration collision, not a misspelled reference.Rename the new declaration to a distinct name. Changing its case to match the existing declaration would not resolve the duplicate; no replacement is inferred.

SQL Semantic Validation (UM1030–UM1042)​

CodeNameSeverityMessageDescriptionAction
UM1030BinaryOperatorTypeMismatchErrorBinary operator type mismatchLeft and right operands of a binary operator have incompatible types (e.g., int + string).Check operand types. Use CAST to align types.
UM1031AggregateRequiresNumericErrorSUM/AVG requires numeric argumentSUM or AVG was applied to a non-numeric column (e.g., a string).Use a numeric column or CAST the value.
UM1032AggregateRequiresComparableErrorMIN/MAX requires comparable typeMIN or MAX was applied to a type that doesn't support comparison.Use a comparable type (numeric, string, DateTime).
UM1033AggregateRequiresBooleanErrorBOOL_AND/BOOL_OR requires boolean argumentBoolean aggregate applied to non-boolean column.Ensure the argument is a boolean expression.
UM1034NestedAggregateErrorNested aggregate functions not allowedAn aggregate contains another aggregate: sum(count(x)).Split into a subquery or use GROUP + derive.
UM1035AggregateInWhereErrorAggregate function not allowed in WHERE clauseAggregates cannot appear in filter predicates.Move the condition to a filter after group (the DSL equivalent of SQL HAVING).
UM1036FunctionTypeMismatchErrorFunction argument type mismatchA function was called with arguments of incorrect type.Check function signature and argument types.
UM1037InvalidWindowFrameBoundsErrorInvalid window frame boundsWindow frame start is after the end (e.g., ROWS BETWEEN 5 FOLLOWING AND 2 PRECEDING).Ensure frame start ≤ frame end.
UM1038InvalidWindowFrameStartErrorUNBOUNDED FOLLOWING cannot be frame startFrame start cannot be UNBOUNDED FOLLOWING.Use UNBOUNDED PRECEDING or a concrete offset for the start bound.
UM1039InvalidWindowFrameEndErrorUNBOUNDED PRECEDING cannot be frame endFrame end cannot be UNBOUNDED PRECEDING.Use UNBOUNDED FOLLOWING or a concrete offset for the end bound.
UM1040WindowOffsetMustBeNumericErrorLAG/LEAD offset must be numericThe offset argument to LAG or LEAD is not a numeric type.Pass an integer literal for the offset.
UM1041SetOperationColumnTypeMismatchErrorSET operation column type mismatchPost-validation detected incompatible column types across UNION/INTERSECT/EXCEPT sides.Align column types with explicit CASTs.
UM1042OuterJoinFilterWarningWarningOuter join filter may change join semanticsA filter on the nullable side of a LEFT/RIGHT JOIN may convert it to an INNER JOIN.Move the filter into the JOIN predicate, or confirm the semantic change is intentional.

Example triggering UM1034:

from Orders
| group UserId
| select UserId, sum(count(Amount))
^^^^^^^^^^^^^^^^^^ UM1034: Nested aggregate

Example triggering UM1042:

from Users u
| join left Orders o (u.Id == o.UserId)
| filter o.Status == "Active"
^^^^^^^^^^^^^^^^^^^^ UM1042: Filter on nullable side converts LEFT JOIN to INNER JOIN

UDF Validation (UM1050–UM1052)​

CodeNameSeverityMessageDescriptionAction
UM1050UdfInvalidSignatureErrorUDF has invalid method signatureUDF method uses unsupported features: generics, ref/out parameters, params, or optional parameters.Simplify the UDF signature to use only concrete value-type or string parameters.
UM1051UdfUnresolvableTypeErrorUDF parameter or return type cannot be resolvedThe CLR type of a UDF parameter or return value cannot be mapped to a query type.Use supported types: primitives, string, DateTime, enums defined in schema.
UM1052UdfMutableCollectionErrorUDF uses mutable collection typeUDF signature includes List<T>, HashSet<T>, or similar mutable collections.Use ImmutableArray<T> or return a scalar value.

Canonicalization / Lowering Errors (UM2xxx)​

These errors occur during the transition from the bound AST to the semantic IR (SIR). They indicate structural problems in the query plan.

CodeNameSeverityMessageDescriptionAction
UM2001MissingSourceRelationErrorSource relation missing from IRA relational node references a source table that was not included in the IR.Likely a compiler bug. Report with full query.
UM2002MissingPayloadErrorRequired payload missing from semantic nodeA semantic IR node is missing required metadata (e.g., output column descriptors).Likely a compiler bug. Report with full query.
UM2003EmptyPlanErrorSemantic plan is emptyThe binding phase produced no relational nodes — the query is effectively empty.Ensure your query has at least a from and one operator (select, filter, etc.).
UM2004InvalidSubqueryErrorInvalid subquery structureA subquery has an invalid shape (e.g., missing FROM, empty body).Check subquery syntax. Ensure it starts with from and produces output.
UM2005ColumnNotFoundErrorColumn not found during IR constructionA column referenced during IR lowering does not exist in the available output scope.May indicate a column was pruned too early. Check SELECT clause and report if query looks valid.
UM2014IrBuildInListRequiresLiteralErrorIN list requires literal values to build array RHSAn in (...) list contains a column reference or a computed expression. The list is materialized as a typed CLR array at compile time, so every element must be a constant.Replace the non-constant elements with literals, or pass the set as a typed array parameter (in @ids).
UM2028IrBuildMembershipSetNotElementInspectableErrorNOT IN requires an element-inspectable right-hand sidex not in S is false whenever any element of S is null, so binding needs a way to test the elements for null. A right-hand side whose carrier is not an array cannot be tested, leaving that row of the truth table undecidable.Declare the parameter as a typed array. See Query Language § Set Membership.

IR / Optimization Errors (UM3xxx)​

These errors occur during IR validation and Cascades optimization.

CodeNameSeverityMessageDescriptionAction
UM3001IrValidationErrorErrorIR validation failedThe IR snapshot failed structural validation after binding or optimization.Report as bug. The optimizer produced an invalid plan.
UM3002OptimizationErrorErrorOptimization rule failedA Cascades optimization rule threw an exception during application.Report as bug. Include full query and schema.

Physical Planning Errors (UM4xxx)​

These errors occur during the physical plan generation phase — when the optimizer maps logical operators to physical implementations.

CodeNameSeverityMessageDescriptionAction
UM4001PhysicalPlanningErrorErrorPhysical plan generation failedThe planner could not generate a valid physical plan from the logical IR.Check that all required indexes exist. Simplify the query if possible.
UM4002EmptyIrSnapshotErrorIR snapshot is emptyThe logical IR passed to planning is empty.Ensure the binding and optimization stages produced output. Likely a compiler bug.
UM4003UnsupportedDecorrelationPatternErrorUnsupported decorrelation patternThe planner cannot decorrelate a correlated subquery (e.g., nested subqueries, non-equality correlation predicates).Rewrite the subquery as an explicit JOIN or use a different correlation pattern. See also UM7015.

Example triggering UM4003:

from Users u
| select Name, (from Orders | filter UserId == u.Id and Amount > u.MinAmount | select count(*))
^^^^^^^^^^^^^^^^^^^^ Non-equality correlation not decorrelatable

Unsupported Feature Errors (UM5xxx)​

These indicate usage of syntax or features the compiler does not yet support.

CodeNameSeverityMessageDescriptionAction
UM5001UnsupportedFeatureErrorFeature not supported by the compilerA query construct is recognized but not yet implemented.Check Query Language for supported features. Rewrite using supported syntax.
UM5002UnsupportedOperatorErrorOperator not supportedAn operator (e.g., bitwise, ternary) is not supported in the query language.Use supported operators. See Query Language.
UM5003UnsupportedSyntaxErrorSyntax construct not supportedA syntax construct is valid in the parser but not supported by the compiler backend.Rewrite using a different approach.
UM5004UnsupportedNodeTypeErrorNode type not supportedAn AST node type was encountered that the compiler doesn't handle.Simplify the query. This may indicate an internal issue — report if the syntax looks valid.
UM5005SyntaxErrorErrorQuery text could not be parsedThe query text has a syntax error that prevents parsing.Check query syntax. Look for missing operators, unmatched parentheses, or invalid tokens.

Example triggering UM5005:

from Users
| filter Name ==
^ UM5005: Unexpected end of expression

Emission Errors (UM6xxx)​

Emission errors occur during C# code generation from the physical plan.

Core Emission (UM6001–UM6010)​

CodeNameSeverityMessageDescriptionAction
UM6001EmissionErrorErrorCode emission failedGeneric emission failure — the code generator could not produce valid C# from the physical plan.Report as bug with full query and schema.
UM6002MissingParameterTypesErrorParameter types not specifiedQuery uses parameters but their CLR types were not declared.Declare each parameter with an explicit type in the schema query header, e.g. query GetById(id: int) -> ....
UM6003MemoryBudgetExceededErrorTrusted heap budget exceededThe finalized plan's proven upper bound on live heap bytes is larger than the budget the query host requested.Raise the requested budget, or change the plan (add an index, bound a TOP-N) so its proven bound fits. The diagnostic names the dominant contributor.
UM6004MemoryBudgetUnprovableErrorTrusted heap budget could not be provenThe plan contains a surface the memory model cannot prove allocation-free per call. This is a statement about the plan, not about your query text: a different plan for the same query may satisfy it.Read the surface named in the message. Common causes: a secondary index that re-synchronizes committed lag on every execution, a collection-valued scalar subquery, a growable sort buffer, or a result container the caller owns. See Memory Contract.
UM6010ReactiveUnsupportedMaintainerRejectedErrorNo supported reactive materialized maintainerA reactive query reached emission without a supported Z-set materialized maintainer.Use a maintainable query shape, add the needed materialized index/view, or keep the query as a non-reactive compiled query.
UM6011ReactiveUnsupportedShapeErrorReactive query shape unsupportedThe reactive query contains a shape outside the current Z-set materialized maintainer matrix.Rewrite the query to a supported materialized maintainer shape or wait for the missing maintainer family to be implemented.

Portable Emission (UM6020–UM6025)​

These errors occur when compiling for the portable emission target (cross-platform, IL2CPP-safe).

CodeNameSeverityMessageDescriptionAction
UM6020PortableUnsupportedOperatorErrorPhysical operator not supported in portable targetA physical operator has no portable implementation.Simplify the query to use operators available in portable mode.
UM6021PortableUnsupportedExpressionErrorExpression type not supported in portable targetAn expression node cannot be emitted in portable mode.Rewrite the expression using supported constructs.
UM6022PortableUnsupportedStrategyErrorStrategy not supported in portable targetA join or scan strategy has no portable implementation.Adjust indexes or query structure to use portable-compatible strategies.
UM6023PortableUnsupportedFunctionErrorFunction has no portable implementation descriptorA built-in or UDF function has no implementation for the portable target.Use only functions that support portable emission.
UM6024PortableReactiveNotSupportedErrorReactive query mode not supported in portable targetReactive (live-updating) queries are not available in portable mode.Use one-shot query mode for portable builds.
UM6025PortableMutationNotSupportedErrorMutation mode not supported in portable targetMutation operations cannot be emitted in portable mode.Perform mutations through the runtime API directly.

Plan Warnings (UM7xxx)​

Plan warnings indicate that your query compiles successfully but may have performance or correctness concerns. These do not prevent compilation but should be reviewed.

Scan and Sort Warnings​

CodeNameSeverityMessageDescriptionHow to Fix
UM7001FullScanOnLargeTableWarningFull scan on a large table (> threshold rows based on PGO)No index covers the filter predicate, forcing a full table scan. With PGO data, the table is known to be large.Add an appropriate index on the filtered column(s).
UM7003UnusedIndexWarningUnused index — a suitable index exists but was not usedAn index on the table could theoretically cover the query but the optimizer chose not to use it.Verify index column order matches the query pattern. Consider INCLUDE columns.
UM7004SortWithoutLimitWarningSort without LIMIT on potentially large result setA sort orders the entire result set with no take to cap the output.Add take N to limit results, or rely on an index that provides the desired order.
UM7008FullSortOnLargeDatasetWarningFull sort on large datasetPGO data indicates the sorted dataset is large, making sort expensive.Add a covering index that matches the sort order, or add take N.

Example triggering UM7001:

from Users
| filter Age > 18
^^^^^^^^^^^^^^^^ UM7001: Full scan — no index on 'Age'
| select Name

Join Warnings​

CodeNameSeverityMessageDescriptionHow to Fix
UM7002CartesianProductWarningCartesian product (JOIN without condition)A JOIN has no predicate, producing a cross product of all rows.Add a join condition: join Orders o (u.Id == o.UserId).
UM7007NestedLoopOnLargeTablesWarningNested loop join on large tables — consider adding an indexThe optimizer chose a nested loop join for tables known (via PGO) to be large. This is O(N×M).Add an index on the join key of the inner table, or enable PGO to let the optimizer choose hash join.
UM7010SemiAntiJoinNestedLoopWarningSemi/Anti join fell back to NestedLoopAn EXISTS/NOT EXISTS subquery could not be decorrelated or lacks a suitable index, forcing nested loop evaluation.Add an index on the correlation key, or rewrite as an explicit JOIN.

Subquery Diagnostics​

CodeNameSeverityMessageDescriptionHow to Fix
UM7011NestedCollectionAllocationWarningNested collection subquery generates per-entity allocation and O(N×M) scanA nested collection projection creates a List<T> per outer row and performs a full inner scan for each.Add an index on the correlation key. Consider flattening the query.
UM7012NestedObjectProjectionNotEmittableWarningNested object projection detected but emission not yet supportedA nested object projection was planned but code generation for it is not yet implemented.Flatten the projection or wait for a compiler update.
UM7015ResidualCorrelatedScalarSubqueryUnsupportedErrorResidual correlated scalar subquery is unsupportedA scalar subquery still references an outer-row slot after planning. The compiler stops before C# or portable emission.Rewrite as an explicit JOIN with aggregation, or use a scalar shape that the optimizer can decorrelate.
UM7022ResidualLateralJoinUnsupportedErrorCorrelated relation-valued JOIN sources are not supported after bindingThe JOIN RHS references outer columns, but no DependentApply physical contract exists for native and portable execution.Rewrite it as an uncorrelated JOIN/aggregate shape.

PGO Warnings​

CodeNameSeverityMessageDescriptionHow to Fix
UM7006MissingPgoStatisticsWarningMissing PGO statistics for a critical queryNo profile data is available for this query, preventing the optimizer from making cost-based decisions.Run PGO collection. See PGO for setup instructions.
UM7009IndexRecommendationInfoIndex recommendation from the Index AdvisorThe optimizer suggests adding an index to improve this query's performance.Review the recommendation and add the suggested index if appropriate.
UM7013PgoUntrustedHeuristicFallbackWarningPGO profile is untrusted — falling back to heuristic estimationThe PGO profile failed trust validation; the optimizer uses heuristic selectivity estimates instead.Re-run PGO collection with representative workload data.
UM7014PgoUntrustedOverrideBlockedWarningPGO profile is untrusted — behavioral override blockedA PGO-directed strategy override (e.g., SkipSort, NoOptimize) was blocked because the profile is untrusted.Re-run PGO collection. Untrusted profiles cannot influence planning decisions.
UM7016HeuristicPlanningFallbackWarningPlanner used heuristic fallbackCosting or strategy selection fell back to heuristics because statistics or metadata was unavailable.Provide PGO data or ensure schema metadata is complete.
UM7018PgoProfileDataInconsistencyWarningTrusted PGO profile contains inconsistent dataThe profile passed trust validation but contains internally contradictory data (e.g., invalid key ranges).Re-collect PGO data. The profile may be from a stale schema version.

Join Planning Diagnostics (JOINxxx)​

These diagnostics are specific to join strategy selection during physical planning.

CodeNameSeverityMessageDescriptionAction
JOIN0001JoinNoStrategyErrorNo applicable join strategyThe planner could not find any valid join implementation for the given predicate and available indexes.Verify the join predicate uses equality on indexed columns. Add a primary or secondary index on the join key.
JOIN0003JoinConjunctivePredicateUnsupportedWarningConjunctive join predicate unsupportedA multi-condition join predicate (AND) cannot be served by non-BETWEEN strategies.Simplify the join predicate or ensure the combined columns are covered by a composite index.
JOIN0002JoinSecondaryIndexNotProducedWarningJoin secondary index strategy could not be producedThe planner attempted to use a secondary index for the join but failed (e.g., type mismatch, missing index).Verify the secondary index definition matches the join key type and column.
JOIN0003JoinSecondaryIndexProducedInfoJoin secondary index strategy producedInformational: a secondary index strategy was successfully generated for this join.No action needed. This confirms an index-based join is available.
JOIN0004JoinPgoHintUnavailableWarningPGO join strategy hint unavailablePGO data recommended a specific join strategy, but it could not be produced (e.g., missing index).Add the index required by the PGO-recommended strategy, or re-collect PGO data.
JOIN0005JoinPgoEnforceUnavailableErrorPGO join strategy enforcement failedPGO enforcement mode requested a specific strategy that is not available. Unlike JOIN0004 (hint), this is a hard error because enforcement is strict.Add the required index, or change the PGO enforcement mode from Enforce to Hint.

Optimization Trace Codes​

When [DebugGeneration] is enabled, the optimizer records short codes naming the decisions it made. A trace code is a decision, not a strategy inventory: the optimizer chooses between far more physical strategies than it explains, and only the decisions worth surfacing get a code.

This page previously listed a nine-row JOIN:* strategy table. Eight of those codes were never recorded by any planner — they were declared alongside the real ones and copied here, so the list described an intent rather than the tool's behaviour, and JOIN:PGO never existed even as a declaration. If you searched a trace for one of them and found nothing, that is why.

The authoritative list is the ConjureDB.Compiler.Diagnostics.TraceCodes table, which a governance test keeps equal to the set of codes planners actually record — in both directions, so it can neither list a code nothing emits nor miss one that some planner does. The join family currently records one code:

Trace CodeDecision
JOIN:HASHA hash join's runtime contract was planned

See Compilation Tracing for the trace format and how to read the full set.


Binding Resolution Errors (BIND_RES_xxx)​

These errors are raised during the binding name-resolution phase. They are thrown as BindingResolutionException and indicate that a name, type, or construct could not be resolved.

Table and Column Resolution​

CodeMessageDescriptionAction
BIND_RES_001Table not found in schemaThe table name in from does not match any schema declaration.Check table name spelling. Verify it exists in your .conjure file.
BIND_RES_002Column not foundThe referenced column does not exist on the specified (or any in-scope) table.Check column spelling and table alias.
BIND_RES_003Ambiguous columnA column name matches multiple tables; no alias disambiguates it.Qualify with table alias: t.ColumnName.
BIND_RES_004Type mismatchType mismatch in a specific context (e.g., join condition expects matching types).Align types or add an explicit CAST.

Function Resolution​

CodeMessageDescriptionAction
BIND_RES_005Function not foundNo function with the given name exists in the catalog.Check spelling. See Query Language for built-in functions.
BIND_RES_006Function does not support DISTINCTDISTINCT modifier was used on a function that doesn't support it.Remove the DISTINCT modifier.
BIND_RES_007No matching function overloadThe function exists, but none of its overloads accepts the call's argument types or count (e.g. max over a string). The message lists the argument types and the available signatures (canonical UM1210).Pass arguments of an accepted type or arity, or cast an argument to one of the listed parameter types.
BIND_RES_009Window function requires OVER clauseA window function (e.g., row_number, lag) was called without OVER().Add OVER(...) clause with appropriate partitioning and ordering.
BIND_RES_015Ambiguous function overloadMultiple function overloads match the provided arguments equally well.Add explicit CASTs to narrow the overload selection.
BIND_RES_016Function does not support OVER clauseA non-window function was called with an OVER clause.Remove the OVER clause — this function is not a window function.

Type Coercion​

CodeMessageDescriptionAction
BIND_RES_011No common typeCASE/IN branches or binary operands have no common type for implicit conversion — including two numeric operands no implicit conversion joins (long with ulong, decimal with double, a signed integral with ulong), which C# rejects too.Add an explicit cast(<operand> as T) choosing the type, or ensure operands share a compatible type.
BIND_RES_012Requires boolean expressionA context (e.g., filter, WHEN) requires a boolean but received another type.Ensure the expression evaluates to a boolean.
BIND_RES_013Requires integer expressionA context (e.g., TAKE/SKIP) requires an integer but received another type.Pass an integer value or CAST to integer.
BIND_RES_014Cannot convert or assign valueA value cannot be converted to the required target type, or cannot be assigned to it. Every write — set, update {}, insert/upsert/values fields, event payloads, record construction members, scalar command results (-> T / -> T?), pure function returns (function f() -> long { return null } is refused here), command invocation arguments, system var/fold-seed annotations and writes into annotated fold accumulators, and each column of insert … | from … | select … — admits only implicit conversions. A target that does not admit absence (a non-nullable value-type or reference-type column, member, result or parameter: string versus string?) never accepts a value that may be absent: null, a nullable column or parameter, or any value whose nullability is not proven. A filter does not narrow a later write (filter w.Nick != null | set { w.Name = w.Nick } is refused) — one explicit-absence rule for value and reference types. Reported at the value, behind the owner prefix (System 'X':, Command 'X':, Mutation 'X':); systems and commands report it under the write position's code (SCH2156 for set/update and every command write, SCH2167 for system insert/upsert fields), mutations under BIND_RES_014.Convert the value explicitly, supply a default (value ?? other), or declare the target nullable.
BIND_RES_017Unknown cast target typeThe target type in a CAST expression is not recognized.Use supported target types: int, long, float, double, string, bool, DateTime.
BIND_RES_021Cannot cast between typesAn explicit CAST between the source and target types is not supported.Check supported cast paths. Not all type combinations allow casting.

Operators​

CodeMessageDescriptionAction
BIND_RES_019Operator not supportedAn operator is not supported for the given operand types.Use a supported operator or CAST operands to compatible types.
BIND_RES_022Operator requires boolean operandsA logical operator (and, or) received non-boolean operands.Ensure both sides are boolean expressions.
BIND_RES_023Operator requires numeric operandsAn arithmetic operator (+, -, *, /) received non-numeric operands.Ensure both sides are numeric.
BIND_RES_024Operator requires comparable operandsA comparison operator (>, <, >=, <=) received non-comparable operands.Ensure operands implement comparison.
BIND_RES_025Operator requires string operandsA string operator (e.g., contains) received non-string operands.Ensure the operand is a string type.
BIND_RES_026Unary '-' requires numeric operandThe negate operator was applied to a non-numeric value.Apply negate only to numeric columns or expressions.

IN Expressions​

CodeMessageDescriptionAction
BIND_RES_027IN list cannot be emptyAn IN (...) expression was provided with an empty list.Provide at least one value in the IN list.
BIND_RES_042IN requires list, array, or subqueryThe right-hand side of IN is not a list, array, or subquery.Use in (1, 2, 3) or in (from ...) syntax.

Subquery Errors​

CodeMessageDescriptionAction
BIND_RES_018Subquery not supported in contextSubquery expressions are not supported in the current context.Rewrite without a subquery or use a different operator.
BIND_RES_020CASE requires at least one WHENAn empty internal CASE expression was encountered. This retains its diagnostic identity; authored format-2 expressions use switch, not CASE text.If authored format-2 source produced this code, report it as a compiler bug; use a switch with at least one arm and an _ default.
BIND_RES_033Subquery column count mismatchA scalar subquery must return exactly 1 column but returned more.Adjust the subquery SELECT to return a single column.
BIND_RES_035Correlated subquery requires LATERALA correlated subquery is used in a position that requires LATERAL.Mark the subquery as LATERAL or rewrite as a JOIN.
BIND_RES_043Function requires subquery argumentA function (e.g., EXISTS) requires exactly one subquery argument.Pass a subquery to the function.
BIND_RES_044Internal function requires subquery and path argumentsAn internal projection function is missing required arguments.This is typically an internal error — report as bug.
BIND_RES_045Non-empty projection path requiredAn internal function requires a non-empty projection path.This is typically an internal error — report as bug.

Let Bindings and Aliases​

CodeMessageDescriptionAction
BIND_RES_010Let binding not foundA referenced let variable does not exist in scope.Check the let name spelling and ensure it's defined before use.
BIND_RES_034Duplicate let bindingA let variable with the same name already exists.Rename one of the bindings.
BIND_RES_040Duplicate output aliasTwo columns in SELECT have the same alias.Use unique aliases for each output column.
BIND_RES_041Duplicate table aliasTwo tables/joins use the same alias.Use unique aliases for each table source.

Set Operations​

CodeMessageDescriptionAction
BIND_RES_030Set operation column type incompatibleCorresponding columns in UNION/INTERSECT/EXCEPT have incompatible types.Add CASTs to align column types.
BIND_RES_032BY column not found in right sideA BY column in a set operation doesn't exist in the right operand.Check column name spelling, or alias the right-side column to match.
BIND_RES_056BY set-operation output metadata missingInternal: a BY set-operation output column lost its binding metadata.Report as bug.
BIND_RES_059Set operation column count mismatchThe two sides of UNION/INTERSECT/EXCEPT project a different number of columns.Align the two SELECT lists.
BIND_RES_061Duplicate BY columnA BY column is listed more than once in a set operation.Remove the duplicate from the BY list.
BIND_RES_062BY column not found in left sideA BY column in a set operation doesn't exist in the left operand.Check column name spelling.
BIND_RES_063BY column ambiguous in left sideA BY column in a set operation matches multiple columns on the left side.Use explicit column selection or aliasing.
BIND_RES_064BY column ambiguous in right sideA BY column in a set operation matches multiple columns on the right side.Use explicit column selection or aliasing.

Grouping and Pagination​

CodeMessageDescriptionAction
BIND_RES_060GROUP BY requires columns onlyGROUP BY received a computed expression instead of a column reference.Use derive to compute the expression, then GROUP BY the derived column.
BIND_RES_046Composed TAKE/SKIP value out of rangeChained TAKE/SKIP operations produce a value outside Int32/Int64 range.Simplify the TAKE/SKIP chain or use smaller values.

Window Functions​

CodeMessageDescriptionAction
BIND_RES_028Window function call not normalizedInternal: a window function reference is malformed.Report as bug.
BIND_RES_029Function is not a window functionA non-window function was used in a window context.Use a proper window function (e.g., row_number, rank, lag, lead).
BIND_RES_036Window functions require ORDER BYWindow functions need an ORDER BY in the OVER clause or a preceding sort.Add sort before the window transform or specify ORDER BY in OVER.
BIND_RES_047All window functions failed to resolveEvery window function in a window transform failed resolution.Check function names and argument types.

Schema Metadata Errors​

CodeMessageDescriptionAction
BIND_RES_037Schema column has unresolved CLR typeA column's CLR type could not be resolved from the schema.Ensure the column type is a known type or declared as an extern type.
BIND_RES_038Schema alias conflictsAn alias is already mapped to a different table and cannot be reassigned.Use a unique alias for each table reference.
BIND_RES_039Logical operator type mismatchLogical operators (AND/OR) received non-boolean operands.Ensure both operands are boolean expressions.

Miscellaneous​

CodeMessageDescriptionAction
BIND_RES_048Unsupported filter typeAn unknown filter AST node type was encountered.Report as bug if the filter syntax looks valid.
BIND_RES_049Unsupported expression typeAn unknown expression AST node type was encountered.Report as bug if the expression syntax looks valid.
BIND_RES_050Pipeline transform / closed lexical value errorTwo shapes share this code. (a) Dynamic TAKE/SKIP values cannot be composed when chained. (b) A scope with a closed lexical value catalog — a frame system body is one — named a value the catalog does not declare, or a member the named value's type does not have (ExpressionResolver.IdentifierAndLiteral.cs, BindingScope.LexicalValues.cs). An enum literal is no longer case (b): the schema's declared enums now reach binding as a catalog and CrateGrade.Priority resolves to a typed constant in all three dialects. A bare member name (Priority on its own) is still case (b), deliberately — see BIND_RES_069.(a) Use a single TAKE/SKIP with a dynamic value, or chain only literal values. (b) Bind the value first — read it from a column, a var, or an insert payload — or, for an enum member, qualify it with its enum.
BIND_RES_058Assignment has no parsed scalar expressionAn assignment reached binding without the parser-populated expression payload.Report as a compiler bug; valid parsed assignment syntax always carries this payload.
BIND_RES_069Enum declares no such memberA qualified name resolved its root to a declared enum, but the enum declares no member with that name. The message names the enum and lists every member it does declare. This is deliberately not BIND_RES_050: that code says the root name is undeclared, which would be a false statement about a name the catalog knows. Member references require exact declared spelling. A case-only miss such as CrateGrade.pRiOrItY is reported as UM1213 with the actual declared spelling; a name with no matching declaration reaches this code. Note that a bare member name is not this error: enum constants must be qualified, because the enum catalog is schema-global and admitting bare members would make adding a member to a schema a source-breaking change for unrelated queries.Use one of the members the message lists, or add the member to the enum declaration.
BIND_RES_070Enum name is ambiguous with a name in scopeA qualified name's root names both a declared enum and a value the query introduced — a relation alias, a row alias, a parameter or a local — so Root.Member has two readings. A COLUMN sharing an enum's name is not this error: rank: Rank is ordinary, and a qualified Rank.Officer is a relation lookup that finds nothing rather than a second reading of the column. The binder refuses rather than arbitrating: resolving it in either order would decide the author's meaning silently, and a later rename could change it again without a diagnostic. This is checked before any resolver runs, so the answer does not depend on which one would have won.Rename the alias, parameter or local, or rename the enum in the schema.
BIND_RES_071Sort key is a constantA sort key resolved to a constant, which orders nothing because every row compares equal on it. The sort grammar takes an identifier path rather than an arbitrary expression, so this is reachable only through a path that resolves to a constant — an enum member (sort Rank.Officer). Refused at binding, where the clause is still visible, rather than in the planner, which would report an internal winner-surface failure naming neither the clause nor the cause.Sort by a column, or by an output alias of the pipeline. An enum column already sorts by its backing value. The check covers the DIRECT form only: a sort key that is an output alias projected from a constant (select g = Rank.Officer | sort g) is still admitted, as select g = 1 | sort g always has — by the time sort resolves it, the alias is a column of the projected surface.
BIND_RES_072Invalid construction workspace readAn indexed read name[index] binds only as a read of a construction workspace declared in scope (a frame system var ... = workspace(...)); the target must be that unqualified workspace name and the index must be a non-nullable int. Indexing anything else — a query parameter, a column, a collection-typed extern value — is rejected here rather than reported as a generic expression error (ExpressionResolver.ResolveWorkspaceRead).Index only an in-scope workspace with a non-nullable int; read keyed external data through a join or a function instead of an indexer.
BIND_RES_073Window partition key is a constantA window by key resolved to a constant, which partitions nothing because every row falls in the one partition it names. Like BIND_RES_071, this is reachable only through an identifier path that resolves to a constant — an enum member (window by Rank.Officer (...)). Refused at binding, through the same owner as constant sort keys, rather than surfacing as the unrelated BIND_VAL_010 type check.Partition by a column, or omit by to compute the window over the whole input. An enum column is an ordinary partition key.
BIND_RES_074Bare none requires an exact expected ref entity domainA bare none (reference absence) is typed only by its destination; here no destination states a concrete non-nullable entity-handle domain (canonical UM1202).Annotate the binding or fold seed with its ref type, or write none into a declared handle column.
BIND_RES_075Fold result is not a whole valueAn immutable fold result was used as a whole scalar or record value; only its readonly fields are values (canonical UM1203).Select one result field.
BIND_RES_076Fold result member not declaredThe selected member is not declared by the issuing immutable fold result (canonical UM1204).Use a field the fold result declares.
BIND_RES_077Cannot infer a type from nullA position typed by its value alone has no declaration to contextualize an untyped value, so a bare null (absent of every type) cannot state which absent value it is — as in C#, where var x = null and new { V = null } are errors. Self-typed positions: unrouted command event and error payload members (and their nested inferred records), command var, function let, system var and unannotated fold seeds, and select outputs with no declared target (neither a declared result record member nor the single output of a declared scalar result such as -> long?[]). Positions with an exact required type (if/require guards, draw arguments, handle targets) instead contextualize the null and report their own exact-type refusal (canonical UM1205).Write a value of a concrete type, or write into storage that declares the type (route the event into an event table, declare the result record member, annotate the local).
BIND_RES_NUMERIC_CONSTANT_OVERFLOWIntegral constant overflowAn integral constant expression is proven to leave its carrier under the governing checked overflow mode (canonical UM1206).Widen the operand type, use unchecked(...) where wrapping is intended, or change the constant.
BIND_RES_NUMERIC_CONSTANT_DIVZEROIntegral constant division by zeroAn integral constant expression is proven to divide or take a remainder by zero (canonical UM1207).Change the divisor.
BIND_RECORD_008Construction type is not an admitted declared structA pure function constructs a type that is not an admitted declared struct (canonical UM1208).Construct a declared struct that the pure function surface admits.
BIND_RECORD_009Construction shape is not admittedA pure function constructs a declared struct whose fields are not all non-nullable int or whose original declared-type publication is unavailable (canonical UM1209).Use a struct with non-nullable int fields only.

Mutation Targets (BIND_MUT_xxx)​

CodeMessageDescriptionAction
BIND_MUT_021Query INSERT output names no target columninsert T | from … | select … maps each select output onto the target column its declared name denotes (resolved by the exact authored target-column name). An output that declares no name — a computed item written without Name =, whose alias the parser synthesized (select s.Id + 100, …) — or whose name denotes no column of T (Zz = s.Total) is refused at the select item, behind the Mutation 'X': prefix.Write each output as Column = expression, naming the target column it writes.

Binding Build Errors (BIND_BLD_xxx)​

These errors occur during the IR building phase — when the resolved AST is lowered into the relational intermediate representation. They are thrown as BindingBuildException.

CodeMessageDescriptionAction
BIND_BLD_001OutputColumnId is invalidA column identity is invalid during IR construction. Resolver must assign valid IDs.Report as bug — the binding phase failed to assign column identities.
BIND_BLD_002ClrType is nullA node's CLR type was not resolved before IR building.Report as bug — the type resolver missed this node.
BIND_BLD_003ComputationExpressionId is missingAn aggregate descriptor lacks its computation expression identity.Report as bug — aggregate binding incomplete.
BIND_BLD_005IN list requires literal arrayIN list operands must be compile-time literal values for array construction.Use literal values in the IN list, or pass as a parameter.
BIND_BLD_006Output column count mismatchThe IR node's output column count doesn't match what was expected by the parent.Report as bug — indicates a binding/lowering inconsistency.
BIND_BLD_007NULLS FIRST/LAST not supportedORDER BY with explicit NULL ordering is not yet implemented.Remove NULLS FIRST/LAST clause. Default NULL ordering applies.
BIND_BLD_008Aggregate requires argumentAn aggregate function has no argument expression during IR building.Provide an argument to the aggregate function.
BIND_BLD_009Unsupported binary operatorA binary operator cannot be lowered to the IR.Use a supported operator. Check Query Language.
BIND_BLD_010Let binding not found during IR buildA let binding referenced during IR construction does not exist.Report as bug if the let binding was defined in the query.
BIND_BLD_011Duplicate LET bindingA LET name is defined more than once in the query during IR build.Use unique LET names.
BIND_BLD_012Unsupported window frame bound kindAn unrecognized window frame boundary type was encountered.Use standard frame bounds: UNBOUNDED, CURRENT ROW, or numeric PRECEDING/FOLLOWING.
BIND_BLD_013Set operation column cannot castA set operation column type cannot be cast to the target type during IR lowering.Ensure corresponding columns have compatible types or add explicit CASTs.
BIND_BLD_014Unknown FilterPhase valueAn internal filter phase enum value is not handled.Report as bug.
BIND_BLD_015Set operation column cannot be paddedA by set operation must pad a column whose type has no canonical default value.Project the column explicitly on every branch, or use a type with a default.
BIND_BLD_016ORDER BY key unavailable after projectionThe sort key cannot be represented once the projection boundary has dropped it.Sort before the projection, or include the key in the projected output.
BIND_BLD_017NOT IN needs an element-inspectable right-hand sidenot in is false whenever any element is null, so binding must be able to test the elements; a carrier that is not an array cannot be tested.Declare the parameter as a typed array. See Query Language § Set Membership.
BIND_COALESCECOALESCE requires at least two argumentsInternal invariant of the coalesce node: a ?? b always supplies two operands, so authored text cannot reach it.Report a compiler defect.

Binding Contract Errors (BIND_CONTRACT)​

CodeMessageDescriptionAction
BIND_CONTRACTContract violation(s) detectedOne or more binding invariants were violated. The exception contains a list of BindingContractViolation records with individual error codes and messages.Inspect the Violations collection for specific codes. Report as bug.

Ephemeral Table Errors (UMEPxxx)​

These schema/compiler diagnostics enforce frame-local safety and current capability boundaries of ephemeral storage.

CodeSeverityDescriptionAction
UMEP001ErrorAn ephemeral field is not a schema-proven unmanaged value type.Use a scalar, enum, or struct type; remove strings, binary, collections, class types, and extern CLR types.
UMEP002ErrorAn event table or singleton table declares @index, @unique, @@index, or @@unique; these kinds own no rows to index.Use chunk scans or entity-slot probes; a plain ephemeral table may declare @index(kind: lookup | bucketed) instead — see UMEP018.
UMEP003ErrorAn ephemeral kind declares persistence.Remove the persistence option.
UMEP004ErrorAn ephemeral kind declares a persistent type_id.Remove type_id; generated frame storage receives a compiler-owned runtime identity.
UMEP005ErrorAn event or singleton table declares @id.Remove the id; events are keyless and singletons have implicit one-row identity.
UMEP006ErrorA singleton declares capacity or max_capacity.Remove the option; singleton capacity is exactly one.
UMEP007Errorlifetime appears on a non-event table.Use lifetime: frame or lifetime: next_frame only on event table.
UMEP008ErrorAn @@group declaration is invalid or appears on an unsupported kind.Group only known, non-id fields of a plain ephemeral table, and place each field in at most one group.
UMEP009ErrorA relation or navigation points into frame-lifetime storage.Store a plain id when explicitly needed; persistent rows cannot own relations to ephemeral rows.
UMEP010Errormax_capacity is non-positive or smaller than capacity on a non-event frame-lifetime table; a malformed singleton bound can report this code in addition to UMEP006.Give a plain ephemeral table a positive hard cap at least as large as its capacity hint. Remove max_capacity from singleton tables (UMEP006) and event tables (UMEP021).
UMEP011ErrorAn entity-domain declaration is duplicate, ambiguous, unknown, or contains a non-ephemeral member.Give each plain ephemeral table at most one valid domain membership.
UMEP012ErrorAn ephemeral entity @id is not a non-nullable int.Use exactly one non-nullable integer id.
UMEP013ErrorA reactive query or materialized view reads an ephemeral source whose publication into existing IVM is not implemented.Current limitation, not a permanent integration ban. Until supported, use a compiled query or explicitly publish a persistent summary; see the corrected integration contract.
UMEP014ErrorA transactional command or mutation writes an ephemeral target.Move the operation into a system, or write a persistent outcome through the transaction.
UMEP015ErrorA routed command event targets a table that is not an event table.Route the event to an ephemeral event table, or remove the table route.
UMEP016ErrorA persistent column reaches a handle(...) type, directly or through a declared struct type.Entity handles are frame-lifetime identities and are never persisted; store a domain-owned persistent key instead.
UMEP017ErrorA handle(...) column is declared nullable.Drop the ?; the absent value of a handle column is EntityHandle.None.
UMEP018ErrorInvalid @index on a plain ephemeral table: an unsupported kind, an unsupported or nullable key type, the @id column, an unsupported index option, a buckets: count that is not positive or exceeds the table's row bound (max_capacity when declared, otherwise capacity), a name: already used by another index of the same table (its derived <Table>_<Column>_Index default included), or a composite @@index/@@unique.Declare @index(kind: lookup | bucketed) on a non-nullable integral, enum, or handle(D) column (bucketed excludes handle); size buckets: between 1 and the table's row bound — its max_capacity when it declares one, otherwise its capacity; give each index of a table a distinct name; drop composite index declarations, which are not supported on ephemeral tables.
UMEP019ErrorAn indexed ephemeral column is named in a @@group.Remove the column from the @@group; an indexed column is placed in its own storage group automatically.
UMEP020ErrorA frame-lifetime ephemeral table, event table, or singleton table declares schema_version.Remove schema_version; these kinds have no persisted schema descriptor.
UMEP021ErrorAn event table declares max_capacity.Remove max_capacity; an event stream has no hard row cap.

Frame runtime contract errors​

These are not diagnostics: they are typed exceptions a generated frame system throws at run time when the host has put the database in a state a frame may not read. Each carries a reason code so a handler can branch on the cause rather than on a message.

TypeReasonMeaningAction
FrameHostContractExceptionFrameHostContractError.PersistentIndexUncommittedChangesA system with a join P t on index (…) acquired a persistent lookup index that does not reflect committed state — the table has staged uncommitted changes, or a committed change has not reached the index yet. The exception names the system, the table and the index. A frame never synchronizes an index on the frame thread and never scans the primary index instead, so this fails closed rather than pausing or reading stale rows.Finish (commit or roll back) the transaction that changed the table before calling Pump — the host commits before it pumps (Ephemeral Tables § Persistent index sources in a system). The frame loop is usable again on the next pump.
EphemeralParentLinkViolationExceptionEphemeralParentLinkViolation.CycleA write to a @parent link column would make the row its own ancestor. The message names the table, the link column, the row and the proposed parent.Do not close the cycle: a @parent column is a forest at all times (Schema Language § @parent). Nothing was stored, so the table is unchanged.
EphemeralParentLinkViolationExceptionEphemeralParentLinkViolation.MaxDepthExceededThe proposed link would put the row at a depth past the declared max_depth. The message names the computed depth and the declared bound.Raise max_depth (and the depth index's buckets: with it, since the domain must hold [0, max_depth]), or reparent to a shallower row.
EphemeralParentLinkViolationExceptionEphemeralParentLinkViolation.ParentNotShallowerThe live parent's stored depth is not strictly less than the depth the ancestor walk computed for the row. It is a defence-in-depth check: the two can disagree only if something other than the link owner wrote the depth column.Treat it as a defect report, not a shape to handle — the depth column has a second writer. The declarative surface refuses both writers it can see statically (SCH2171).
EphemeralIndexDomainViolationException— (typed, no reason enum: it has exactly one cause)A write stored a bucketed index key outside the index's declared [0, buckets) domain. The message names the table, the column, the rejected key and the domain; TableName / ColumnName / Key / Buckets expose them. Non-negativity of a computed key is a runtime fact, not a column-type one, so this is an exception rather than a diagnostic.Widen the index's buckets: (subject to the table's row bound), or clamp the value before writing it. The bucket is resolved before anything is stored, so a rejected write leaves the column and the index exactly as they were.

Schema Diagnostic Codes (SCHxxxx)​

Schema diagnostics are emitted by the schema processor during .conjure file parsing, import resolution, binding, and validation. They use the DiagnosticBag infrastructure with phase tagging.

Schema Phases​

PhaseDescription
ParseLexing and parsing of .conjure text
ImportImport path resolution and file loading
ValidatePre-bind semantic validation (duplicate fields, annotations)
BindBinding, type resolution, and fragment expansion

Lexer Errors (SCH0xxx)​

CodeSeverityMessageDescriptionAction
SCH0001ErrorUnterminated string literalA string literal is missing its closing quote.Add the closing " to the string.
SCH0002Warning(Lexer warning)A non-fatal lexer issue was detected.Review the token at the reported position.
SCH0003ErrorLexer errorA character sequence could not be tokenized.Check for invalid characters in the schema file.

Parse Errors (SCH1xxx)​

CodeSeverityMessageDescriptionAction
SCH1001ErrorExpected token not foundThe parser expected a specific token (identifier, {, =, etc.) but found something else.Fix the syntax at the reported position. Common causes: missing braces, typos.
SCH1002ErrorUnexpected tokenAn unexpected token was encountered where a declaration, field, or keyword was expected.Check the schema syntax. Ensure declarations follow the correct format.
SCH1003ErrorInvalid option valueA table or field option has an invalid value (e.g., invalid persistence mode).Use valid values. Persistence: local, remote, none.
SCH1004ErrorInvalid index kindAn unrecognized index type was specified.Use supported index kinds.
SCH1005ErrorInvalid annotationA field or table annotation (e.g., @id, @@index) is not recognized.Check annotation spelling. Valid field annotations: @id, @relation, @default.
SCH1006ErrorInvalid index optionAn index option is not recognized or has an invalid value.Check index option names and values.
SCH1007ErrorEmpty bodyA declaration body (table, type, enum) is empty.Add at least one field to the declaration.
SCH1008ErrorInteger literal out of rangeAn integer value in the schema exceeds Int32 range.Use a value within Int32 range (−2,147,483,648 to 2,147,483,647).
SCH1021ErrorAnnotations not supported on type fieldsA type (not table) field has annotations, which are only valid on table fields.Remove annotations from type fields.
SCH1028ErrorFragment invocation syntax is not canonicalA fragment invocation is missing its parenthesized argument list, contains an empty or malformed argument, or cannot be represented as one canonical typed expression with a valid source span.Use @fragment(...) and fix the argument expression at the reported span.

Binding Errors (SCH2xxx)​

CodeSeverityMessageDescriptionAction
SCH2001ErrorDuplicate declarationA name (table, enum, type, query, mutation, fragment, extern) is declared more than once.Rename one of the declarations to be unique.
SCH2002ErrorUnknown typeA type reference cannot be resolved to any declared or extern type.Check type name spelling. Declare it as a table, type, enum, or extern type.
SCH2003ErrorForeign key references non-existent tableA @relation annotation points to a table that doesn't exist in the schema.Check the target table name in the @relation.
SCH2005ErrorTable has no primary keyA table has no field with the @id annotation.Add @id to exactly one field in the table.
SCH2006ErrorTable has multiple primary keysMore than one field has the @id annotation. ConjureDB requires exactly one PK.Remove @id from all but one field.
SCH2007ErrorUnknown index typeAn @@index annotation specifies an unrecognized index kind.Use a supported index type.
SCH2009ErrorQuery parameter has unknown typeA query parameter references a type not found in the schema.Declare the type or use a built-in type.
SCH2010ErrorInvalid mutation return typeA mutation return type is an enum or unknown type; must be void, int, or a table/type.Use a valid return type for the mutation.
SCH2011ErrorDuplicate field nameTwo fields in the same table/type resolve to the same PascalCase name.Rename one of the fields to be unique after PascalCase conversion.
SCH2012ErrorUnknown fragmentA @fragmentName reference in a query/mutation body refers to a non-existent fragment.Define the fragment or check the spelling.
SCH2013ErrorFragment argument count mismatchA fragment invocation passes the wrong number of arguments.Match the number of arguments to the fragment's parameter list.
SCH2014ErrorDuplicate key ordinalTwo fields in a table have the same key ordinal value.Assign unique ordinal values to each key field.
SCH2015ErrorInvalid enum backing type / Unterminated fragmentEnum backing type is invalid (allowed: byte, sbyte, short, ushort, int, uint, long, ulong). Also: unterminated fragment invocation syntax.Use an allowed backing type for enums. Fix fragment syntax @frag(...).
SCH2016ErrorInvalid aggregation variant / Fragment expansion depth exceededAn aggregation_variant value is not recognized (allowed: all_stats, sum_count, count_only). Also: fragment expansion recursion limit hit.Use a valid variant name. Simplify fragment nesting.
SCH2017ErrorAggregation variant on non-aggregation indexAn index uses aggregation_variant but the index type is not aggregation.Remove aggregation_variant or change the index type to aggregation.
SCH2019ErrorFragment expansion size exceededFragment expansion produced more text than the maximum allowed.Reduce fragment complexity. Avoid exponentially expanding patterns.
SCH2020ErrorDeclaration exceeds maximum field countA table or type has more fields than the supported maximum.Split the declaration into multiple types or reduce field count.
SCH2021ErrorFragment expansion exceeded max field countAfter expanding fragments, the total field count exceeds the limit.Reduce the number of fields produced by fragment expansion.
SCH2022ErrorPartial index predicate is not analyzableAn @@index / @index filter: predicate is outside the supported fragment: a conjunction of column == literal, bare boolean column, and negated boolean not column terms. Inequality (>, <, !=), disjunction (or), arithmetic and function calls are rejected.Rewrite the predicate as an equality conjunction, or drop filter: and index the whole table. A predicate outside this fragment cannot be proven to imply a query's filter, so the index would be maintained on every write and never selected.
SCH2027ErrorDuplicate indexTwo index declarations on one table have the same physical identity — kind, key columns and every declared option agree — whatever their spelling: field @unique beside @@unique(fields: [Field]) or @index(kind: unique) is the same unique index declared twice. Reported at the later declaration in binding order (field-level before @@).Delete one of the two declarations.
SCH2032ErrorView source relation unresolvedA view source pipeline does not reference a declared source relation.Start the view pipeline with from <TableOrView> and ensure the source is declared.
SCH2033ErrorInvalid materialized view capacityA materialized view declares a non-positive capacity.Use a positive capacity value or omit it to use the compiler default.
SCH2034ErrorUnsupported materialized view refresh moderefresh: rebuild or refresh: manual was parsed but is not executable by the in-memory materialized maintainer contract.Use refresh: incremental for executable materialized views.
SCH2036ErrorView source projection missingA view source does not end with a select projection producing the declared fields.Add a final select { ... } whose aliases match the view fields.
SCH2037ErrorDuplicate view projection fieldA view source projection produces the same field more than once.Keep one projection item per declared view field.
SCH2038ErrorView projection missing fieldA declared view field is not produced by the source projection.Add the missing projection alias.
SCH2039ErrorView projection extra fieldThe source projection produces a field not declared by the view.Remove the projection item or declare the field.
SCH2040ErrorView projection type mismatchA projected field type is not assignable to the declared view field type.Align the declared field type with the source expression.
SCH2041ErrorView dependency cycleViews or materialized views depend on each other cyclically.Break the cycle by making one view depend on a base table or non-recursive view chain.
SCH2042ErrorSemi/anti projection owner invalidA semi/anti materialized view projection references the right source or an ambiguous unqualified field.Project only left-source fields and qualify ambiguous fields with the left source.
SCH2043ErrorMutation targets derived relationA mutation targets a view or materialized view.Mutate authoritative base tables instead; views are derived read-only relations.
SCH2044ErrorLeft-join projection unsupportedA materialized left join projects a right-source expression that cannot be null-extended by the v1 maintainer.Project right-source fields directly, declare them nullable, or move the expression to a later supported slice.
SCH2045ErrorView projection semantic binding failedA view projection cannot be resolved from its canonical typed source syntax.Fix the typed source pipeline and ensure its final select matches the declared view fields.
SCH2062ErrorInvalid query result terminal contractA query result terminal has a typed else outcome, does not match the declared return shape, or is applied to a reactive query.Remove the typed else outcome, align the terminal with the return type, or use a non-reactive query.
SCH2063ErrorQuery result projection field invalidAn authored query projection names a field absent from the declared result record or traverses a field without a nested record shape.Align projection field names and nesting with the declared result type.
SCH2064ErrorInvalid file-local table aliasA using Alias = Table duplicates another alias of the file, collides with a visible declaration name, or names something other than a declared table (aliases cannot chain); or a local symbol — query parameter, let, source alias, or in a system a driver/join/fold alias, local, derive, values input, random stream, fold result, workspace or grid snapshot — has the same (case-insensitive) name as an active alias of its file.Rename the alias or the local symbol, and point the alias at a declared table.
SCH2110ErrorInvalid command pipelineA command query pipeline or remaining generic command pipeline surface is malformed: missing target table, unknown table, unsupported operator, missing terminal, invalid assignment/projection, or unsupported reserved operation.Fix the pipeline so it names a declared table, uses supported operators, and for var query bindings ends with a lower-case cardinality terminal such as single, count, or to_list.
SCH2111ErrorUnknown command kindA command kind clause is not one of the supported command kinds.Use local, local_or_online, online_player, admin, server_job, or internal.
SCH2112ErrorUnknown idempotency parameteridempotent: by <param> references a parameter not declared by the command.Rename the idempotency key reference or add the missing command parameter.
SCH2113ErrorUnknown command metadata parameterA command metadata call, such as scope: player(...) or auth: player(...), references an unknown command parameter.Ensure every metadata parameter reference names a declared command parameter.
SCH2114ErrorDuplicate command variableA command variable reuses a command parameter name or a previously declared variable name.Rename the variable so every command-scope name is unique.
SCH2115ErrorMissing command returnA command declares a result type but its body has no return statement.Add return { ... } matching the declared result type, or remove the result type.
SCH2116ErrorUnknown schema command invocationA command invocation does not resolve to a declared schema command in the current module or by canonical identity.Fix the command name, qualify it, or declare the target command.
SCH2117ErrorCommand call cycleCommands invoke each other cyclically, so execution order and error manifests cannot be determined.Break the cycle by extracting shared logic into a non-recursive command or direct pipeline.
SCH2118ErrorUnknown command argumentA named subcommand invocation passes an argument that is not declared by the target command.Remove the argument or rename it to a target parameter.
SCH2119ErrorMissing command argumentA subcommand invocation omits a required target command parameter.Pass every required argument.
SCH2120ErrorDuplicate command argumentA named subcommand invocation passes the same argument more than once.Keep one value per target parameter.
SCH2121ErrorCommand positional argument count mismatchA positional subcommand invocation has a different argument count than the target command parameters.Pass exactly the target parameter count or switch to named arguments.
SCH2122ErrorMixed command argument stylesA subcommand invocation mixes positional and named arguments.Use either all positional arguments or all named arguments in a single invocation.
SCH2123ErrorInvalid command return payload syntaxA command return payload for a typed result is not object syntax.Return an object payload: return { field = expression }.
SCH2124ErrorMalformed command return fieldA field in a command return payload is missing =.Write return fields as name = expression.
SCH2125ErrorUnknown command return fieldA command returns a field not declared by its result type.Remove the field or add it to the declared result type.
SCH2126ErrorMissing command return fieldA command return payload omits a field required by the declared result type.Include every result field in the return payload.
SCH2127ErrorDuplicate command return fieldA command return payload declares the same result field more than once after PascalCase normalization.Return each result field once.
SCH2128ErrorEmpty command event nameA command event statement has an empty event name.Give the event a non-empty name.
SCH2129ErrorInvalid command payload objectA command event, error, or pipeline error payload is missing where required or is not object syntax.Use { field = expression } object syntax, and provide a non-empty payload for events.
SCH2130ErrorMalformed command payload fieldA field in an event/error/pipeline payload is missing =.Write payload fields as name = expression.
SCH2131ErrorEmpty command payload fieldA command payload field has an empty name or empty expression.Provide both a field name and an expression.
SCH2132ErrorDuplicate command payload fieldA command payload declares the same field more than once after PascalCase normalization.Keep one payload value per field.
SCH2133ErrorUnknown command expression symbolA command expression references a parameter or variable that is not in scope.Use a declared parameter, prior variable, or supported context path.
SCH2134ErrorInvalid command invocation expressionA command variable classified as an invocation is not a direct command call expression.Bind command calls as direct expressions such as var result = CommandName(arg: value).
SCH2135ErrorEmpty command argument expressionA subcommand invocation argument is present but has no expression.Supply an expression for the argument.
SCH2136ErrorUnknown command member referenceA command expression references a member not available on the variable's inferred shape.Fix the member name or project/return the member before referencing it.
SCH2137ErrorUnsupported command context pathA command expression references a ctx.* path outside the deterministic context allowlist.Use supported paths such as ctx.now, ctx.tick, ctx.contentVersion, ctx.seasonId, ctx.random.next_int, or ctx.random.next_uint64.
SCH2138ErrorCommand expression type mismatchA command return field or subcommand argument expression has a type not assignable to the expected field or parameter type.Align the expression type with the declared result field or target parameter type.
SCH2139ErrorDuplicate command using importA module imports the same command module path more than once.Keep one using declaration for each imported module path.
SCH2140ErrorDuplicate command using aliasA module declares the same command using alias more than once.Rename one alias or remove the duplicate import.
SCH2141ErrorDuplicate command CLR artifact nameTwo schema commands in different modules share the same bare command name, which would generate colliding C# command artifact names.Rename one command until every generated command artifact name is unique.
SCH2142ErrorAmbiguous command referenceA short or alias-qualified command invocation resolves to more than one imported command.Qualify the call with a full canonical command identity or remove the ambiguous import.
SCH2143ErrorCommand write bound through varA command write operation (update, upsert, insert, or delete) is used as var x = .... Command writes are statement-shaped.Rewrite the write as a top-level statement and bind returned data with returning { ... } into name.
SCH2144ErrorCommand write filter forbiddenA command write statement uses filter, which would imply a bulk or scan-based write.Use key { ... } for update, upsert, and delete, or values { ... } for insert. Bulk writes require a separate explicit contract.
SCH2145ErrorCommand write terminal forbiddenA command write statement uses a read cardinality terminal such as single, first, count, or to_list.Remove the terminal. Write cardinality is defined by the command write statement contract.
SCH2146ErrorCommand write returning missing intoA command write statement has returning but does not bind the projection with into <name>.Add into <name> after the returning projection, for example returning { amountAfter = Amount } into inventoryAfter.
SCH2147ErrorInvalid command write keyA command update, upsert, or delete statement has a missing or invalid key, lacks required key ... else Error for missing rows, or does not resolve to a primary key / named unique index.Provide a key { ... } matching the table primary key or a declared named unique index. For update and delete, add else Error.
SCH2148ErrorInvalid command insert conflictA command conflict clause is malformed, appears outside insert, is duplicated, or the inserted values do not cover a primary key / named unique index to precheck.Use at most one insert ... | conflict else Error clause and provide values covering the target primary key or named unique index.
SCH2149ErrorDuplicate command write into bindingA command write returning ... into <name> reuses a command parameter or previously declared command variable.Rename the into binding so every command-scope name is unique.
SCH2160ErrorInvalid command auth policyThe auth clause does not match a typed policy form (none, authenticated, player(<parameter>) [optional], or role("<claim>") [optional]).Use a supported auth policy and ensure parameter references name declared command parameters.
SCH2161ErrorInvalid command idempotency policyThe idempotent clause does not match none, command_key, aggregate_scoped_command_key, or by <parameter> [optional].Use a supported typed idempotency policy and declare the referenced key parameter.
SCH2162ErrorInvalid command scope policyThe scope clause does not match none, unscoped, world, player[(<parameter>) [optional]], or aggregate[(<parameter>) [optional]].Use a supported typed scope and ensure its parameter is declared by the command.
SCH2157ErrorInvalid frame-system driverA system driver names a table that is not a plain ephemeral, event, or singleton table, updates an append-only event table, or a counted generate(...) driver's count reads a row source.Drive the system from a frame-local table, iterate event rows with from, and compute a generate count from singletons and frame parameters only.
SCH2159ErrorSystem dependency cycleThe hard before: / after: ordering a set of system declarations asks for is circular, so no total order satisfies it. Relaxable prefer_before: / prefer_after: preferences do not assert this hard dependency.Break the cycle: a hard ordering edge states a data dependency, and a cycle of them says two systems each need the other's output in the same phase.
SCH2158ErrorInvalid frame-system joinA system join does not connect its source to an already-declared alias, its on handle / on id operands have the wrong type, or an on id join targets a persistent table without a single int primary key.Join on a declared alias, give on handle an (int, uint) pair or on id an int expression, and probe persistent tables that have a single integer primary key.
SCH2163ErrorInvalid frame-system clauseA clause reads a source before its join or after a match handled that join's miss, redeclares a row-local or shadows an alias with one, writes a persistent source, or the statement declares no effect at all.Move the clause after the join (or into a guard arm), rename the row-local, treat persistent sources as read-only, and give the system at least one effect.
SCH2164ErrorInvalid frame-system effectAn effect names an undeclared alias, emits to a non-event table, omits or duplicates an emitted column, destroys / enables a source that owns no entity rows or enabled mask, or enables / disables an alias an earlier effect of the same row already destroyed.Name a declared alias, event every column of an event table exactly once, apply delete and enable/disable to plain ephemeral sources, and do not address a row after destroying it in the same clause block.
SCH2165ErrorInvalid frame-system matchA miss arm names no earlier join, names a join whose miss an earlier match already handled, or one match handles the same join miss twice.Handle each observable join miss in exactly one later match, naming a join declared before it.
SCH2166ErrorProvisional handle escapesA handle bound by var name = insert T { … } (or a var alias of one) is read outside the three positions that admit it: the for target of a later insert, a handle value in an insert payload, or a handle value in the payload of an event into a next_frame event table. A frame-lifetime stream is readable before the boundary remaps it.Keep the provisional handle in those positions; read the real handle back from the created row after the next phase boundary.
SCH2167ErrorInvalid frame-system insert or upsertAn insert or upsert names a table that is not a plain ephemeral table, omits a non-identity column that declares no @default or duplicates a non-identity column, assigns the runtime-allocated identity column, binds an upsert … for result to a var, or its for target is not a chunked alias or handle row-local in the created table's entity domain. A tag table has no non-identity column, so its payload block is optional and a written one must be empty (rule: docs/public/Schema Language, Effects, insert T); every field in it is either an unknown column or the identity, and each is reported here separately, with its own span.Create plain ephemeral rows, assign every non-identity column without a @default exactly once (a defaulted column may be omitted and receives its default), and target an alias or handle local whose entity domain contains the created table.
SCH2168ErrorInvalid frame-system drawA draw clause does not name a uint column of a singleton table in scope.Hold the xorshift32 state in a uint column of a singleton table and draw from it.
SCH2169ErrorInvalid frame-system index join (ephemeral @index, or a persistent single-column lookup)A join T a on index (a.Key == expr) or join T a on index (a.Key in (e1, …, ek)) names no column of T, supplies a key expression whose type is not assignable to the indexed column, or names a column that is not an access path: on a plain ephemeral table one that carries no admissible @index; on a persistent table one with no non-partial single-column @index(kind: lookup), or a nullable one, since a frame index key has no absent value; on an event table or singleton table any column at all, because neither owns indexable rows. It also covers the in (…) key list itself: an empty list, more than 16 keys, or a multi-key list on a persistent access path, whose pair loop walks one committed row group.Declare @index(kind: lookup) or @index(kind: bucketed, buckets: N) on the ephemeral column you join through, or a full single-column @index(kind: lookup) on the non-nullable persistent column, give every key expression the indexed column's own type, and keep an in (…) list between 1 and 16 keys — the bound is what keeps the duplicate-key skip a register-resident linear scan, so a wider fan-out wants separate systems rather than a longer list.
SCH2170ErrorIndex key written inside an open index walkA set assigns the key column of an index that a walk currently open around it is iterating. Two constructs open such a walk: a join … on index, whose pair loop contains every clause after the join, and a sort [-]alias.Col DRIVER, whose bucket walk contains the whole body. Moving a row between buckets there would skip or repeat rows. For the ordered driver the rule covers both the ordering column itself and the @parent link whose engine-maintained depth IS that column, since one link write re-files the row and its whole subtree. The rule matches on the table and column, so a second alias of the same table is the same defect.Write the key BEFORE the join, in an earlier system, or drive the system unordered. A insert or delete inside the walk needs no change: both are commands and apply at the phase boundary, long after it.
SCH2171ErrorInvalid ordered access path (sort driver or @parent)Either a sort [-]alias.Col driver whose column carries no @index(kind: bucketed), names an alias that is not the driver's, or sits on a table kind that owns no bucketed index a frame system may walk (an event table or singleton table driver); or a @parent(depth: Col [, max_depth: N]) declaration on a table that is not a plain ephemeral table (a persistent, event or singleton table owns neither of the two synchronous indexes a hierarchy is made of, and its depth would be maintained by nothing), or one that is not on a non-nullable handle into its OWN table, whose link column carries no @index(kind: lookup), whose depth column is missing / is the link column / is not a non-nullable int / is the @id column / carries no @index(kind: bucketed), or whose max_depth is below 1 or outside the depth index's [0, buckets - 1] domain; or a second @parent in one table; or a write — a declarative set, a insert payload — that names the engine-maintained depth column. (sort on a counted generate driver is not this code: sort is a modifier of the table driver form, so the grammar refuses it first.)An ordering is satisfied from a declared access path, never from an operator: declare @index(kind: bucketed, buckets: N) on the column you sort by. For a hierarchy, declare the link on a same-table handle with @index(kind: lookup), the depth beside it as a non-nullable int with @index(kind: bucketed, buckets: <max_depth + 1>), and leave the depth to the engine — it is written on every link write, and a payload neither may name it nor needs to.
SCH2172ErrorInvalid ids: dense useA table declares ids: dense but is not a plain ephemeral table (an event stream and a singleton own no per-row identity; a persistent table owns a host-assigned primary key), or it shares an entity domain with another table, or a frame system deletes / delete entitys it (directly or through the domain the entity-wide delete takes with it), or a upsert … for targets it. Dense identities run 1, 2, 3, … in creation order and are never destroyed — that is what makes slot = id - 1 a correct row address.Declare ids: dense on a plain ephemeral table that owns its entity domain, insert its rows with a plain insert, and disable a row instead of destroying it — or drop the modifier and keep the general id map.
SCH2173ErrorRetired spellingA schema writes a spelling Syntax V3 (or Phase C W0) retired; Retired Spellings lists every one, generated from the one retired-spelling catalog (RetiredDslSpellings) every producer reads. A retired callee name is also reserved as a declaration name, but that is a different rule with its own code, SCH2180. let is not retired: it is the canonical local binding of a system body (Syntax V3 RFC §7.3), and the system-body var it replaced is itself retired (a row of the table below); var survives only in command bodies. The old spelling is rejected, never aliased — two spellings for one construct would be a second dialect — and the message names the replacement exactly. The diagnostic carries a structured fix-it (replacement span inside the diagnostic span, replacement text, and the id of the tools/syntax-v3 migration rule that rewrites a whole corpus, when one exists) that the language server offers as a quick fix. A fix-it is either a pure respelling (the program binds to the same meaning) or an intent repair whose result binds to what the author evidently meant (a field-default suffix that used to be discarded, a window function that never bound). Where the occurrence's context decides the text — an unnamed item that took its output name from the retired spelling keeps it by having the name written out (average_x = avg(x)) — the fix-it follows that context, and where no single edit can keep the program's meaning none is offered. The message template is `{retired}` is a retired {surface} spelling; write `{replacement}`. The persistent keys: [Col, …] column list and the query DSL's let name = (pipeline) subquery are different constructs and are unaffected.Write the replacement the message names.
SCH2174ErrorDuplicate enum member nameTwo members of one enum have identical names or differ only in case, such as Priority and PRIORITY. Declaration admission forbids these sibling collisions. Successful references still require the exact declared spelling; the collision check does not create a case-insensitive alias. The later declaration is rejected.Rename one of the two members so they differ by more than case.
SCH2175ErrorInvalid system compositionA system's composition metadata is unknown or declared more than once (System 'S' declares composition more than once.). Declare composition at most once, with one of the canonical composition values.
SCH2176ErrorColumn default is not a compile-time constantA @default(…) argument reads a table or column, names a parameter, calls a function, draws randomness, divides by zero, overflows under checked arithmetic, or names an enum member that does not exist, or evaluates to NaN (whose payload bits are host-dependent). A default is evaluated once at schema binding, so it may only be a literal (with C# numeric suffixes and a sign), true/false, none, a member of the column's own enum, or constant arithmetic over them.Write the constant itself; compute a runtime value in the system body and assign it in the payload instead.
SCH2177ErrorColumn default does not initialize the column typeA @default(…) constant is not of the column's exact type and does not convert to it implicitly and losslessly: a double literal on a float column (write 1F), an integer on an enum column, a member of another enum, an operator over operands of the wrong type (BotState.Idle + 1), 5L on an int column (C# constant-conversion rules), a nullable column, an integral constant outside the column type's range, an integer a float cannot represent exactly, a string, none on a column that is not a ref/handle, a non-none value on a ref/handle column, or any constant on a column type with no constant form.Write a constant of the column type, e.g. @default(0F), @default(BotState.Idle), @default(none).
SCH2178ErrorColumn default not admitted hereA @default(…) is declared where no construction payload applies it: a persistent table (persistent construction, migration and host-API defaults have no specified contract), an event table (an event payload stays complete), a singleton table (its row is never constructed by insert/upsert), the runtime-allocated @id column, the engine-maintained depth column of a @parent link, or a second @default on one field.Declare defaults only on non-identity columns of plain ephemeral tables, once per field; initialize other columns explicitly.
SCH2179ErrorIndex name collisionTwo different indexes on one table share a name under declaration collision admission (including forbidden case-only siblings), or resolve to the same generated accessor (IndexAccessorNaming); the name PrimaryKey and accessor PrimaryIndex belong to a keyed table's primary-key index. An index that omits name: is named after its key column(s), so field @unique and an unnamed @index/@@index of another kind on the same column both claim it. The lookup a @@navigation synthesizes on its child's foreign key (named <Child>_<Parent>, when the child declares no lookup on that column) obeys the same rule and is reported at the @@navigation, which is then not published. Reported at the later declaration in binding order (field-level before @@), instead of surfacing as an ambiguous pin or a C# member collision in the generated set. (Two declarations of the same index are SCH2027.)If one of the two names was defaulted, give that index an explicit name:; if both were authored, rename one of them; never reuse PrimaryKey; for a navigation lookup, declare a single-column lookup on the foreign key (the navigation reuses it) or rename the colliding index.
SCH2180ErrorReserved callee nameA function, extern function or command is declared with the name of an enforced retired callee (average, coalesce, …; the Enforced rows of Retired Spellings). Every call of such a name is refused by the parser with a fix-it that rewrites it to the canonical spelling, so a declaration of that name would have its own calls silently retargeted; the declaration is refused instead. One code for all three declaration kinds, because it is one rule. Unlike SCH2173 it carries no fix-it: renaming the declaration is the author's decision.Give the declaration another name.
SCH2181ErrorScalar constant declaration conflictA const Name: T = v repeats a constant name or collides with another declaration in its namespace.Give the declaration a unique exact name.
SCH2182ErrorUnknown constant referenceAn initializer references a name that is not a constant or enum member, or its dependency failed binding.Declare the referenced value; qualify values from another module.
SCH2183ErrorScalar constant type mismatchA value cannot initialize its exact declared scalar/enum carrier by an admitted implicit or constant conversion. Nullable values cannot implicitly initialize nonnullable targets. Collections, refs and object/binary values are not scalar constants.Correct the declared type or write an explicit valid conversion.
SCH2184ErrorConstant dependency cycleConstant definitions form a cycle, or a definition depends on that cycle.Break the cyclic dependency.
SCH2185ErrorInitializer is not a closed constantAn initializer reads a runtime value, calls a function without compile-time execution authority, overflows, divides by zero, or uses an unsupported/noncanonical constant execution contract. Null requires its declared nullable scalar carrier.Use a closed deterministic expression with the required typed carrier.

Ephemeral index and frame-system diagnostics — one example each​

One refused shape per code, so the table rows above can stay abstract. Each snippet reports exactly the code named, with a span on the marked construct.

ephemeral table Body(plural: Bodies, capacity: 20000) {
Id: int @id
Cell: int @index(kind: bucketed, buckets: 16384)
Speed: float
}
CodeRefused shapeWhy
UMEP018Speed: float @index(kind: lookup)Equality on a float key is a defect generator; quantize to an int cell key. Also @index(kind: sorted_set), a nullable key column, the @id column, buckets: 20001 on the table above (past its row bound), a duplicate index name:, and any @@index/@@unique.
UMEP019@@group(fields: [Cell, Speed], name: "Motion")Cell is indexed, so it already owns a storage group; a @@group would put it back into an interleaved span the checked mutator replaces.
SCH2169join Body o on index (o.Speed == b.Speed)Speed carries no index, so it is not an access path. Same code for a key expression whose type is not assignable to the column, for in () and for an in (…) list past 16 keys.
SCH2170update Body b | join Body o on index (o.Cell == b.Cell) | set { b.Cell = 0 }The set re-files a row into another bucket while the pair loop is walking one. Write it before the join, or in a later system.
SCH2171from Body b sort b.Speedsort is satisfied from a bucketed index or not at all — there is no sort operator in a frame. Same code for a @parent missing either companion index, and for a set or insert payload naming an engine-maintained depth column.
SCH2172delete s where s drives an ids: dense tableDense identities are never destroyed — that is what makes slot = id - 1 a correct address. disable s instead.
SCH2173Intentionally rejected old syntax: | create Frozen for c, or Cell: int @index(kind: bucketed, keys: 16)Both spellings were retired by Phase C W0. Write | upsert Frozen for c and @index(kind: bucketed, buckets: 16); the message names the replacement.

Retired Spellings (SCH2173 / UM1211)​

Every spelling a producer refuses, with what to write instead and the fix-it each context gets. The table between the markers is generated from the retired-spelling catalog (RetiredDslSpellings) and checked by RetiredSpellingCatalogDocumentationTests: a lane that adds a catalog row pastes the block the failing test prints, never edits a row by hand.

RetiredWrite insteadSurfaceFix-it per contextCorpus ruleStatusNote
createinsertsystem-DSLDefault: insert (Respelling); AttachTarget: upsert (Respelling)predates the migratorEnforcedWrite upsert T for e { … } for the attach-or-overwrite form create T for e used to spell.
destroydeletesystem-DSLDefault: delete (Respelling)predates the migratorEnforced
emiteventsystem-DSLDefault: event (Respelling)predates the migratorEnforced
rangegeneratesystem-DSLDefault: generate (Respelling)predates the migratorEnforcedThe driver is from generate(n) i; a system's randomness is draw, so generate takes no seed here.
keys:buckets:ephemeral @indexDefault: buckets (Respelling)predates the migratorEnforcedThe option is the index's bucket count — a hard key domain [0, buckets) for kind: bucketed and a growable sizing hint for kind: lookup — while keys: names a persistent index's key COLUMNS, so the two spellings are now disjoint.
= value@default(value)schema field-defaultDefault: delete it (Respelling); PlainEphemeralColumn: @default(…) (IntentRepair)predates the migratorEnforcedA field default is a typed compile-time constant of the column type on a plain ephemeral column, applied when an insert or upsert payload omits the field.
averageavgaggregateDefault: avg (Respelling); ImplicitOutputName: … = avg (Respelling); WindowFunction: avg (IntentRepair)p0.1-average-to-avgEnforced
alias = SourceSource aliassource-aliasDefault: … (Respelling)p0.4-alias-assignment-to-trailing-aliasEnforcedThe alias is the same; only its position changes (from T t, join T t (…), join (from …) t (…)).
join … onjoin T t (predicate)join-conditionDefault: … (Respelling)p0.5-join-on-to-parenthesized-predicateEnforcedThe predicate is unchanged; it moves into parentheses after the source.
join … (==Col)join T t (Col == t.Col)join-conditionDefault: … (Respelling)p0.5-join-key-shorthand-to-predicateEnforcedWrite the incoming key and joined key explicitly. No fix-it is offered: the syntax layer cannot prove which incoming source owns Col.
inner joinjoinjoin-kindDefault: join (Respelling)p0.5-inner-join-to-joinEnforced
sample n seed s [by w] [with replacement]sample n (seed: s, weight: w, replacement: true)sampling-sourceDefault: sample n (seed: s, weight: w, replacement: true) (IntentRepair)phase1c8-QuerySampleSeedEnforcedNo automatic fix: Unity32 sampling changes the random sequence, and count-only generation removes the Seed column.
shuffle seed_expressionshuffle (seed: seed_expression)sampling-sourceDefault: shuffle (seed: seed_expression) (IntentRepair)phase1c8-QueryShuffleSeedEnforcedNo automatic fix: Unity32 sampling changes the random sequence, and count-only generation removes the Seed column.
generate(count, seed)generate(count)sampling-sourceDefault: generate(count) (IntentRepair)phase1c8-QueryGenerateSeedEnforcedNo automatic fix: Unity32 sampling changes the random sequence, and count-only generation removes the Seed column.
with … aslet name = (…)named-resultDefault: … (Respelling); CteColumnList: let name = (… | select { renamed columns }) (IntentRepair)p0.6-with-to-letEnforcedSeveral CTEs become one let each.
| intolet name = (…)named-resultDefault: … (Respelling)p0.6-into-to-letEnforcedThe pipeline written before into becomes the body of the let.
bare set operation| union (…)set-operationDefault: … (Respelling)p0.7-bare-set-operation-to-pipeEnforcedunion, intersect and except (with an optional all) follow a | and take their pipeline in parentheses.
fragment … { … }fragment … = …fragment-bodyDefault: = … (Respelling)p0.8-fragment-braces-to-expression-bodyEnforced
distinct columnsgroup k (sort … | take 1)distinctDefault: group k (sort … | take 1) (IntentRepair)p0.13-distinct-columns-retiredEnforcedThe form arrives with Syntax V3 Phase 1 (RFC §5.2); until then use group k (aggregate { … }) or a window with row_number() plus a filter. select { cols } | distinct keeps only the listed columns and drops the choice of the kept row (DISTINCT ON), so it is not a replacement; distinct alone still removes duplicate whole rows.
coalesce(a ?? b)functionDefault: … (Respelling)p0.11-coalesce-to-null-coalescingEnforcedMore than two operands nest to the right, as in C#: coalesce(a, b, c) is (a ?? (b ?? c)).
switch (switch {switch-expressionDefault: … (Respelling)p0.3-switch-parentheses-to-bracesEnforcedThe arms are unchanged; only the delimiters differ.
varletsystem-DSLDefault: let (Respelling)p0.9-var-to-letEnforced
:=system-DSLDefault: = (Respelling)p0.12-event-colon-to-eqEnforcedAn event payload field is Name = value, the form an insert payload uses.
update T a | …from T a | …system-DSLDefault: from (Respelling)rfc13.3-update-driver-to-fromEnforcedupdate T a { … } and update { … } remain: they are effects, not a pipeline driver.
lookup … on handlejoin … on refsystem-DSLDefault: join…ref (Respelling)p0.9-lookup-handle-to-join-refEnforcedlookup T a on id (…) remains.
requiredrequire … on refsystem-DSLDefault: require…ref (Respelling)p0.9-required-lookup-to-requireEnforcedrequired lookup T a on handle (x) is require T a on ref (x); id, index and equality forms cannot be required.
randomlet r = unity32(…)system-DSLDefault: let… = (Respelling)p0.9-random-to-let-unity32EnforcedThe capability constructor is the local's initializer: let r = unity32(seed: e).
int32inttypeDefault: int (Respelling)p0.2-int32-to-intEnforced
booleanbooltypeDefault: bool (Respelling)p0.2-boolean-to-boolEnforced
timestampdatetimetypeDefault: datetime (Respelling)p0.2-timestamp-to-datetimeEnforced
intervaltimespantypeDefault: timespan (Respelling)p0.2-interval-to-timespanEnforced
singlefloattypeDefault: float (Respelling)p0.2-single-to-floatEnforced
fixedfixed64typeDefault: fixed64 (Respelling)p0.2-fixed-to-fixed64Enforced
optional TT?typeDefault: … (Respelling)p0.2-optional-to-nullableEnforced
many TT[]typeDefault: … (Respelling)p0.2-many-to-arrayEnforced
#//line-commentDefault: // (Respelling)p0.10-hash-comment-to-slashesEnforced
'…'"…"string-literalDefault: "…" (Respelling)p0.10-single-to-double-quoted-stringEnforced
@temporalan explicitly chosen datetime(…) expressiontemporal-literalDefault: … (Respelling)l7-temporal-literal-to-constructorEnforcedA date preserves its timezone-free DateTime components. Old text-only time/timestamp wrappers have no bound meaning; choose the new expression explicitly.
camel/Pascal-case relation optionsnake_caserelation-optionDefault: … (Respelling)l9-option-to-snake-caseEnforced
stdevstddevfunctionDefault: stddev (Respelling); ImplicitOutputName: … = stddev (Respelling)p0.1-stdev-to-stddevEnforced
std_devstddevfunctionDefault: stddev (Respelling); ImplicitOutputName: … = stddev (Respelling)p0.1-std_dev-to-stddevEnforced
boolandbool_andfunctionDefault: bool_and (Respelling); ImplicitOutputName: … = bool_and (Respelling)p0.1-booland-to-bool_andEnforced
allbool_andfunctionDefault: bool_and (Respelling); ImplicitOutputName: … = bool_and (Respelling)p0.1-all-to-bool_andEnforced
boolorbool_orfunctionDefault: bool_or (Respelling); ImplicitOutputName: … = bool_or (Respelling)p0.1-boolor-to-bool_orEnforced
bitandbit_andfunctionDefault: bit_and (Respelling); ImplicitOutputName: … = bit_and (Respelling)p0.1-bitand-to-bit_andEnforced
bitorbit_orfunctionDefault: bit_or (Respelling); ImplicitOutputName: … = bit_or (Respelling)p0.1-bitor-to-bit_orEnforced
stddevpopstddev_popfunctionDefault: stddev_pop (Respelling); ImplicitOutputName: … = stddev_pop (Respelling)p0.1-stddevpop-to-stddev_popEnforced
stdev_popstddev_popfunctionDefault: stddev_pop (Respelling); ImplicitOutputName: … = stddev_pop (Respelling)p0.1-stdev_pop-to-stddev_popEnforced
stdevpopstddev_popfunctionDefault: stddev_pop (Respelling); ImplicitOutputName: … = stddev_pop (Respelling)p0.1-stdevpop-to-stddev_popEnforced
varpopvar_popfunctionDefault: var_pop (Respelling); ImplicitOutputName: … = var_pop (Respelling)p0.1-varpop-to-var_popEnforced
variance_popvar_popfunctionDefault: var_pop (Respelling); ImplicitOutputName: … = var_pop (Respelling)p0.1-variance_pop-to-var_popEnforced
variancepopvar_popfunctionDefault: var_pop (Respelling); ImplicitOutputName: … = var_pop (Respelling)p0.1-variancepop-to-var_popEnforced
arrayaggarray_aggfunctionDefault: array_agg (Respelling); ImplicitOutputName: … = array_agg (Respelling)p0.1-arrayagg-to-array_aggEnforced
lentext.lengthfunctionDefault: text.length (Respelling); ImplicitOutputName: … = text.length (Respelling)p0.1-len-to-lengthEnforced
ceilmath.ceilingfunctionDefault: math.ceiling (Respelling); ImplicitOutputName: … = math.ceiling (Respelling)p0.1-ceil-to-ceilingEnforced
powmath.powerfunctionDefault: math.power (Respelling); ImplicitOutputName: … = math.power (Respelling)p0.1-pow-to-powerEnforced
substrtext.substringfunctionDefault: text.substring (Respelling); ImplicitOutputName: … = text.substring (Respelling)p0.1-substr-to-substringEnforced
lnmath.logfunctionDefault: math.log (Respelling); ImplicitOutputName: … = math.log (Respelling)p0.1-ln-to-logEnforced
touppertext.upperfunctionDefault: text.upper (Respelling); ImplicitOutputName: … = text.upper (Respelling)p0.1-toupper-to-upperEnforced
tolowertext.lowerfunctionDefault: text.lower (Respelling); ImplicitOutputName: … = text.lower (Respelling)p0.1-tolower-to-lowerEnforced
isnullx == nullfunctionDefault: … (Respelling)p0.1-isnull-to-x == nullEnforced
isnotnullx != nullfunctionDefault: … (Respelling)p0.1-isnotnull-to-x != nullEnforced
first_valuefirstfunctionDefault: first (IntentRepair); ImplicitOutputName: … = first (IntentRepair); WindowFunction: first (Respelling)p0.1-first_value-to-firstEnforced
last_valuelastfunctionDefault: last (IntentRepair); ImplicitOutputName: … = last (IntentRepair); WindowFunction: last (Respelling)p0.1-last_value-to-lastEnforced
.Containstext.containsscalar methodDefault: … (Respelling); ImplicitOutputName: … (Respelling)p0.1-method-contains-to-containsEnforced
.StartsWithtext.startswithscalar methodDefault: … (Respelling); ImplicitOutputName: … (Respelling)p0.1-method-startswith-to-startswithEnforced
.EndsWithtext.endswithscalar methodDefault: … (Respelling); ImplicitOutputName: … (Respelling)p0.1-method-endswith-to-endswithEnforced
.ToUppertext.upperscalar methodDefault: … (Respelling); ImplicitOutputName: … (Respelling)p0.1-method-toupper-to-upperEnforced
.ToLowertext.lowerscalar methodDefault: … (Respelling); ImplicitOutputName: … (Respelling)p0.1-method-tolower-to-lowerEnforced
.Trimtext.trimscalar methodDefault: … (Respelling); ImplicitOutputName: … (Respelling)p0.1-method-trim-to-trimEnforced
.Substringtext.substringscalar methodDefault: … (Respelling); ImplicitOutputName: … (Respelling)p0.1-method-substring-to-substringEnforced
.Replacetext.replacescalar methodDefault: … (Respelling); ImplicitOutputName: … (Respelling)p0.1-method-replace-to-replaceEnforced
.IndexOftext.indexofscalar methodDefault: … (Respelling); ImplicitOutputName: … (Respelling)p0.1-method-indexof-to-indexofEnforced
and&&expressionDefault: && (Respelling)e1-and-to-symbolEnforced
or||expressionDefault: || (Respelling)e1-or-to-symbolEnforced
not!expressionDefault: ! (Respelling)e1-not-to-symbolEnforced
is null== nullexpressionDefault: == null (Respelling)e3-is-null-to-equalityEnforced
is not null!= nullexpressionDefault: != null (Respelling)e3-is-not-null-to-inequalityEnforced
betweenin a..bexpressionDefault: in a..b (Respelling)e7-between-to-rangeEnforced
castx as TexpressionDefault: … (Respelling); ImplicitOutputName: … (Respelling)e8-cast-to-asEnforced
is_nullx == nullexpressionDefault: … (Respelling); ImplicitOutputName: … (Respelling)e3-is-null-call-to-equalityEnforced
is_not_nullx != nullexpressionDefault: … (Respelling); ImplicitOutputName: … (Respelling)e3-is-not-null-call-to-inequalityEnforced
wrapping_add_intunchecked((x as int) + (y as int))expressionDefault: … (Respelling); ImplicitOutputName: … (Respelling)e9-wrapping-add-int-to-uncheckedEnforced
wrapping_add_uintunchecked((x as uint) + (y as uint))expressionDefault: … (Respelling); ImplicitOutputName: … (Respelling)e9-wrapping-add-uint-to-uncheckedEnforced
to_intx as intexpressionDefault: … (Respelling); ImplicitOutputName: … (Respelling)e8-to-int-to-asEnforced
to_doublex as doubleexpressionDefault: … (Respelling); ImplicitOutputName: … (Respelling)e8-to-double-to-asEnforced
to_longx as longexpressionDefault: … (Respelling); ImplicitOutputName: … (Respelling)e8-to-long-to-asEnforced
:=record-value fieldDefault: = (Respelling)p1b.3-record-field-colon-to-eqEnforcedAnonymous and nominal record value fields use Name = value; declaration, metadata and named-argument colons remain valid. Corpus closure remains pending.
non-scoped group formgroup key (pipeline)groupDefault: … (Respelling)1c.2-group-to-scoped-pipelineEnforcedMultiple keys use braces; the body is an explicit scoped pipeline. A keyless reduction uses aggregate without group.
singleton aggregate tupleaggregate Name = function(value)aggregateDefault: … (Respelling)1c.2-aggregate-singleton-tupleEnforcedOne aggregate is written without braces; braces require at least two aggregates.
by(@parameter)command_keycommand-idempotencyDefault: command_key (Respelling)p2a.1-by-to-command-keyEnforcedThe canonical policy does not carry a command-parameter selector.
insert T | values { … } [| conflict else Error] [| returning … into row]insert T { … } [else Error]; let row = insert T { … } [else Error]command-insertDefault: … (Respelling)p2a.3-command-insert-payloadEnforcedOnly primary-key conflicts use else. Bind the inserted live row with let, not a returning snapshot.
capacity:max_count:workspace resourceDefault: max_count (Respelling)p2b.6-workspace-capacity-to-max-countEnforcedA workspace's positive compile-time hard bound is named max_count:.

Multi-File Merge Errors (SCH3xxx)​

CodeSeverityMessageDescriptionAction
SCH3001ErrorDuplicate declaration across filesA table, enum, type, query, mutation, or fragment with the same name exists in multiple schema files.Ensure each name is unique across all schema files, or use a single file.
SCH3002ErrorImport resolved but file not foundAn import path resolved to a canonical path, but no schema file matches that path.Check the import path. Ensure the target file exists and is included in the schema set.
SCH3003ErrorImport cycle detectedThe import graph contains a cycle (A imports B imports A).Break the cycle by restructuring imports.
SCH3004ErrorDuplicate schema file identityTwo schema files resolve to the same canonical path.Remove the duplicate file or rename one.
SCH3005ErrorImport outside schema rootAn import resolves to a path outside the schema root directory.Move the imported file inside the schema root, or adjust the import path.
SCH3007ErrorSchema source outside schema rootA compiled schema source file lies outside the schema root, so generated artifacts (e.g. required-site source spans) cannot name it by a portable root-relative path. Reported on that file. This tightens every host that runs the schema pipeline with a root — CLI generation, MSBuild/source generation, LSP and analysis: a source passed explicitly from outside the root used to be accepted (only imports outside the root were refused, SCH3005) and is now an error.Move the file inside the schema root, or compile with a schema root that contains every source.

External Kernel Admission​

CodeSeverityMeaningAction
SCH3024ErrorAn external kernel declares an unsupported policy, driver, directive or field access.Use composition: external, execution: serial, one ephemeral driver and explicit valid read/write fields; probes, structural effects, scratch and sinks are not admitted.
SCH3025ErrorUnsupported bounded projection declaration, scalar shape, capture policy or shared-owner reference.Use one ephemeral from/select with unique scalar aliases, positive capacity, window: until_next_frame or until_next_capture, composition: external; additional captures reference the same projection with mode: once_when_nonempty.
SCH3026ErrorA schema field stores an imported host value, or an extern declaration mismatches an admitted host call signature.Keep imported host shapes expression-local and store flat primitive fields; use the exact nonnullable full-arity UnityMathematicsStrict parameter/result contract, including an explicit normalizesafe fallback.
UMCG036ErrorProjection physical storage or native scalar admission failed.Use the existing native scalar/enum/handle storage ABI and pure deterministic admitted expressions. No candidate pack is published.
UMCG035ErrorThe fresh external-kernel storage ABI or exact static target cannot be admitted. The message names the kernel and source; the invocation span locates the refusal.Supply an accessible ordinary nongeneric static void Execute(in GeneratedBatch) on a concrete nongeneric type, with supported nonnullable scalar/enum payload groups. Remove stale/conflicting Batch declarations. No candidate pack is published on refusal.

Import Resolution Errors (SCH4xxx)​

CodeSeverityMessageDescriptionAction
SCH4001ErrorCircular import detectedA file is already in the current import chain, creating a cycle.Restructure imports to eliminate the cycle.
SCH4002ErrorImported file not foundThe file referenced by an import statement does not exist.Check the import path and ensure the file exists.
SCH4003ErrorI/O or access error reading imported fileThe schema processor could not read the imported file due to I/O errors or access denial.Check file permissions and filesystem state.
SCH4004ErrorInvalid import pathThe import path is malformed or contains invalid characters.Fix the import path syntax.

Semantic Validation Errors (SCH5xxx)​

CodeSeverityMessageDescriptionAction
SCH5001ErrorDuplicate field in tableA field name is declared more than once in a table.Rename one of the duplicate fields.
SCH5002ErrorField has both @id and @relationA single field has both @id and @relation annotations, which is invalid.Remove one annotation. Primary keys cannot be foreign keys.
SCH5003WarningTable has no primary key (advisory)A table has no @id field. This is a pre-bind warning (SCH2005 is the bind-time error).Add @id to one field.
SCH5004ErrorFragment cycle detectedA fragment references itself directly or transitively.Remove the circular reference from the fragment.
SCH5005ErrorDuplicate field in typeA field name is declared more than once in a type (struct).Rename one of the duplicate fields.
SCH5006ErrorType field cannot have table annotationsA type (struct) field uses annotations like @id or @relation that are only valid on table fields.Remove table-specific annotations from type fields.
SCH5007ErrorIndex field does not exist in tableAn @@index references a field name that doesn't exist in the table.Check field name spelling in the @@index annotation.
SCH5021ErrorDuplicate field in viewA view field name is declared more than once.Rename one of the duplicate fields.
SCH5022ErrorView field annotation unsupportedA view field uses @id, @relation, or field-level @index.Remove field-level table annotations from views.
SCH5023ErrorVirtual view table annotation unsupportedA virtual view declares a table-level annotation such as @@index, @@unique, or @@identity.Remove table-level annotations or use a materialized view where supported.
SCH5024ErrorMaterialized view index field missingA materialized view @@index references a field not declared by the view.Fix the index field name or declare the field.
SCH5025ErrorMaterialized view identity field missing@@identity references a field not declared by the view.Fix the identity field list or declare the field.
SCH5026ErrorMaterialized view annotation unsupportedA materialized view declares an annotation outside the materialized view contract.Use only @@identity, @@index, or @@unique on materialized views.
SCH5027ErrorMaterialized view source not maintainableThe materialized view source uses a pipeline shape outside the supported Z-set materialized maintainer matrix. The message includes a structured reason descriptor with source kind, unsupported operator, dependency path, and supported family.Restrict the source to supported maintainable operators or change the refresh contract.
SCH5028ErrorMaterialized view index kind unsupportedA materialized view index uses an index kind that the materialized runtime cannot emit.Use lookup, grouped_sorted, or unique.
SCH5029ErrorMaterialized index shape invalidA materialized view index has an invalid field shape, such as an empty field list or a grouped_sorted index without either a grouping key or a sort field.Declare at least one field for lookup/unique indexes. For grouped_sorted, declare at least two fields: the key first, then one or more sort fields.
SCH5030ErrorFragment typed invocation syntax missing or malformedSemantic dependency validation received a fragment invocation without a complete canonical typed argument carrier or with invalid span/source-offset identity.Reparse the schema through the canonical schema parser and fix the invocation reported by SCH1028.

Quick Reference — All Codes (Numerical Order)​

Compiler Diagnostics (UMxxxx)​

CodeNameSeverityOne-Line Description
UM0000UnknownErrorUnknown / unclassified diagnostic
UM0001InternalErrorErrorInternal compiler error
UM0002InvariantViolationErrorCompiler invariant violated
UM0003PipelineValidationErrorErrorPipeline stage validation failed
UM0004MissingSchemaErrorSchema metadata missing or empty
UM1001MissingTableAliasErrorUnqualified column in multi-table scope
UM1002AmbiguousColumnReferenceErrorColumn exists in multiple tables
UM1003MissingSourceErrorNo source table in scope
UM1004DuplicateAliasErrorTable alias already in use
UM1005InvalidAggregateUsageErrorAggregate in wrong context
UM1006InvalidWindowFrameErrorInvalid window frame specification
UM1007UnknownTableErrorTable not found in schema
UM1008UnknownColumnErrorColumn not found on entity
UM1009TypeMismatchErrorIncompatible types in expression
UM1010DuplicateLetBindingErrorLet binding already defined
UM1011LetBindingNullRootErrorLet binding resolved to null
UM1012UntypedParameterErrorParameter type cannot be inferred
UM1013CaseTypeMismatchErrorCASE branch types incompatible
UM1014AmbiguousColumnErrorColumn ambiguous between tables
UM1015UnknownNavigationPropertyErrorNavigation property not found
UM1016CircularNavigationErrorCircular navigation detected
UM1017AggregateMissingArgumentErrorAggregate called without argument
UM1018UnknownAggregateFunctionErrorAggregate function not recognized
UM1019DuplicateAggregateAliasErrorDuplicate aggregate alias
UM1020SetOperationArityMismatchErrorUNION/INTERSECT sides have different column counts
UM1021SetOperationTypeMismatchErrorUNION/INTERSECT column types incompatible
UM1022ExistsSubqueryErrorErrorEXISTS subquery malformed
UM1023InvalidLimitOffsetErrorTAKE/SKIP value invalid
UM1024DeriveColumnErrorErrorDerive column expression failed
UM1025FunctionArgumentErrorErrorWrong function arguments
UM1026CaseImplicitConversionWarningImplicit conversion in CASE branches
UM1027AmbiguousNavigationPathErrorNavigation path is ambiguous
UM1028NavigationLineageUnavailableErrorNavigation lineage metadata missing
UM1030BinaryOperatorTypeMismatchErrorBinary operator type mismatch
UM1031AggregateRequiresNumericErrorSUM/AVG requires numeric argument
UM1032AggregateRequiresComparableErrorMIN/MAX requires comparable type
UM1033AggregateRequiresBooleanErrorBOOL_AND/BOOL_OR requires boolean
UM1034NestedAggregateErrorNested aggregate not allowed
UM1035AggregateInWhereErrorAggregate in WHERE clause
UM1036FunctionTypeMismatchErrorFunction argument type mismatch
UM1037InvalidWindowFrameBoundsErrorWindow frame start > end
UM1038InvalidWindowFrameStartErrorUNBOUNDED FOLLOWING as frame start
UM1039InvalidWindowFrameEndErrorUNBOUNDED PRECEDING as frame end
UM1040WindowOffsetMustBeNumericErrorLAG/LEAD offset must be numeric
UM1041SetOperationColumnTypeMismatchErrorSET operation column types mismatch
UM1042OuterJoinFilterWarningWarningFilter may change outer join semantics
UM1050UdfInvalidSignatureErrorUDF has invalid method signature
UM1051UdfUnresolvableTypeErrorUDF type cannot be resolved
UM1052UdfMutableCollectionErrorUDF uses mutable collection type
UM2001MissingSourceRelationErrorSource relation missing from IR
UM2002MissingPayloadErrorRequired payload missing
UM2003EmptyPlanErrorSemantic plan is empty
UM2004InvalidSubqueryErrorInvalid subquery structure
UM2005ColumnNotFoundErrorColumn not found during IR build
UM2014IrBuildInListRequiresLiteralErrorIN list requires literal values
UM2028IrBuildMembershipSetNotElementInspectableErrorNOT IN needs an element-inspectable RHS
UM3001IrValidationErrorErrorIR validation failed
UM3002OptimizationErrorErrorOptimization rule failed
UM4001PhysicalPlanningErrorErrorPhysical plan generation failed
UM4002EmptyIrSnapshotErrorIR snapshot is empty
UM4003UnsupportedDecorrelationPatternErrorCannot decorrelate subquery
UM5001UnsupportedFeatureErrorFeature not supported
UM5002UnsupportedOperatorErrorOperator not supported
UM5003UnsupportedSyntaxErrorSyntax construct not supported
UM5004UnsupportedNodeTypeErrorNode type not supported
UM5005SyntaxErrorErrorQuery text parse error
UM6001EmissionErrorErrorCode emission failed
UM6002MissingParameterTypesErrorParameter types not specified
UM6003MemoryBudgetExceededErrorTrusted heap budget exceeded
UM6004MemoryBudgetUnprovableErrorTrusted heap budget could not be proven
UM6010ReactiveUnsupportedMaintainerRejectedErrorNo supported reactive materialized maintainer
UM6020PortableUnsupportedOperatorErrorOperator not portable
UM6021PortableUnsupportedExpressionErrorExpression not portable
UM6022PortableUnsupportedStrategyErrorStrategy not portable
UM6023PortableUnsupportedFunctionErrorFunction not portable
UM6024PortableReactiveNotSupportedErrorReactive mode not portable
UM6025PortableMutationNotSupportedErrorMutation not portable
UM7001FullScanOnLargeTableWarningFull scan on large table
UM7002CartesianProductWarningJOIN without condition
UM7003UnusedIndexWarningSuitable index not used
UM7004SortWithoutLimitWarningSort without TAKE
UM7006MissingPgoStatisticsWarningNo PGO statistics available
UM7007NestedLoopOnLargeTablesWarningNested loop on large tables
UM7008FullSortOnLargeDatasetWarningFull sort on large dataset
UM7009IndexRecommendationInfoIndex recommendation
UM7010SemiAntiJoinNestedLoopWarningSemi/Anti join using nested loop
UM7011NestedCollectionAllocationWarningPer-entity allocation in nested collection
UM7012NestedObjectProjectionNotEmittableWarningNested object projection not emittable
UM7013PgoUntrustedHeuristicFallbackWarningPGO untrusted — heuristic fallback
UM7014PgoUntrustedOverrideBlockedWarningPGO untrusted — override blocked
UM7015ResidualCorrelatedScalarSubqueryUnsupportedErrorResidual correlated scalar subquery unsupported
UM7016HeuristicPlanningFallbackWarningPlanner used heuristic fallback
UM7018PgoProfileDataInconsistencyWarningPGO profile data inconsistent
UM7022ResidualLateralJoinUnsupportedErrorResidual lateral JOIN unsupported

Ephemeral Table Diagnostics (UMEPxxx)​

CodeOne-Line Description
UMEP001Ephemeral field is not unmanaged
UMEP002Indexes are forbidden on event/singleton storage
UMEP003Persistence option is forbidden
UMEP004Persistent type id is forbidden
UMEP005Event/singleton identity is forbidden
UMEP006Singleton capacity option is invalid
UMEP007Event lifetime option is misplaced
UMEP008Column-group declaration is invalid
UMEP009Relation/navigation into ephemeral storage is forbidden
UMEP010Ephemeral capacity contract is invalid
UMEP011Entity-domain declaration is invalid
UMEP012Ephemeral entity id type is invalid
UMEP013Ephemeral-source integration with existing Reactive Query/IVM is not implemented yet
UMEP014Transactional write to ephemeral target is forbidden
UMEP015Command event route target is not an event table
UMEP016Persistent table field declares handle type
UMEP017Ephemeral table field declares a nullable handle type
UMEP018Invalid @index on an ephemeral table: unsupported kind, unsupported or nullable key type, the @id column, an unsupported index option, a buckets: count outside 1..(max_capacity ?? capacity), a duplicate index name:, or a composite @@index/@@unique
UMEP019An indexed ephemeral column is named in a @@group
UMEP020Frame-lifetime table declares a persisted schema_version
UMEP021Event table declares max_capacity

Join Planning Diagnostics (JOINxxx)​

CodeNameSeverityOne-Line Description
JOIN0001JoinNoStrategyErrorNo join strategy available
JOIN0003JoinConjunctivePredicateUnsupportedWarningConjunctive predicate unsupported
JOIN0002JoinSecondaryIndexNotProducedWarningSecondary index strategy failed
JOIN0003JoinSecondaryIndexProducedInfoSecondary index strategy available
JOIN0004JoinPgoHintUnavailableWarningPGO join hint unavailable
JOIN0005JoinPgoEnforceUnavailableErrorPGO join enforcement failed

Binding Resolution Errors (BIND_RES_xxx)​

CodeOne-Line Description
BIND_RES_001Table not found in schema
BIND_RES_002Column not found
BIND_RES_003Ambiguous column reference
BIND_RES_004Type mismatch in context
BIND_RES_005Function not found
BIND_RES_006DISTINCT not supported on function
BIND_RES_007No matching function overload
BIND_RES_009Window function missing OVER
BIND_RES_010Let binding not found
BIND_RES_011No common type for operands
BIND_RES_012Boolean expression required
BIND_RES_013Integer expression required
BIND_RES_014Value conversion or assignment failed
BIND_RES_015Ambiguous function overload
BIND_RES_016Function does not support OVER
BIND_RES_017Unknown cast target type
BIND_RES_018Subquery not supported in context
BIND_RES_019Operator not supported
BIND_RES_020CASE requires at least one WHEN
BIND_RES_021Cannot cast between types
BIND_RES_022Boolean operands required
BIND_RES_023Numeric operands required
BIND_RES_024Comparable operands required
BIND_RES_025String operands required
BIND_RES_026Negate requires numeric operand
BIND_RES_027IN list cannot be empty
BIND_RES_028Window function call not normalized
BIND_RES_029Not a window function
BIND_RES_030Set operation column types incompatible
BIND_RES_031Derived column has no parsed expression
BIND_RES_032BY column not found in right side
BIND_RES_033Subquery column count mismatch
BIND_RES_034Duplicate let binding
BIND_RES_035Correlated subquery requires LATERAL
BIND_RES_036Window functions require ORDER BY
BIND_RES_037Schema column CLR type unresolved
BIND_RES_038Schema alias conflicts
BIND_RES_039Logical operator type mismatch
BIND_RES_040Duplicate output alias
BIND_RES_041Duplicate table alias
BIND_RES_042IN requires list, array, or subquery
BIND_RES_043Function requires subquery argument
BIND_RES_044Internal function missing arguments
BIND_RES_045Non-empty projection path required
BIND_RES_046TAKE/SKIP value out of range
BIND_RES_047All window functions failed
BIND_RES_048Unsupported filter type
BIND_RES_049Unsupported expression type
BIND_RES_050Pipeline transform error, or an undeclared name / member in a closed lexical value catalog
BIND_RES_051Pipeline GROUP BY error, SHUFFLE/SAMPLE conflict, or an operation-parameter expression reference missing the @ prefix
BIND_RES_052Pipeline WINDOW error
BIND_RES_053JOIN source resolution error
BIND_RES_054Window function not registered
BIND_RES_055Pipeline mutation error
BIND_RES_056BY set-operation output metadata missing
BIND_RES_057Singleton table is not a query source
BIND_RES_058Assignment has no parsed scalar expression
BIND_RES_059Set operation column count mismatch
BIND_RES_060GROUP BY requires columns only
BIND_RES_061Duplicate BY column
BIND_RES_062BY column not found in left side
BIND_RES_063BY column ambiguous in left side
BIND_RES_064BY column ambiguous in right side

Mutation Binding Errors (BIND_MUT_xxx)​

CodeOne-Line Description
BIND_MUT_021Query INSERT output names no target column

Binding Build Errors (BIND_BLD_xxx)​

CodeOne-Line Description
BIND_BLD_001Invalid OutputColumnId
BIND_BLD_002CLR type is null
BIND_BLD_003Missing ComputationExpressionId
BIND_BLD_005IN list requires literal array
BIND_BLD_006Output column count mismatch
BIND_BLD_007NULLS FIRST/LAST not supported
BIND_BLD_008Aggregate requires argument
BIND_BLD_009Unsupported binary operator
BIND_BLD_010Let binding not found in IR build
BIND_BLD_011Duplicate LET binding
BIND_BLD_012Unsupported window frame bound kind
BIND_BLD_013Set operation column cast failed
BIND_BLD_014Unknown FilterPhase value
BIND_BLD_015BY set-operation padding type has no canonical default
BIND_COALESCECOALESCE requires ≥ 2 arguments

Schema Diagnostics (SCHxxxx)​

CodeSeverityOne-Line Description
SCH0001ErrorUnterminated string literal
SCH0002WarningLexer warning
SCH0003ErrorLexer error
SCH1001ErrorExpected token not found
SCH1002ErrorUnexpected token
SCH1003ErrorInvalid option value
SCH1004ErrorInvalid index kind
SCH1005ErrorInvalid annotation
SCH1006ErrorInvalid index option
SCH1007ErrorEmpty declaration body
SCH1008ErrorInteger literal out of range
SCH1021ErrorType field annotations not supported
SCH1028ErrorFragment invocation syntax is not canonical
SCH2001ErrorDuplicate declaration name
SCH2002ErrorUnknown type reference
SCH2003ErrorFK references non-existent table
SCH2005ErrorTable has no primary key
SCH2006ErrorTable has multiple primary keys
SCH2007ErrorUnknown index type
SCH2009ErrorQuery parameter unknown type
SCH2010ErrorInvalid mutation return type
SCH2011ErrorDuplicate field name
SCH2012ErrorUnknown fragment reference
SCH2013ErrorFragment argument count mismatch
SCH2014ErrorDuplicate key ordinal
SCH2015ErrorInvalid enum backing type / unterminated fragment
SCH2016ErrorInvalid aggregation variant / fragment depth exceeded
SCH2017ErrorAggregation variant on non-aggregation index
SCH2019ErrorFragment expansion size exceeded
SCH2020ErrorDeclaration exceeds max field count
SCH2021ErrorFragment expansion exceeds max field count
SCH2022ErrorPartial index predicate is not analyzable
SCH2027ErrorDuplicate index (same kind, key columns and options)
SCH2032ErrorView source relation unresolved
SCH2033ErrorInvalid materialized view capacity
SCH2034ErrorUnsupported materialized view refresh mode
SCH2036ErrorView source projection missing
SCH2037ErrorDuplicate view projection field
SCH2038ErrorView projection missing field
SCH2039ErrorView projection extra field
SCH2040ErrorView projection type mismatch
SCH2041ErrorView dependency cycle
SCH2042ErrorSemi/anti projection owner invalid
SCH2043ErrorMutation targets derived relation
SCH2044ErrorLeft-join projection unsupported
SCH2045ErrorView projection semantic binding failed
SCH2062ErrorInvalid query result terminal contract
SCH2063ErrorQuery result projection field invalid
SCH2064ErrorInvalid file-local table alias
SCH2157ErrorInvalid frame-system driver
SCH2158ErrorInvalid frame-system join
SCH2159ErrorSystem dependency cycle
SCH2160ErrorInvalid command auth policy
SCH2161ErrorInvalid command idempotency policy
SCH2162ErrorInvalid command scope policy
SCH2163ErrorInvalid frame-system clause
SCH2164ErrorInvalid frame-system effect
SCH2165ErrorInvalid frame-system match
SCH2166ErrorProvisional handle escapes
SCH2167ErrorInvalid frame-system insert or upsert
SCH2168ErrorInvalid frame-system draw
SCH2169ErrorInvalid frame-system index join, including an in (…) key list that is empty or longer than 16
SCH2170ErrorIndex key written inside an open index walk — an on index pair loop, or a sort driver's bucket walk
SCH2171ErrorInvalid ordered access path (sort driver or @parent)
SCH2172ErrorInvalid ids: dense use
SCH2173ErrorRetired spelling (every one listed in Retired Spellings)
SCH2174ErrorDuplicate enum member name (including forbidden case-only siblings)
SCH2175ErrorInvalid system composition (unknown value or declared more than once)
SCH2176ErrorColumn @default is not a compile-time constant
SCH2177ErrorColumn @default does not initialize the exact column type
SCH2178ErrorColumn @default not admitted (non-ephemeral table, @id, engine-maintained, duplicate)
SCH2179ErrorIndex name collision (two indexes on one table share a canonical name or generated accessor)
SCH2180ErrorDeclaration named after a retired callee (function, extern function, command)
SCH3001ErrorDuplicate declaration across files
SCH3002ErrorImport resolved but file not found
SCH3003ErrorImport cycle detected
SCH3004ErrorDuplicate schema file identity
SCH3005ErrorImport outside schema root
SCH3007ErrorSchema source outside schema root
SCH3024ErrorUnsupported external kernel declaration
SCH3025ErrorBounded projection declaration/scalar admission refusal
SCH3026ErrorImported host-value storage or exact extern-signature refusal
UMCG036ErrorProjection physical/native scalar admission refusal
UMCG035ErrorExternal kernel fresh storage/signature admission refusal
SCH4001ErrorCircular import detected
SCH4002ErrorImported file not found
SCH4003ErrorI/O or access error reading import
SCH4004ErrorInvalid import path
SCH5001ErrorDuplicate field in table
SCH5002ErrorField has both @id and @relation
SCH5003WarningTable has no primary key (advisory)
SCH5004ErrorFragment cycle detected
SCH5005ErrorDuplicate field in type
SCH5006ErrorType field has table annotations
SCH5007ErrorIndex field does not exist in table
SCH5021ErrorDuplicate field in view
SCH5022ErrorView field annotation unsupported
SCH5023ErrorVirtual view annotation unsupported
SCH5024ErrorMaterialized view index field missing
SCH5025ErrorMaterialized view identity field missing
SCH5026ErrorMaterialized view annotation unsupported
SCH5027ErrorMaterialized view source not maintainable
SCH5028ErrorMaterialized view index kind unsupported
SCH5029ErrorMaterialized index shape invalid
SCH5030ErrorFragment typed invocation syntax missing or malformed

See Also​

  • Query Language — Query language syntax reference
  • Getting Started — Setup and basic usage
  • PGO — Profile-Guided Optimization setup and usage
  • the compiler pipeline notes — Compiler pipeline architecture (internal)
  • the physical-planning notes — Physical planning details (internal)