Skip to main content

icydb_diagnostic_code/
registry.rs

1//! Module: registry
2//!
3//! Responsibility: single public diagnostic-code registry.
4//! Does not own: diagnostic prose or runtime error construction.
5//! Boundary: generates numeric constants and reconstruction from one table.
6
7use crate::{
8    Diagnostic, DiagnosticCode, DiagnosticDetail, ErrorClass, ErrorCode, ErrorOrigin,
9    QueryErrorKind, QueryProjectionCode, QueryResultShapeCode, RuntimeBoundaryCode,
10    RuntimeErrorKind, SchemaDdlAdmissionCode, SqlFeatureCode, SqlLoweringCode,
11    SqlSurfaceMismatchCode, SqlWriteBoundaryCode,
12};
13
14macro_rules! define_error_code_registry {
15    (
16        $(
17            $name:ident = $raw:literal => $diagnostic:ident
18            $(, detail($detail_variant:ident { $($detail_body:tt)* }))?;
19        )+
20    ) => {
21        impl ErrorCode {
22            $(
23                pub const $name: Self = Self($raw);
24            )+
25
26            /// Recover a known public error code from its raw wire value.
27            #[must_use]
28            pub const fn known(raw: u16) -> Option<Self> {
29                match raw {
30                    $(
31                        $raw => Some(Self::$name),
32                    )+
33                    _ => None,
34                }
35            }
36
37            /// Return whether this error code is in the public registry.
38            #[must_use]
39            pub const fn is_known(self) -> bool {
40                match Self::known(self.raw()) {
41                    Some(_) => true,
42                    None => false,
43                }
44            }
45
46            /// Collapse a rich diagnostic into one public leaf code.
47            #[must_use]
48            pub const fn from_parts(
49                code: DiagnosticCode,
50                detail: Option<DiagnosticDetail>,
51            ) -> Self {
52                match (code, detail) {
53                    $(
54                        $(
55                            (
56                                DiagnosticCode::$diagnostic,
57                                Some(DiagnosticDetail::$detail_variant { $($detail_body)* }),
58                            ) => {
59                                Self::$name
60                            }
61                        )?
62                    )+
63                    _ => code.error_code(),
64                }
65            }
66
67            /// Return the broad diagnostic reason represented by this public code.
68            #[must_use]
69            pub const fn diagnostic_code(self) -> DiagnosticCode {
70                match self.raw() {
71                    $(
72                        $raw => DiagnosticCode::$diagnostic,
73                    )+
74                    _ => DiagnosticCode::RuntimeInternal,
75                }
76            }
77
78            /// Return the diagnostic class represented by this public code.
79            #[must_use]
80            pub const fn class(self) -> ErrorClass {
81                self.diagnostic_code().class()
82            }
83
84            /// Reconstruct rich diagnostic detail for host-side rendering, when known.
85            #[must_use]
86            pub const fn diagnostic_detail(self) -> Option<DiagnosticDetail> {
87                match self.raw() {
88                    $(
89                        $(
90                            $raw => Some(DiagnosticDetail::$detail_variant {
91                                $($detail_body)*
92                            }),
93                        )?
94                    )+
95                    _ => None,
96                }
97            }
98
99            /// Reconstruct a rich diagnostic payload for host-side rendering.
100            #[must_use]
101            pub const fn diagnostic(self, origin: ErrorOrigin) -> Diagnostic {
102                Diagnostic::new(self.diagnostic_code(), origin, self.diagnostic_detail())
103            }
104        }
105
106        impl DiagnosticDetail {
107            /// Return the broad diagnostic reason required by this detail payload.
108            #[must_use]
109            pub const fn diagnostic_code(self) -> DiagnosticCode {
110                match self {
111                    $(
112                        $(
113                            Self::$detail_variant { $($detail_body)* } => {
114                                DiagnosticCode::$diagnostic
115                            }
116                        )?
117                    )+
118                }
119            }
120        }
121
122        #[cfg(test)]
123        pub(super) const ORDERED_ERROR_CODES: &[ErrorCode] = &[
124            $(
125                ErrorCode::$name,
126            )+
127        ];
128
129        #[cfg(test)]
130        pub(super) const DETAIL_ERROR_CODES: &[(ErrorCode, DiagnosticCode, DiagnosticDetail)] = &[
131            $(
132                $(
133                    (
134                        ErrorCode::$name,
135                        DiagnosticCode::$diagnostic,
136                        DiagnosticDetail::$detail_variant {
137                            $($detail_body)*
138                        },
139                    ),
140                )?
141            )+
142        ];
143    };
144}
145
146// This table is the public numeric registry. Raw values are wire-significant;
147// keep them contiguous unless a gap is represented by an explicit reservation.
148define_error_code_registry! {
149    QUERY_VALIDATE = 1 => QueryValidate,
150        detail(QueryKind { kind: QueryErrorKind::Validate });
151    QUERY_INTENT = 2 => QueryIntent,
152        detail(QueryKind { kind: QueryErrorKind::Intent });
153    QUERY_PLAN = 3 => QueryPlan,
154        detail(QueryKind { kind: QueryErrorKind::Plan });
155    QUERY_ACCESS_REQUIREMENT = 4 => QueryAccessRequirement,
156        detail(QueryKind { kind: QueryErrorKind::AccessRequirement });
157    QUERY_UNORDERED_PAGINATION = 5 => QueryUnorderedPagination,
158        detail(QueryKind { kind: QueryErrorKind::UnorderedPagination });
159    QUERY_INVALID_CONTINUATION_CURSOR = 6 => QueryInvalidContinuationCursor,
160        detail(QueryKind { kind: QueryErrorKind::InvalidContinuationCursor });
161    QUERY_NOT_FOUND = 7 => QueryNotFound,
162        detail(QueryKind { kind: QueryErrorKind::NotFound });
163    QUERY_NOT_UNIQUE = 8 => QueryNotUnique,
164        detail(QueryKind { kind: QueryErrorKind::NotUnique });
165    QUERY_NUMERIC_OVERFLOW = 9 => QueryNumericOverflow;
166    QUERY_NUMERIC_NOT_REPRESENTABLE = 10 => QueryNumericNotRepresentable;
167    QUERY_UNKNOWN_AGGREGATE_TARGET_FIELD = 11 => QueryUnknownAggregateTargetField;
168    QUERY_UNSUPPORTED_SQL_FEATURE = 12 => QueryUnsupportedSqlFeature;
169    QUERY_SQL_SURFACE_MISMATCH = 13 => QuerySqlSurfaceMismatch;
170    SCHEMA_DDL_ADMISSION = 14 => SchemaDdlAdmission;
171    STORE_NOT_FOUND = 15 => StoreNotFound;
172    STORE_CORRUPTION = 16 => StoreCorruption;
173    STORE_INVARIANT_VIOLATION = 17 => StoreInvariantViolation;
174    RUNTIME_CORRUPTION = 18 => RuntimeCorruption,
175        detail(RuntimeKind { kind: RuntimeErrorKind::Corruption });
176    RUNTIME_INCOMPATIBLE_PERSISTED_FORMAT = 19 => RuntimeIncompatiblePersistedFormat,
177        detail(RuntimeKind { kind: RuntimeErrorKind::IncompatiblePersistedFormat });
178    RUNTIME_INVARIANT_VIOLATION = 20 => RuntimeInvariantViolation,
179        detail(RuntimeKind { kind: RuntimeErrorKind::InvariantViolation });
180    RUNTIME_CONFLICT = 21 => RuntimeConflict,
181        detail(RuntimeKind { kind: RuntimeErrorKind::Conflict });
182    RUNTIME_NOT_FOUND = 22 => RuntimeNotFound,
183        detail(RuntimeKind { kind: RuntimeErrorKind::NotFound });
184    RUNTIME_UNSUPPORTED = 23 => RuntimeUnsupported,
185        detail(RuntimeKind { kind: RuntimeErrorKind::Unsupported });
186    RUNTIME_INTERNAL = 24 => RuntimeInternal,
187        detail(RuntimeKind { kind: RuntimeErrorKind::Internal });
188
189    RUNTIME_BOUNDARY_SQL_SURFACE_CONTROLLER_REQUIRED = 25 => RuntimeUnsupported,
190        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::SqlSurfaceControllerRequired });
191    RUNTIME_BOUNDARY_SCHEMA_SURFACE_CONTROLLER_REQUIRED = 26 => RuntimeUnsupported,
192        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::SchemaSurfaceControllerRequired });
193    RUNTIME_BOUNDARY_SQL_QUERY_NO_CONFIGURED_ENTITIES = 27 => RuntimeUnsupported,
194        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::SqlQueryNoConfiguredEntities });
195    RUNTIME_BOUNDARY_SQL_QUERY_ENTITY_NOT_CONFIGURED = 28 => RuntimeUnsupported,
196        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::SqlQueryEntityNotConfigured });
197    RUNTIME_BOUNDARY_SQL_DDL_TARGET_REQUIRED = 29 => RuntimeUnsupported,
198        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::SqlDdlTargetRequired });
199    RUNTIME_BOUNDARY_SQL_DDL_ENTITY_NOT_CONFIGURED = 30 => RuntimeUnsupported,
200        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::SqlDdlEntityNotConfigured });
201    RUNTIME_BOUNDARY_QUERY_RESPONSE_ROWS_REQUIRED = 31 => RuntimeUnsupported,
202        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::QueryResponseRowsRequired });
203    RUNTIME_BOUNDARY_QUERY_RESPONSE_GROUPED_ROWS_REQUIRED = 32 => RuntimeUnsupported,
204        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::QueryResponseGroupedRowsRequired });
205    RUNTIME_BOUNDARY_MUTATION_RESULT_ENTITY_REQUIRED = 33 => RuntimeUnsupported,
206        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::MutationResultEntityRequired });
207    RUNTIME_BOUNDARY_MUTATION_RESULT_ENTITIES_REQUIRED = 34 => RuntimeUnsupported,
208        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::MutationResultEntitiesRequired });
209    RUNTIME_BOUNDARY_MUTATION_RESULT_ID_REQUIRED = 35 => RuntimeUnsupported,
210        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::MutationResultIdRequired });
211    RUNTIME_BOUNDARY_MUTATION_RESULT_IDS_REQUIRED = 36 => RuntimeUnsupported,
212        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::MutationResultIdsRequired });
213    RUNTIME_BOUNDARY_ROW_PROJECTION_FIELD_NOT_CONFIGURED = 37 => RuntimeUnsupported,
214        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::RowProjectionFieldNotConfigured });
215
216    SQL_FEATURE_AGGREGATE_FILTER_CLAUSE = 38 => QueryUnsupportedSqlFeature,
217        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AggregateFilterClause });
218    SQL_FEATURE_ALTER_STATEMENT_BEYOND_ALTER_TABLE = 39 => QueryUnsupportedSqlFeature,
219        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterStatementBeyondAlterTable });
220    SQL_FEATURE_ALTER_TABLE_ADD_COLUMN_DUPLICATE_DEFAULT = 40 => QueryUnsupportedSqlFeature,
221        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableAddColumnDuplicateDefault });
222    SQL_FEATURE_ALTER_TABLE_ADD_COLUMN_MODIFIERS = 41 => QueryUnsupportedSqlFeature,
223        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableAddColumnModifiers });
224    SQL_FEATURE_ALTER_TABLE_ADD_STATEMENT_BEYOND_ADD_COLUMN = 42 => QueryUnsupportedSqlFeature,
225        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableAddStatementBeyondAddColumn });
226    SQL_FEATURE_ALTER_TABLE_ALTER_COLUMN_DROP_UNSUPPORTED_ACTION = 43 => QueryUnsupportedSqlFeature,
227        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableAlterColumnDropUnsupportedAction });
228    SQL_FEATURE_ALTER_TABLE_ALTER_COLUMN_MODIFIERS = 44 => QueryUnsupportedSqlFeature,
229        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableAlterColumnModifiers });
230    SQL_FEATURE_ALTER_TABLE_ALTER_COLUMN_SET_UNSUPPORTED_ACTION = 45 => QueryUnsupportedSqlFeature,
231        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableAlterColumnSetUnsupportedAction });
232    SQL_FEATURE_ALTER_TABLE_ALTER_COLUMN_UNSUPPORTED_ACTION = 46 => QueryUnsupportedSqlFeature,
233        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableAlterColumnUnsupportedAction });
234    SQL_FEATURE_ALTER_TABLE_ALTER_STATEMENT_BEYOND_ALTER_COLUMN = 47 => QueryUnsupportedSqlFeature,
235        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableAlterStatementBeyondAlterColumn });
236    SQL_FEATURE_ALTER_TABLE_DROP_COLUMN_IF_EXISTS_SYNTAX = 48 => QueryUnsupportedSqlFeature,
237        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableDropColumnIfExistsSyntax });
238    SQL_FEATURE_ALTER_TABLE_DROP_COLUMN_MODIFIERS = 49 => QueryUnsupportedSqlFeature,
239        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableDropColumnModifiers });
240    SQL_FEATURE_ALTER_TABLE_DROP_STATEMENT_BEYOND_DROP_COLUMN = 50 => QueryUnsupportedSqlFeature,
241        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableDropStatementBeyondDropColumn });
242    SQL_FEATURE_ALTER_TABLE_RENAME_COLUMN_MISSING_TO = 51 => QueryUnsupportedSqlFeature,
243        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableRenameColumnMissingTo });
244    SQL_FEATURE_ALTER_TABLE_RENAME_COLUMN_MODIFIERS = 52 => QueryUnsupportedSqlFeature,
245        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableRenameColumnModifiers });
246    SQL_FEATURE_ALTER_TABLE_RENAME_STATEMENT_BEYOND_RENAME_COLUMN = 53 => QueryUnsupportedSqlFeature,
247        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableRenameStatementBeyondRenameColumn });
248    SQL_FEATURE_ALTER_TABLE_UNSUPPORTED_OPERATION = 54 => QueryUnsupportedSqlFeature,
249        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::AlterTableUnsupportedOperation });
250    SQL_FEATURE_COLUMN_ALIAS = 55 => QueryUnsupportedSqlFeature,
251        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ColumnAlias });
252    SQL_FEATURE_CREATE_INDEX_IF_NOT_EXISTS_SYNTAX = 56 => QueryUnsupportedSqlFeature,
253        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::CreateIndexIfNotExistsSyntax });
254    SQL_FEATURE_CREATE_INDEX_KEY_ORDERING_MODIFIERS = 57 => QueryUnsupportedSqlFeature,
255        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::CreateIndexKeyOrderingModifiers });
256    SQL_FEATURE_CREATE_INDEX_MODIFIERS = 58 => QueryUnsupportedSqlFeature,
257        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::CreateIndexModifiers });
258    SQL_FEATURE_CREATE_STATEMENT_BEYOND_CREATE_INDEX = 59 => QueryUnsupportedSqlFeature,
259        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::CreateStatementBeyondCreateIndex });
260    SQL_FEATURE_DESCRIBE_MODIFIER = 60 => QueryUnsupportedSqlFeature,
261        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::DescribeModifier });
262    SQL_FEATURE_DDL_SCHEMA_VERSION_DUPLICATE_EXPECTED_CLAUSE = 61 => QueryUnsupportedSqlFeature,
263        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::DdlSchemaVersionDuplicateExpectedClause });
264    SQL_FEATURE_DDL_SCHEMA_VERSION_DUPLICATE_SET_CLAUSE = 62 => QueryUnsupportedSqlFeature,
265        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::DdlSchemaVersionDuplicateSetClause });
266    SQL_FEATURE_DROP_INDEX_MODIFIERS = 63 => QueryUnsupportedSqlFeature,
267        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::DropIndexModifiers });
268    SQL_FEATURE_DROP_INDEX_IF_EXISTS_SYNTAX = 64 => QueryUnsupportedSqlFeature,
269        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::DropIndexIfExistsSyntax });
270    SQL_FEATURE_DROP_STATEMENT_BEYOND_DROP_INDEX = 65 => QueryUnsupportedSqlFeature,
271        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::DropStatementBeyondDropIndex });
272    SQL_FEATURE_EXPRESSION_INDEX_UNSUPPORTED_FUNCTION = 66 => QueryUnsupportedSqlFeature,
273        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ExpressionIndexUnsupportedFunction });
274    SQL_FEATURE_HAVING = 67 => QueryUnsupportedSqlFeature,
275        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::Having });
276    SQL_FEATURE_INSERT = 68 => QueryUnsupportedSqlFeature,
277        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::Insert });
278    SQL_FEATURE_JOIN = 69 => QueryUnsupportedSqlFeature,
279        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::Join });
280    SQL_FEATURE_LIKE_PATTERN_BEYOND_TRAILING_PREFIX = 70 => QueryUnsupportedSqlFeature,
281        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::LikePatternBeyondTrailingPrefix });
282    SQL_FEATURE_LOWER_FIELD_PREDICATE_UNSUPPORTED = 71 => QueryUnsupportedSqlFeature,
283        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::LowerFieldPredicateUnsupported });
284    SQL_FEATURE_MULTI_STATEMENT_SQL = 72 => QueryUnsupportedSqlFeature,
285        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::MultiStatementSql });
286    SQL_FEATURE_NESTED_AGGREGATE_INPUT = 73 => QueryUnsupportedSqlFeature,
287        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::NestedAggregateInput });
288    SQL_FEATURE_NESTED_PROJECTION_FUNCTION_IN_ARITHMETIC = 74 => QueryUnsupportedSqlFeature,
289        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::NestedProjectionFunctionInArithmetic });
290    SQL_FEATURE_ORDER_BY_UNSUPPORTED_FORM = 75 => QueryUnsupportedSqlFeature,
291        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::OrderByUnsupportedForm });
292    SQL_FEATURE_OTHER = 76 => QueryUnsupportedSqlFeature,
293        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::Other });
294    SQL_FEATURE_PARAMETER_BINDING = 77 => QueryUnsupportedSqlFeature,
295        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ParameterBinding });
296    SQL_FEATURE_PARAMETERIZED_SCHEMA_VERSION = 78 => QueryUnsupportedSqlFeature,
297        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ParameterizedSchemaVersion });
298    SQL_FEATURE_PREDICATE_STARTS_WITH_FIRST_ARGUMENT = 79 => QueryUnsupportedSqlFeature,
299        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::PredicateStartsWithFirstArgument });
300    SQL_FEATURE_QUOTED_IDENTIFIERS = 80 => QueryUnsupportedSqlFeature,
301        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::QuotedIdentifiers });
302    SQL_FEATURE_RETURNING_UNSUPPORTED_SHAPE = 81 => QueryUnsupportedSqlFeature,
303        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ReturningUnsupportedShape });
304    SQL_FEATURE_SCALAR_FUNCTION_EXPRESSION_POSITION = 82 => QueryUnsupportedSqlFeature,
305        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ScalarFunctionExpressionPosition });
306    SQL_FEATURE_SCALE_TAKING_NUMERIC_FUNCTION_EXPRESSION_POSITION = 83 => QueryUnsupportedSqlFeature,
307        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ScaleTakingNumericFunctionExpressionPosition });
308    SQL_FEATURE_SEARCHED_CASE_GROUPED_ORDER_BY = 84 => QueryUnsupportedSqlFeature,
309        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::SearchedCaseGroupedOrderBy });
310    SQL_FEATURE_SHOW_COLUMNS_MODIFIERS = 85 => QueryUnsupportedSqlFeature,
311        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ShowColumnsModifiers });
312    SQL_FEATURE_SHOW_ENTITIES_MODIFIERS = 86 => QueryUnsupportedSqlFeature,
313        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ShowEntitiesModifiers });
314    SQL_FEATURE_SHOW_INDEXES_MODIFIERS = 87 => QueryUnsupportedSqlFeature,
315        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ShowIndexesModifiers });
316    SQL_FEATURE_SHOW_MEMORY_MODIFIERS = 88 => QueryUnsupportedSqlFeature,
317        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ShowMemoryModifiers });
318    SQL_FEATURE_SHOW_STORES_MODIFIERS = 89 => QueryUnsupportedSqlFeature,
319        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ShowStoresModifiers });
320    SQL_FEATURE_SHOW_UNSUPPORTED_COMMAND = 90 => QueryUnsupportedSqlFeature,
321        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::ShowUnsupportedCommand });
322    SQL_FEATURE_SIMPLE_CASE_EXPRESSION = 91 => QueryUnsupportedSqlFeature,
323        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::SimpleCaseExpression });
324    SQL_FEATURE_STANDALONE_LITERAL_PROJECTION_ITEM = 92 => QueryUnsupportedSqlFeature,
325        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::StandaloneLiteralProjectionItem });
326    SQL_FEATURE_SUPPORTED_GROUPED_ORDER_BY_EXPRESSION_FAMILY = 93 => QueryUnsupportedSqlFeature,
327        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::SupportedGroupedOrderByExpressionFamily });
328    SQL_FEATURE_SUPPORTED_ORDER_BY_EXPRESSION_FAMILY = 94 => QueryUnsupportedSqlFeature,
329        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::SupportedOrderByExpressionFamily });
330    SQL_FEATURE_UNION_INTERSECT_EXCEPT = 95 => QueryUnsupportedSqlFeature,
331        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::UnionIntersectExcept });
332    SQL_FEATURE_UNSUPPORTED_FUNCTION_NAMESPACE = 96 => QueryUnsupportedSqlFeature,
333        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::UnsupportedFunctionNamespace });
334    SQL_FEATURE_UPDATE = 97 => QueryUnsupportedSqlFeature,
335        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::Update });
336    SQL_FEATURE_UPPER_FIELD_PREDICATE_UNSUPPORTED = 98 => QueryUnsupportedSqlFeature,
337        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::UpperFieldPredicateUnsupported });
338    SQL_FEATURE_WINDOW_FUNCTION = 99 => QueryUnsupportedSqlFeature,
339        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::WindowFunction });
340    SQL_FEATURE_WITH = 100 => QueryUnsupportedSqlFeature,
341        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::With });
342    SQL_FEATURE_NUMERIC_SCALE_FUNCTION_ARGUMENTS = 101 => QueryUnsupportedSqlFeature,
343        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::NumericScaleFunctionArguments });
344    SQL_FEATURE_ORDER_BY_FIELD_NOT_ORDERABLE = 102 => QueryUnsupportedSqlFeature,
345        detail(UnsupportedSqlFeature { feature: SqlFeatureCode::OrderByFieldNotOrderable });
346
347    SQL_SURFACE_QUERY_REJECTS_INSERT = 103 => QuerySqlSurfaceMismatch,
348        detail(SqlSurfaceMismatch { mismatch: SqlSurfaceMismatchCode::QueryRejectsInsert });
349    SQL_SURFACE_QUERY_REJECTS_UPDATE = 104 => QuerySqlSurfaceMismatch,
350        detail(SqlSurfaceMismatch { mismatch: SqlSurfaceMismatchCode::QueryRejectsUpdate });
351    SQL_SURFACE_QUERY_REJECTS_DELETE = 105 => QuerySqlSurfaceMismatch,
352        detail(SqlSurfaceMismatch { mismatch: SqlSurfaceMismatchCode::QueryRejectsDelete });
353    SQL_SURFACE_UPDATE_REJECTS_SELECT = 106 => QuerySqlSurfaceMismatch,
354        detail(SqlSurfaceMismatch { mismatch: SqlSurfaceMismatchCode::UpdateRejectsSelect });
355    SQL_SURFACE_UPDATE_REJECTS_EXPLAIN = 107 => QuerySqlSurfaceMismatch,
356        detail(SqlSurfaceMismatch { mismatch: SqlSurfaceMismatchCode::UpdateRejectsExplain });
357    SQL_SURFACE_UPDATE_REJECTS_DESCRIBE = 108 => QuerySqlSurfaceMismatch,
358        detail(SqlSurfaceMismatch { mismatch: SqlSurfaceMismatchCode::UpdateRejectsDescribe });
359    SQL_SURFACE_UPDATE_REJECTS_SHOW_INDEXES = 109 => QuerySqlSurfaceMismatch,
360        detail(SqlSurfaceMismatch { mismatch: SqlSurfaceMismatchCode::UpdateRejectsShowIndexes });
361    SQL_SURFACE_UPDATE_REJECTS_SHOW_COLUMNS = 110 => QuerySqlSurfaceMismatch,
362        detail(SqlSurfaceMismatch { mismatch: SqlSurfaceMismatchCode::UpdateRejectsShowColumns });
363    SQL_SURFACE_UPDATE_REJECTS_SHOW_ENTITIES = 111 => QuerySqlSurfaceMismatch,
364        detail(SqlSurfaceMismatch { mismatch: SqlSurfaceMismatchCode::UpdateRejectsShowEntities });
365    SQL_SURFACE_UPDATE_REJECTS_SHOW_STORES = 112 => QuerySqlSurfaceMismatch,
366        detail(SqlSurfaceMismatch { mismatch: SqlSurfaceMismatchCode::UpdateRejectsShowStores });
367    SQL_SURFACE_UPDATE_REJECTS_SHOW_MEMORY = 113 => QuerySqlSurfaceMismatch,
368        detail(SqlSurfaceMismatch { mismatch: SqlSurfaceMismatchCode::UpdateRejectsShowMemory });
369
370    SCHEMA_DDL_MISSING_EXPECTED_SCHEMA_VERSION = 114 => SchemaDdlAdmission,
371        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::MissingExpectedSchemaVersion });
372    SCHEMA_DDL_MISSING_NEXT_SCHEMA_VERSION = 115 => SchemaDdlAdmission,
373        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::MissingNextSchemaVersion });
374    SCHEMA_DDL_STALE_EXPECTED_SCHEMA_VERSION = 116 => SchemaDdlAdmission,
375        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::StaleExpectedSchemaVersion });
376    SCHEMA_DDL_INVALID_EXPECTED_SCHEMA_VERSION = 117 => SchemaDdlAdmission,
377        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::InvalidExpectedSchemaVersion });
378    SCHEMA_DDL_INVALID_NEXT_SCHEMA_VERSION = 118 => SchemaDdlAdmission,
379        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::InvalidNextSchemaVersion });
380    SCHEMA_DDL_ACCEPTED_SCHEMA_CHANGE_WITHOUT_VERSION_BUMP = 119 => SchemaDdlAdmission,
381        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::AcceptedSchemaChangeWithoutVersionBump });
382    SCHEMA_DDL_EMPTY_VERSION_BUMP = 120 => SchemaDdlAdmission,
383        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::EmptyVersionBump });
384    SCHEMA_DDL_VERSION_GAP = 121 => SchemaDdlAdmission,
385        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::VersionGap });
386    SCHEMA_DDL_VERSION_ROLLBACK = 122 => SchemaDdlAdmission,
387        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::VersionRollback });
388    SCHEMA_DDL_FINGERPRINT_METHOD_MISMATCH = 123 => SchemaDdlAdmission,
389        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::FingerprintMethodMismatch });
390    SCHEMA_DDL_UNSUPPORTED_TRANSITION_CLASS = 124 => SchemaDdlAdmission,
391        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::UnsupportedTransitionClass });
392    SCHEMA_DDL_PHYSICAL_RUNNER_MISSING = 125 => SchemaDdlAdmission,
393        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::PhysicalRunnerMissing });
394    SCHEMA_DDL_VALIDATION_FAILED = 126 => SchemaDdlAdmission,
395        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::ValidationFailed });
396    SCHEMA_DDL_PUBLICATION_RACE_LOST = 127 => SchemaDdlAdmission,
397        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::PublicationRaceLost });
398    SCHEMA_DDL_INVALID_ADD_COLUMN_DEFAULT = 128 => SchemaDdlAdmission,
399        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::InvalidAddColumnDefault });
400    SCHEMA_DDL_INVALID_ALTER_COLUMN_DEFAULT = 129 => SchemaDdlAdmission,
401        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::InvalidAlterColumnDefault });
402    SCHEMA_DDL_GENERATED_INDEX_DROP_REJECTED = 130 => SchemaDdlAdmission,
403        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::GeneratedIndexDropRejected });
404    SCHEMA_DDL_REQUIRED_DROP_DEFAULT_UNSUPPORTED = 131 => SchemaDdlAdmission,
405        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::RequiredDropDefaultUnsupported });
406    SCHEMA_DDL_GENERATED_FIELD_DEFAULT_CHANGE_REJECTED = 132 => SchemaDdlAdmission,
407        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::GeneratedFieldDefaultChangeRejected });
408    SCHEMA_DDL_GENERATED_FIELD_NULLABILITY_CHANGE_REJECTED = 133 => SchemaDdlAdmission,
409        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::GeneratedFieldNullabilityChangeRejected });
410    SCHEMA_DDL_SET_NOT_NULL_VALIDATION_FAILED = 134 => SchemaDdlAdmission,
411        detail(SchemaDdlAdmission { reason: SchemaDdlAdmissionCode::SetNotNullValidationFailed });
412
413    QUERY_SQL_WRITE_BOUNDARY = 135 => QuerySqlWriteBoundary;
414    SQL_WRITE_PRIMARY_KEY_LITERAL_SHAPE = 136 => QuerySqlWriteBoundary,
415        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::PrimaryKeyLiteralShape });
416    SQL_WRITE_PRIMARY_KEY_LITERAL_INCOMPATIBLE = 137 => QuerySqlWriteBoundary,
417        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::PrimaryKeyLiteralIncompatible });
418    SQL_WRITE_MISSING_PRIMARY_KEY = 138 => QuerySqlWriteBoundary,
419        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::MissingPrimaryKey });
420    SQL_WRITE_MISSING_REQUIRED_FIELDS = 139 => QuerySqlWriteBoundary,
421        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::MissingRequiredFields });
422    SQL_WRITE_EXPLICIT_MANAGED_FIELD = 140 => QuerySqlWriteBoundary,
423        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::ExplicitManagedField });
424    SQL_WRITE_EXPLICIT_GENERATED_FIELD = 141 => QuerySqlWriteBoundary,
425        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::ExplicitGeneratedField });
426    SQL_WRITE_INSERT_SELECT_REQUIRES_SCALAR = 142 => QuerySqlWriteBoundary,
427        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::InsertSelectRequiresScalar });
428    SQL_WRITE_INSERT_SELECT_AGGREGATE_PROJECTION = 143 => QuerySqlWriteBoundary,
429        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::InsertSelectAggregateProjection });
430    SQL_WRITE_INSERT_SELECT_WIDTH_MISMATCH = 144 => QuerySqlWriteBoundary,
431        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::InsertSelectWidthMismatch });
432    SQL_WRITE_UPDATE_PRIMARY_KEY_MUTATION = 145 => QuerySqlWriteBoundary,
433        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::UpdatePrimaryKeyMutation });
434    SQL_WRITE_INVALID_FIELD_LITERAL = 146 => QuerySqlWriteBoundary,
435        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::InvalidFieldLiteral });
436    SQL_WRITE_UNKNOWN_RETURNING_FIELD = 147 => QuerySqlWriteBoundary,
437        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::UnknownReturningField });
438    SQL_WRITE_DUPLICATE_RETURNING_FIELD = 148 => QuerySqlWriteBoundary,
439        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::DuplicateReturningField });
440    SQL_WRITE_UPDATE_MISSING_WHERE_PREDICATE = 149 => QuerySqlWriteBoundary,
441        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::UpdateMissingWherePredicate });
442    SQL_WRITE_ORDER_BY_UNSUPPORTED_SHAPE = 150 => QuerySqlWriteBoundary,
443        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::WriteOrderByUnsupportedShape });
444
445    QUERY_UNSUPPORTED_PROJECTION = 151 => QueryUnsupportedProjection;
446    QUERY_PROJECTION_NUMERIC_LITERAL_REQUIRED = 152 => QueryUnsupportedProjection,
447        detail(QueryProjection { reason: QueryProjectionCode::NumericLiteralRequired });
448    QUERY_PROJECTION_NUMERIC_SCALE_ARGUMENTS = 153 => QueryUnsupportedProjection,
449        detail(QueryProjection { reason: QueryProjectionCode::NumericScaleArguments });
450    QUERY_PROJECTION_NESTED_FIELD_PATH_PREVIEW = 154 => QueryUnsupportedProjection,
451        detail(QueryProjection { reason: QueryProjectionCode::NestedFieldPathPreview });
452    QUERY_PROJECTION_CASE_CONDITION_BOOLEAN_REQUIRED = 155 => QueryUnsupportedProjection,
453        detail(QueryProjection { reason: QueryProjectionCode::CaseConditionBooleanRequired });
454    QUERY_PROJECTION_NUMERIC_INPUT_REQUIRED = 156 => QueryUnsupportedProjection,
455        detail(QueryProjection { reason: QueryProjectionCode::NumericInputRequired });
456    QUERY_PROJECTION_TEXT_OR_BLOB_INPUT_REQUIRED = 157 => QueryUnsupportedProjection,
457        detail(QueryProjection { reason: QueryProjectionCode::TextOrBlobInputRequired });
458    QUERY_PROJECTION_TEXT_INPUT_REQUIRED = 158 => QueryUnsupportedProjection,
459        detail(QueryProjection { reason: QueryProjectionCode::TextInputRequired });
460    QUERY_PROJECTION_TEXT_OR_NULL_ARGUMENT_REQUIRED = 159 => QueryUnsupportedProjection,
461        detail(QueryProjection { reason: QueryProjectionCode::TextOrNullArgumentRequired });
462    QUERY_PROJECTION_INTEGER_OR_NULL_ARGUMENT_REQUIRED = 160 => QueryUnsupportedProjection,
463        detail(QueryProjection { reason: QueryProjectionCode::IntegerOrNullArgumentRequired });
464    QUERY_PROJECTION_UNARY_OPERAND_INCOMPATIBLE = 161 => QueryUnsupportedProjection,
465        detail(QueryProjection { reason: QueryProjectionCode::UnaryOperandIncompatible });
466    QUERY_PROJECTION_BINARY_OPERANDS_INCOMPATIBLE = 162 => QueryUnsupportedProjection,
467        detail(QueryProjection { reason: QueryProjectionCode::BinaryOperandsIncompatible });
468
469    QUERY_RESULT_SHAPE_MISMATCH = 163 => QueryResultShapeMismatch;
470    QUERY_RESULT_EXPECTED_ROWS = 164 => QueryResultShapeMismatch,
471        detail(QueryResultShape { reason: QueryResultShapeCode::ExpectedRows });
472    QUERY_RESULT_EXPECTED_GROUPED = 165 => QueryResultShapeMismatch,
473        detail(QueryResultShape { reason: QueryResultShapeCode::ExpectedGroupedRows });
474
475    SQL_LOWERING_ENTITY_MISMATCH = 166 => QueryUnsupportedSqlFeature,
476        detail(SqlLowering { reason: SqlLoweringCode::EntityMismatch });
477    SQL_LOWERING_SELECT_PROJECTION_SHAPE = 167 => QueryUnsupportedSqlFeature,
478        detail(SqlLowering { reason: SqlLoweringCode::SelectProjectionShape });
479    SQL_LOWERING_SELECT_DISTINCT = 168 => QueryUnsupportedSqlFeature,
480        detail(SqlLowering { reason: SqlLoweringCode::SelectDistinct });
481    SQL_LOWERING_DISTINCT_ORDER_BY_PROJECTION = 169 => QueryUnsupportedSqlFeature,
482        detail(SqlLowering { reason: SqlLoweringCode::DistinctOrderByProjection });
483    SQL_LOWERING_GLOBAL_AGGREGATE_PROJECTION = 170 => QueryUnsupportedSqlFeature,
484        detail(SqlLowering { reason: SqlLoweringCode::GlobalAggregateProjection });
485    SQL_LOWERING_GLOBAL_AGGREGATE_GROUP_BY = 171 => QueryUnsupportedSqlFeature,
486        detail(SqlLowering { reason: SqlLoweringCode::GlobalAggregateGroupBy });
487    SQL_LOWERING_SELECT_GROUP_BY_SHAPE = 172 => QueryUnsupportedSqlFeature,
488        detail(SqlLowering { reason: SqlLoweringCode::SelectGroupByShape });
489    SQL_LOWERING_GROUPED_PROJECTION_EXPLICIT_LIST_REQUIRED = 173 => QueryUnsupportedSqlFeature,
490        detail(SqlLowering { reason: SqlLoweringCode::GroupedProjectionExplicitListRequired });
491    SQL_LOWERING_GROUPED_PROJECTION_AGGREGATE_REQUIRED = 174 => QueryUnsupportedSqlFeature,
492        detail(SqlLowering { reason: SqlLoweringCode::GroupedProjectionAggregateRequired });
493    SQL_LOWERING_GROUPED_PROJECTION_NON_GROUP_FIELD = 175 => QueryUnsupportedSqlFeature,
494        detail(SqlLowering { reason: SqlLoweringCode::GroupedProjectionNonGroupField });
495    SQL_LOWERING_GROUPED_PROJECTION_SCALAR_AFTER_AGGREGATE = 176 => QueryUnsupportedSqlFeature,
496        detail(SqlLowering { reason: SqlLoweringCode::GroupedProjectionScalarAfterAggregate });
497    SQL_LOWERING_HAVING_REQUIRES_GROUP_BY = 177 => QueryUnsupportedSqlFeature,
498        detail(SqlLowering { reason: SqlLoweringCode::HavingRequiresGroupBy });
499    SQL_LOWERING_SELECT_HAVING_SHAPE = 178 => QueryUnsupportedSqlFeature,
500        detail(SqlLowering { reason: SqlLoweringCode::SelectHavingShape });
501    SQL_LOWERING_AGGREGATE_INPUT_EXPRESSIONS = 179 => QueryUnsupportedSqlFeature,
502        detail(SqlLowering { reason: SqlLoweringCode::AggregateInputExpressions });
503    SQL_LOWERING_WHERE_EXPRESSION_SHAPE = 180 => QueryUnsupportedSqlFeature,
504        detail(SqlLowering { reason: SqlLoweringCode::WhereExpressionShape });
505    SQL_LOWERING_PARAMETER_PLACEMENT = 181 => QueryUnsupportedSqlFeature,
506        detail(SqlLowering { reason: SqlLoweringCode::ParameterPlacement });
507    SQL_LOWERING_SQL_DDL_EXECUTION_UNSUPPORTED = 182 => QueryUnsupportedSqlFeature,
508        detail(SqlLowering { reason: SqlLoweringCode::SqlDdlExecutionUnsupported });
509
510    SQL_WRITE_RETURNING_RESPONSE_TOO_LARGE = 183 => QuerySqlWriteBoundary,
511        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::ReturningResponseTooLarge });
512    SQL_WRITE_RETURNING_ROWS_TOO_MANY = 184 => QuerySqlWriteBoundary,
513        detail(SqlWriteBoundary { boundary: SqlWriteBoundaryCode::ReturningRowsTooMany });
514    RUNTIME_BOUNDARY_SQL_INTROSPECTION_DISABLED = 185 => RuntimeUnsupported,
515        detail(RuntimeBoundary { boundary: RuntimeBoundaryCode::SqlIntrospectionDisabled });
516}