001package gudusoft.gsqlparser.ir.semantic;
002
003/**
004 * Stable identifier for a SemanticIR rejection class. One enum value
005 * per logical reject; multiple throw sites in
006 * {@code SemanticIRBuilder} may share a code when they reject the
007 * same shape from different call sites (e.g. ON/USING/etc. JOIN-side
008 * checks).
009 *
010 * <p>External callers should pattern-match on {@code DiagnosticCode}
011 * rather than parse {@link Diagnostic#getMessage()} substrings.
012 * Message text remains user-visible English and may change without
013 * notice; the enum values are the public contract.
014 *
015 * <p>Slice 67 introduces 181 values, one per row in the slice-67
016 * audit ({@code /tmp/slice67-audit.tsv} at implementation time;
017 * archived in repo history). Subsequent slices may add codes when
018 * new reject sites land; existing codes are not renamed or removed
019 * without a deprecation window.
020 *
021 * <p>Slice 77 adds one WARN-severity code
022 * ({@code RELATION_NOT_FOUND_IN_CATALOG}) emitted by
023 * {@code SqlSemanticAnalyzer.analyze(sql, vendor, Catalog)} when the
024 * supplied DTO catalog is missing a FROM relation referenced by the
025 * resolved IR. It is the first non-ERROR diagnostic; the IR is still
026 * built and {@link Diagnostic#getSeverity()} stays {@code WARN} so
027 * {@code isSuccessful()} continues to return {@code true}.
028 *
029 * <p>Slice 77 deliberately does NOT add a corresponding
030 * {@code COLUMN_NOT_FOUND_IN_CATALOG} code: when a catalog declares
031 * the relation but not a referenced column, the
032 * {@link gudusoft.gsqlparser.resolver2 TSQLResolver2} pipeline already
033 * rejects the build with {@link #COLUMN_BINDING_NON_EXACT} (a NOT_FOUND
034 * status surfaces as that ERROR). Callers needing catalog-miss column
035 * diagnostics can pattern-match on {@code COLUMN_BINDING_NON_EXACT}
036 * when a non-null {@code Catalog} was supplied. A later slice may
037 * lift the column-miss path to a dedicated WARN if customer feedback
038 * shows the ERROR-vs-WARN asymmetry is confusing.
039 *
040 * <p>Slice 78 adds four ERROR-severity codes lifting
041 * {@code INSERT INTO target SELECT ...} into the analyzer pipeline:
042 * {@link #INSERT_SOURCE_NOT_SUPPORTED} (non-subquery sources like
043 * VALUES / DEFAULT VALUES / EXECUTE), {@link #INSERT_MULTI_TABLE_NOT_SUPPORTED}
044 * (Oracle INSERT ALL / INSERT FIRST and Hive multi-insert),
045 * {@link #INSERT_COLUMN_COUNT_MISMATCH} (explicit column list arity does
046 * not match the source SELECT's output count), and
047 * {@link #INSERT_TARGET_MISSING} (defensive — INSERT without a resolvable
048 * target table). DELETE / MERGE / CREATE INDEX / CREATE PROCEDURE etc.
049 * remain rejected via {@link #STATEMENT_KIND_NOT_SUPPORTED}.
050 *
051 * <p>Slice 80 adds nine ERROR-severity codes lifting
052 * {@code UPDATE target SET c = expr [WHERE pred]} into the analyzer
053 * pipeline: {@link #UPDATE_TARGET_MISSING} (defensive),
054 * {@link #UPDATE_CTE_NOT_SUPPORTED} (top-level WITH on UPDATE),
055 * {@link #UPDATE_JOINED_NOT_SUPPORTED}
056 * (FROM / JOIN clause on UPDATE — PG / SQL Server cross-table UPDATE),
057 * {@link #UPDATE_RETURNING_CLAUSE_NOT_SUPPORTED}
058 * (PG / Oracle RETURNING projections),
059 * {@link #UPDATE_OUTPUT_CLAUSE_NOT_SUPPORTED}
060 * (SQL Server OUTPUT clause),
061 * {@link #UPDATE_ORDER_BY_OR_LIMIT_NOT_SUPPORTED}
062 * (MySQL / Couchbase ordering + row-limit on UPDATE),
063 * {@link #UPDATE_NO_SET_CLAUSE} (defensive — also covers Couchbase
064 * UNSET-only updates), {@link #UPDATE_TUPLE_ASSIGNMENT_NOT_SUPPORTED}
065 * (Oracle {@code SET (a, b) = (...)} tuple assignment), and
066 * {@link #UPDATE_SET_HAS_SUBQUERY_NOT_SUPPORTED} (scalar subquery on
067 * the right-hand side of a SET assignment). Window functions in SET
068 * RHS reuse the existing {@link #CLAUSE_WINDOW_FUNCTION_LEAK} code
069 * via the shared {@code rejectWindowFunctionInScope} helper.
070 *
071 * <p>Slice 82 lifts the slice-80 {@link #UPDATE_JOINED_NOT_SUPPORTED}
072 * reject for the common PG / MSSQL / BigQuery / Snowflake / Redshift
073 * FROM-side joined UPDATE shapes (single FROM table, comma-FROM,
074 * explicit JOIN ON, CROSS JOIN). Four new ERROR-severity codes pin the
075 * sub-shapes still deferred to a future slice:
076 * {@link #UPDATE_FROM_SUBQUERY_NOT_SUPPORTED} (subquery as a FROM
077 * source), {@link #UPDATE_FROM_JOIN_USING_NOT_SUPPORTED} (USING in any
078 * FROM-side join item), {@link #UPDATE_FROM_JOIN_NATURAL_NOT_SUPPORTED}
079 * (NATURAL JOIN in any FROM-side join item),
080 * {@link #UPDATE_FROM_NESTED_JOIN_NOT_SUPPORTED} (defensive: FROM-side
081 * TTable wraps a TJoin — distinct from the subquery case per the
082 * slice-80 message-text-discrimination contract), and
083 * {@link #UPDATE_JOIN_ON_HAS_SUBQUERY_NOT_SUPPORTED} (subquery in any
084 * ON condition). Window functions in ON reuse the existing
085 * {@link #CLAUSE_WINDOW_FUNCTION_LEAK} via
086 * {@code rejectWindowFunctionInScope}. {@link #UPDATE_JOINED_NOT_SUPPORTED}
087 * is retained declared-but-unreached for API stability (slice-71/72
088 * retain-for-documentation precedent — the residual join-form-target
089 * shape {@code UPDATE (a JOIN b) SET ...} does not parse in any
090 * supported dialect).
091 *
092 * <p>Group naming convention (clause-prefix):
093 * <ul>
094 *   <li>CTE / WITH:                 {@code DUPLICATE_CTE_NAME},
095 *       {@code CTE_FORWARD_REFERENCE},
096 *       {@code CTE_WITH_RECURSIVE_NOT_SUPPORTED},
097 *       {@code NESTED_WITH_NOT_SUPPORTED}, {@code CTE_BODY_MISSING}</li>
098 *   <li>FROM-clause subquery:       {@code FROM_SUBQUERY_*}</li>
099 *   <li>Scalar subquery projection: {@code SCALAR_SUBQUERY_*},
100 *       {@code CORRELATED_SCALAR_SUBQUERY_*},
101 *       {@code NESTED_SCALAR_SUBQUERY_*}</li>
102 *   <li>Set-op:                     {@code SET_OP_*},
103 *       {@code SET_OPERATION_*}, {@code MIXED_SET_OPERATORS_*},
104 *       {@code MALFORMED_SET_OP_AST},
105 *       {@code BRANCH_COLUMN_REF_UNKNOWN_RELATION}</li>
106 *   <li>ORDER BY:                   {@code ORDER_BY_*},
107 *       {@code ORDER_SIBLINGS_BY_*}</li>
108 *   <li>SELECT row filter / limit:  {@code SELECT_ROW_FILTER_*},
109 *       {@code DISTINCT_ON_NOT_SUPPORTED}, {@code ROW_LIMIT_*}</li>
110 *   <li>GROUP BY / HAVING / WHERE / QUALIFY:
111 *       {@code *_HAS_SUBQUERY_NOT_SUPPORTED}, {@code HAVING_*},
112 *       {@code QUALIFY_NOT_SUPPORTED}</li>
113 *   <li>FROM / JOIN shape:          {@code SELECT_NO_FROM_SOURCE},
114 *       {@code COMMA_FROM_*}, {@code CROSS_JOIN_*}, {@code USING_*},
115 *       {@code NATURAL_*}, {@code JOIN_*},
116 *       {@code TABLE_BINDING_UNRESOLVED}</li>
117 *   <li>Merged-key (USING / NATURAL):
118 *       {@code USING_KEY_NOT_DECLARED},
119 *       {@code MERGED_JOIN_AGAINST_CTE_WITH_EXPLICIT_COLUMN_LIST},
120 *       {@code UNQUALIFIED_MERGED_KEY_IN_JOIN_ON}</li>
121 *   <li>JOIN ON predicate subquery: {@code JOIN_ON_*}</li>
122 *   <li>Window function:            {@code WINDOW_*},
123 *       {@code CLAUSE_WINDOW_FUNCTION_LEAK}</li>
124 *   <li>Result column:              {@code RESULT_COLUMN_*},
125 *       {@code SELECT_NO_PROJECTED_COLUMNS}</li>
126 *   <li>Star expansion:             {@code STAR_EXPANSION_*}</li>
127 *   <li>Binding / ambiguity:        {@code COLUMN_BINDING_NON_EXACT},
128 *       {@code UNQUALIFIED_COLUMN_AMBIGUOUS},
129 *       {@code OUTPUT_REFERENCES_UNKNOWN_RELATION},
130 *       {@code OUTPUT_REFERENCES_UNSUPPORTED_BINDING_KIND}</li>
131 * </ul>
132 */
133public enum DiagnosticCode {
134    BRANCH_COLUMN_REF_UNKNOWN_RELATION,
135    CLAUSE_WINDOW_FUNCTION_LEAK,
136    COLUMN_BINDING_NON_EXACT,
137    COMMA_FROM_IN_BODY_NOT_SUPPORTED,
138    CORRELATED_SCALAR_SUBQUERY_UNKNOWN_OUTER_BINDING,
139    CREATE_AS_COLUMN_COUNT_MISMATCH,
140    CREATE_AS_NO_SOURCE_SELECT,
141    CREATE_AS_TARGET_MISSING,
142    CROSS_JOIN_IN_BODY_NOT_SUPPORTED,
143    CROSS_WITH_ON,
144    CROSS_WITH_USING,
145    CTE_BODY_MISSING,
146    /**
147     * Slice 103 — {@code WITH cte(a, b, c) AS (SELECT x, y FROM t) SELECT ...}
148     * — explicit CTE column list arity does not match the body's projection
149     * count, in a SELECT-side WITH clause. Slice 103 lifts the SELECT-side
150     * {@link StarExpansionKind#EXPLICIT_CTE_COLUMN_LIST_DEFERRED} family by
151     * routing the slice-102 rename helper through the SELECT-side CTE
152     * walker; the rename requires a 1-to-1 ordinal mapping, so both
153     * under- and over-specified lists reject with this code.
154     *
155     * <p>The parallel MERGE-side code is
156     * {@link #MERGE_CTE_EXPLICIT_COLUMN_LIST_ARITY_MISMATCH} (slice 102);
157     * the slice-103 helper carries a {@code dmlKind} discriminator and
158     * picks the right code per call site.
159     */
160    CTE_EXPLICIT_COLUMN_LIST_ARITY_MISMATCH,
161    CTE_FORWARD_REFERENCE,
162    CTE_WITH_RECURSIVE_NOT_SUPPORTED,
163    DELETE_CTE_NOT_SUPPORTED,
164    DELETE_FROM_JOIN_NATURAL_NOT_SUPPORTED,
165    DELETE_FROM_JOIN_USING_NOT_SUPPORTED,
166    DELETE_FROM_NESTED_JOIN_NOT_SUPPORTED,
167    DELETE_JOINED_NOT_SUPPORTED,
168    DELETE_JOIN_ON_HAS_SUBQUERY_NOT_SUPPORTED,
169    DELETE_ORDER_BY_OR_LIMIT_NOT_SUPPORTED,
170    DELETE_OUTPUT_CLAUSE_NOT_SUPPORTED,
171    DELETE_RETURNING_CLAUSE_NOT_SUPPORTED,
172    DELETE_TARGET_MISSING,
173    /**
174     * Slice 111 — DELETE WHERE-side {@code EXISTS (SELECT 1 FROM r WHERE …)}
175     * was admitted by the slice-23+ predicate-subquery walker but the
176     * inner relation is missing (cannot resolve a producer for any column
177     * referenced inside the EXISTS body). Parallel to slice-110
178     * {@link #UPDATE_WHERE_EXISTS_BODY_MISSING}.
179     */
180    DELETE_WHERE_EXISTS_BODY_MISSING,
181    /**
182     * Slice 111 — DELETE WHERE-side correlated {@code EXISTS} body
183     * references an outer alias the walker cannot resolve in the
184     * DELETE's scope. Parallel to slice-110
185     * {@link #UPDATE_WHERE_EXISTS_CORRELATED_UNKNOWN_OUTER_ALIAS}.
186     */
187    DELETE_WHERE_EXISTS_CORRELATED_UNKNOWN_OUTER_ALIAS,
188    /**
189     * Slice 111 — DELETE WHERE-side {@code EXISTS} body has a relation
190     * the walker cannot resolve (no producer for the inner SELECT's
191     * FROM-list). Parallel to slice-110
192     * {@link #UPDATE_WHERE_EXISTS_INNER_RELATION_UNKNOWN}.
193     */
194    DELETE_WHERE_EXISTS_INNER_RELATION_UNKNOWN,
195    /**
196     * Slice 111 — DELETE WHERE-side predicate has an outer-shape the
197     * walker cannot lift to an uncorrelated body extraction
198     * (e.g., tuple LHS in IN-SELECT, mixed operands). Parallel to
199     * slice-110 {@link #UPDATE_WHERE_OUTER_SHAPE_REJECTED}.
200     */
201    DELETE_WHERE_OUTER_SHAPE_REJECTED,
202    /**
203     * Slice 111 — DELETE WHERE-side predicate-subquery shape is not
204     * supported by the slice-23+ walker (generic catch-all when no more
205     * specific code applies). Parallel to slice-110
206     * {@link #UPDATE_WHERE_PREDICATE_GENERIC_NOT_SUPPORTED}.
207     */
208    DELETE_WHERE_PREDICATE_GENERIC_NOT_SUPPORTED,
209    /**
210     * Slice 111 — DELETE WHERE-side predicate has a subquery on the
211     * LHS (not the RHS), which is not liftable in the slice-23+
212     * walker's canonical form. Parallel to slice-110
213     * {@link #UPDATE_WHERE_PREDICATE_NOT_LIFTABLE}.
214     */
215    DELETE_WHERE_PREDICATE_NOT_LIFTABLE,
216    /**
217     * Slice 111 — DELETE WHERE-side {@code NOT (subq-wrapper)} where
218     * the inner is not an EXISTS — the slice-23+ walker only admits
219     * NOT EXISTS. Parallel to slice-110
220     * {@link #UPDATE_WHERE_PREDICATE_NOT_NOT_SUPPORTED}.
221     */
222    DELETE_WHERE_PREDICATE_NOT_NOT_SUPPORTED,
223    /**
224     * Slice 111 — DELETE WHERE-side scalar comparison
225     * {@code col <op> (SELECT …)} where both sides are subqueries (the
226     * walker only admits a scalar comparison with a single subquery
227     * operand). Parallel to slice-110
228     * {@link #UPDATE_WHERE_PREDICATE_SCALAR_COMPARISON_NOT_LIFTABLE}.
229     */
230    DELETE_WHERE_PREDICATE_SCALAR_COMPARISON_NOT_LIFTABLE,
231    DISTINCT_ON_EMPTY_COLUMN_LIST,
232    DISTINCT_ON_HAS_SUBQUERY_NOT_SUPPORTED,
233    DISTINCT_ON_NOT_SUPPORTED,
234    DUPLICATE_CTE_NAME,
235    DUPLICATE_FROM_SUBQUERY_ALIAS,
236    DUPLICATE_OUTPUT_NAME,
237    DUPLICATE_RELATION_ALIAS,
238    FROM_SOURCE_NO_TABLE,
239    FROM_SUBQUERY_ALIAS_REQUIRED,
240    FROM_SUBQUERY_BINDING_UNRESOLVED,
241    FROM_SUBQUERY_INNER_SUBQUERY_IN_GROUP_BY,
242    FROM_SUBQUERY_INNER_SUBQUERY_IN_JOIN_ON,
243    FROM_SUBQUERY_INNER_SUBQUERY_IN_WHERE,
244    FROM_SUBQUERY_IN_BODY_CONTEXT_NOT_SUPPORTED,
245    FROM_SUBQUERY_IN_SET_OP_BRANCH_FROM,
246    FROM_SUBQUERY_NO_INNER_SELECT,
247    FROM_SUBQUERY_ON_JOIN_SIDE_IN_SET_OP_BRANCH,
248    GROUP_BY_HAS_SUBQUERY_NOT_SUPPORTED,
249    HAVING_HAS_SUBQUERY_NOT_SUPPORTED,
250    HAVING_SUBQUERY_NOT_SUPPORTED,
251    HAVING_WINDOW_FUNCTION_NOT_SUPPORTED,
252    INSERT_COLUMN_COUNT_MISMATCH,
253    INSERT_MIXED_OUTER_AND_INNER_WITH_NOT_SUPPORTED,
254    INSERT_MULTI_TABLE_NOT_SUPPORTED,
255    INSERT_OUTER_WITH_ON_HIVE_MULTI_INSERT_NOT_SUPPORTED,
256    INSERT_SOURCE_NOT_SUPPORTED,
257    INSERT_TARGET_MISSING,
258    JOIN_ITEM_NO_TABLE,
259    JOIN_MISSING_ON_OR_USING,
260    JOIN_ON_EXISTS_BODY_MISSING,
261    JOIN_ON_EXISTS_CORRELATED_UNKNOWN_OUTER_ALIAS,
262    JOIN_ON_EXISTS_INNER_COLUMN_COUNT,
263    JOIN_ON_EXISTS_INNER_COMMA_FROM,
264    JOIN_ON_EXISTS_INNER_CROSS_JOIN,
265    JOIN_ON_EXISTS_INNER_FROM_SUBQUERY,
266    JOIN_ON_EXISTS_INNER_FROM_SUBQUERY_ON_JOIN,
267    JOIN_ON_EXISTS_INNER_IS_SET_OP,
268    JOIN_ON_EXISTS_INNER_MISSING_FROM,
269    JOIN_ON_EXISTS_INNER_NATURAL,
270    JOIN_ON_EXISTS_INNER_NON_CONSTANT_PROJECTION,
271    JOIN_ON_EXISTS_INNER_RELATION_UNKNOWN,
272    JOIN_ON_EXISTS_INNER_ROW_LIMIT,
273    JOIN_ON_EXISTS_INNER_SUBQUERY_IN_GROUP_BY,
274    JOIN_ON_EXISTS_INNER_SUBQUERY_IN_JOIN_ON,
275    JOIN_ON_EXISTS_INNER_SUBQUERY_IN_WHERE,
276    JOIN_ON_EXISTS_INNER_USING,
277    JOIN_ON_EXISTS_INNER_WITH,
278    JOIN_ON_EXISTS_WITHIN_GROUP_AGGREGATE,
279    JOIN_ON_EXISTS_WITHIN_GROUP_NON_WHITELISTED,
280    JOIN_ON_OUTER_SHAPE_REJECTED,
281    JOIN_ON_PREDICATE_GENERIC_NOT_SUPPORTED,
282    JOIN_ON_PREDICATE_NOT_LIFTABLE,
283    JOIN_ON_PREDICATE_NOT_NOT_SUPPORTED,
284    JOIN_ON_PREDICATE_SCALAR_COMPARISON_NOT_LIFTABLE,
285    JOIN_ON_TOP_LEVEL_SUBQUERY_NOT_SUPPORTED,
286    JOIN_WITH_BOTH_ON_AND_USING,
287    MALFORMED_SET_OP_AST,
288    MERGED_JOIN_AGAINST_CTE_WITH_EXPLICIT_COLUMN_LIST,
289    /**
290     * Slice 102 — {@code WITH cte(a, b, c) AS (SELECT x, y FROM t) MERGE ...}
291     * — explicit CTE column list arity does not match the body's projection
292     * count. Slice 102 lifts {@link #MERGE_CTE_EXPLICIT_COLUMN_LIST_NOT_SUPPORTED}
293     * by renaming the body's output column names to the explicit list, but
294     * the rename requires a 1-to-1 ordinal mapping. Both under- and
295     * over-specified lists reject with this code.
296     */
297    MERGE_CTE_EXPLICIT_COLUMN_LIST_ARITY_MISMATCH,
298    /**
299     * Slice 101 — {@code WITH cte(a, b) AS (...) MERGE ...} (CTE has an
300     * explicit column list) is not supported. PostgreSQL and SQL Server
301     * parsers admit this shape, but slice 101 defers because the inner CTE
302     * body's output columns are named by the inner SELECT (e.g.
303     * {@code id, name}), while the user-visible CTE columns are renamed
304     * ({@code a, b}). Slice 102 lifts this reject by rebuilding the CTE
305     * body's {@link StatementGraph} with the explicit-list names and
306     * rewriting outgoing {@link LineageRef.Kind#STATEMENT_OUTPUT} refs;
307     * the code stays declared for API stability and as a fallback for
308     * shapes the rename helper still cannot handle (none today).
309     */
310    MERGE_CTE_EXPLICIT_COLUMN_LIST_NOT_SUPPORTED,
311    MERGE_CTE_NOT_SUPPORTED,
312    MERGE_DO_NOTHING_NOT_SUPPORTED,
313    MERGE_ERROR_LOGGING_NOT_SUPPORTED,
314    MERGE_INSERT_DEFAULT_VALUES_NOT_SUPPORTED,
315    MERGE_INSERT_VALUES_HAS_SUBQUERY_NOT_SUPPORTED,
316    MERGE_LIMIT_NOT_SUPPORTED,
317    /**
318     * Slice 97 — {@code WHEN NOT MATCHED BY SOURCE THEN INSERT (...) VALUES (...)}
319     * is parser-admitted by the MSSQL grammar even though SQL Server
320     * rejects it semantically (a row absent from source cannot
321     * INSERT into source). Semantic IR rejects to surface the
322     * SQL Server semantic invariant rather than silently producing
323     * lineage for an impossible action.
324     */
325    MERGE_NOT_MATCHED_BY_SOURCE_INSERT_NOT_VALID,
326    /**
327     * Slice 97 — {@code WHEN NOT MATCHED BY SOURCE} branches must not
328     * reference source columns: there is no matching source row.
329     * Fires when SET RHS, per-WHEN AND condition, or a nested
330     * expression contains a column ref whose alias matches the
331     * USING source alias / qualified name.
332     */
333    MERGE_NOT_MATCHED_BY_SOURCE_REFERENCES_SOURCE,
334    MERGE_ON_CONDITION_MISSING,
335    MERGE_RETURNING_CLAUSE_NOT_SUPPORTED,
336    MERGE_SOURCE_NOT_SUPPORTED,
337    MERGE_TARGET_MISSING,
338    MERGE_UPDATE_DELETE_WHERE_NOT_SUPPORTED,
339    MERGE_USING_SOURCE_MISSING,
340    MERGE_WHEN_CONDITION_HAS_SUBQUERY_NOT_SUPPORTED,
341    MERGE_WHEN_NOT_MATCHED_BY_SOURCE_NOT_SUPPORTED,
342    MERGE_WHEN_NO_ACTION,
343    MIXED_SET_OPERATORS_NOT_SUPPORTED,
344    MULTIPLE_STATEMENTS_NOT_SUPPORTED,
345    NATURAL_CATALOG_REQUIRED,
346    NATURAL_IN_BODY_NOT_SUPPORTED,
347    NATURAL_WITH_ON,
348    NATURAL_WITH_USING,
349    NESTED_SCALAR_SUBQUERY_IN_PROJECTION,
350    NESTED_WITH_NOT_SUPPORTED,
351    ORDER_BY_CONSTANT_NOT_SUPPORTED,
352    ORDER_BY_FETCH_FIRST_NOT_SUPPORTED,
353    ORDER_BY_HAS_SUBQUERY_NOT_SUPPORTED,
354    ORDER_BY_NAME_NOT_MATCHED_IN_SET_OP_OUTPUT,
355    ORDER_BY_NO_PHYSICAL_COLUMN_REFS,
356    ORDER_BY_OBJECT_REFERENCE_NO_USABLE_NAME,
357    ORDER_BY_OBJECT_REFERENCE_UNSUPPORTED,
358    ORDER_BY_OFFSET_NOT_SUPPORTED,
359    ORDER_BY_ORDINAL_NOT_SUPPORTED,
360    ORDER_BY_ORDINAL_OUT_OF_RANGE,
361    ORDER_BY_PROJECTION_ALIAS_NOT_SUPPORTED,
362    ORDER_BY_QUALIFIED_REFERENCE_NOT_SUPPORTED,
363    ORDER_BY_RESET_WHEN_NOT_SUPPORTED,
364    ORDER_BY_SUBQUERY_NOT_SUPPORTED,
365    ORDER_BY_UNSUPPORTED_SORT_KEY_SHAPE,
366    ORDER_BY_WINDOW_FUNCTION_NOT_SUPPORTED,
367    ORDER_SIBLINGS_BY_NOT_SUPPORTED,
368    OUTPUT_DELETED_ON_INSERT_NOT_SUPPORTED,
369    OUTPUT_INSERTED_ON_DELETE_NOT_SUPPORTED,
370    OUTPUT_INTO_NOT_SUPPORTED,
371    OUTPUT_REFERENCES_UNKNOWN_RELATION,
372    OUTPUT_REFERENCES_UNSUPPORTED_BINDING_KIND,
373    PARSE_FAILED,
374    QUALIFY_NOT_SUPPORTED,
375    RELATION_NOT_FOUND_IN_CATALOG,
376    RESULT_COLUMN_NO_COLUMN_REFS,
377    RESULT_COLUMN_NO_NAME,
378    RESULT_COLUMN_NULL_EXPRESSION,
379    RESULT_COLUMN_SCALAR_SUBQUERY_EMBEDDED,
380    RETURNING_EMPTY_PROJECTION,
381    RETURNING_HAS_AGGREGATE_NOT_SUPPORTED,
382    RETURNING_HAS_SUBQUERY_NOT_SUPPORTED,
383    RETURNING_INTO_NOT_SUPPORTED,
384    RETURNING_STAR_CATALOG_REQUIRED,
385    RETURNING_STAR_NOT_SUPPORTED,
386    RETURNING_STAR_QUALIFIER_UNKNOWN,
387    ROW_LIMIT_COUNT_UNRESOLVED,
388    ROW_LIMIT_FETCH_FIRST_NOT_SUPPORTED,
389    ROW_LIMIT_HIVE_LIMIT_GRAMMAR_QUIRK,
390    ROW_LIMIT_LIMIT_NOT_SUPPORTED,
391    ROW_LIMIT_OFFSET_NOT_SUPPORTED,
392    ROW_LIMIT_TOP_NOT_SUPPORTED,
393    ROW_LIMIT_TOP_PERCENT_NOT_SUPPORTED,
394    ROW_LIMIT_TOP_WITH_TIES_NOT_SUPPORTED,
395    SCALAR_SUBQUERY_ALIAS_REQUIRED,
396    SCALAR_SUBQUERY_COLUMN_COUNT,
397    SCALAR_SUBQUERY_INNER_PROJECTION_UNNAMED,
398    SCALAR_SUBQUERY_INNER_SUBQUERY_IN_GROUP_BY,
399    SCALAR_SUBQUERY_INNER_SUBQUERY_IN_JOIN_ON,
400    SCALAR_SUBQUERY_INNER_SUBQUERY_IN_WHERE,
401    SCALAR_SUBQUERY_NO_INNER_SELECT,
402    SCALAR_SUBQUERY_UNKNOWN_RELATION_ALIAS,
403    SELECT_NO_FROM_SOURCE,
404    SELECT_NO_PROJECTED_COLUMNS,
405    SELECT_ROW_FILTER_NOT_SUPPORTED,
406    SELECT_ROW_FILTER_NULL,
407    SELECT_ROW_FILTER_UNKNOWN,
408    /**
409     * Slice 112 — top-level SELECT WHERE-side {@code EXISTS} body is
410     * empty (parser-level shape with no inner SELECT). Parallel to
411     * slice-110 {@link #UPDATE_WHERE_EXISTS_BODY_MISSING} /
412     * slice-111 {@link #DELETE_WHERE_EXISTS_BODY_MISSING}.
413     */
414    SELECT_WHERE_EXISTS_BODY_MISSING,
415    /**
416     * Slice 112 — top-level SELECT WHERE-side correlated {@code EXISTS}
417     * body references an outer alias the walker cannot resolve in the
418     * SELECT's scope. Parallel to slice-110
419     * {@link #UPDATE_WHERE_EXISTS_CORRELATED_UNKNOWN_OUTER_ALIAS} /
420     * slice-111 {@link #DELETE_WHERE_EXISTS_CORRELATED_UNKNOWN_OUTER_ALIAS}.
421     */
422    SELECT_WHERE_EXISTS_CORRELATED_UNKNOWN_OUTER_ALIAS,
423    /**
424     * Slice 112 — top-level SELECT WHERE-side {@code EXISTS} body has
425     * a relation the walker cannot resolve (no producer for the inner
426     * SELECT's FROM-list). Parallel to slice-110
427     * {@link #UPDATE_WHERE_EXISTS_INNER_RELATION_UNKNOWN} /
428     * slice-111 {@link #DELETE_WHERE_EXISTS_INNER_RELATION_UNKNOWN}.
429     */
430    SELECT_WHERE_EXISTS_INNER_RELATION_UNKNOWN,
431    /**
432     * Slice 112 — top-level SELECT WHERE-side predicate has an
433     * outer-shape the walker cannot lift to an uncorrelated body
434     * extraction (e.g., tuple LHS in IN-SELECT, mixed operands).
435     * Parallel to slice-110 {@link #UPDATE_WHERE_OUTER_SHAPE_REJECTED}
436     * / slice-111 {@link #DELETE_WHERE_OUTER_SHAPE_REJECTED}.
437     */
438    SELECT_WHERE_OUTER_SHAPE_REJECTED,
439    /**
440     * Slice 112 — top-level SELECT WHERE-side predicate-subquery
441     * shape is not supported by the slice-23+ walker (generic
442     * catch-all when no more specific code applies). Parallel to
443     * slice-110 {@link #UPDATE_WHERE_PREDICATE_GENERIC_NOT_SUPPORTED}
444     * / slice-111 {@link #DELETE_WHERE_PREDICATE_GENERIC_NOT_SUPPORTED}.
445     */
446    SELECT_WHERE_PREDICATE_GENERIC_NOT_SUPPORTED,
447    /**
448     * Slice 112 — top-level SELECT WHERE-side predicate has a
449     * subquery on the LHS (not the RHS), which is not liftable in the
450     * slice-23+ walker's canonical form. Parallel to slice-110
451     * {@link #UPDATE_WHERE_PREDICATE_NOT_LIFTABLE} / slice-111
452     * {@link #DELETE_WHERE_PREDICATE_NOT_LIFTABLE}.
453     */
454    SELECT_WHERE_PREDICATE_NOT_LIFTABLE,
455    /**
456     * Slice 112 — top-level SELECT WHERE-side
457     * {@code NOT (subq-wrapper)} where the inner is not an EXISTS —
458     * the slice-23+ walker only admits NOT EXISTS. Parallel to
459     * slice-110 {@link #UPDATE_WHERE_PREDICATE_NOT_NOT_SUPPORTED} /
460     * slice-111 {@link #DELETE_WHERE_PREDICATE_NOT_NOT_SUPPORTED}.
461     */
462    SELECT_WHERE_PREDICATE_NOT_NOT_SUPPORTED,
463    /**
464     * Slice 112 — top-level SELECT WHERE-side scalar comparison
465     * {@code col <op> (SELECT …)} where both sides are subqueries
466     * (the walker only admits a scalar comparison with a single
467     * subquery operand). Parallel to slice-110
468     * {@link #UPDATE_WHERE_PREDICATE_SCALAR_COMPARISON_NOT_LIFTABLE}
469     * / slice-111
470     * {@link #DELETE_WHERE_PREDICATE_SCALAR_COMPARISON_NOT_LIFTABLE}.
471     */
472    SELECT_WHERE_PREDICATE_SCALAR_COMPARISON_NOT_LIFTABLE,
473    SET_OPERATION_NOT_SUPPORTED_IN_CONTEXT,
474    SET_OP_BRANCH_COLUMN_COUNT_MISMATCH,
475    SET_OP_BRANCH_COUNT_TOO_FEW,
476    SET_OP_BRANCH_DUPLICATE_OUTPUT_NAME,
477    SET_OP_BRANCH_IS_SET_OP,
478    SET_OP_BRANCH_OUTPUT_NAME_UNUSABLE,
479    SET_OP_DUPLICATE_OUTER_OUTPUT_NAME,
480    SET_OP_NON_ROOT_ORDER_BY_NOT_SUPPORTED,
481    SET_OP_ORDER_BY_BRANCH_OUTPUT_NO_SOURCES,
482    SET_OP_OUTER_ORDER_BY_NO_PHYSICAL_COLUMN_REFS,
483    SET_OP_ROOT_TYPE_NONE,
484    SET_OP_ROOT_TYPE_NULL,
485    SET_OP_ROW_LIMIT_NOT_SUPPORTED,
486    SET_OP_UNKNOWN_OPERATOR_TYPE,
487    STAR_EXPANSION_EXPLICIT_CTE_COLUMN_LIST,
488    STAR_EXPANSION_MULTI_RELATION_FROM,
489    STAR_EXPANSION_NON_BASE_TABLE,
490    STAR_EXPANSION_NO_CATALOG,
491    STAR_EXPANSION_NO_INSCOPE_RELATION_COLUMNS,
492    STAR_EXPANSION_PREDICATE_BODY,
493    STAR_EXPANSION_QUALIFIER_AMBIGUOUS,
494    STAR_EXPANSION_QUALIFIER_NOT_FOUND,
495    STAR_EXPANSION_SYNTHETIC_BODY,
496    STAR_EXPANSION_UNHANDLED_KIND,
497    STATEMENT_KIND_NOT_SUPPORTED,
498    TABLE_BINDING_UNRESOLVED,
499    UNQUALIFIED_COLUMN_AMBIGUOUS,
500    UNQUALIFIED_MERGED_KEY_IN_JOIN_ON,
501    UNSUPPORTED_JOIN_TYPE,
502    UPDATE_CTE_NOT_SUPPORTED,
503    UPDATE_FROM_JOIN_NATURAL_NOT_SUPPORTED,
504    UPDATE_FROM_JOIN_USING_NOT_SUPPORTED,
505    UPDATE_FROM_NESTED_JOIN_NOT_SUPPORTED,
506    UPDATE_FROM_SUBQUERY_NOT_SUPPORTED,
507    UPDATE_JOINED_NOT_SUPPORTED,
508    UPDATE_JOIN_ON_HAS_SUBQUERY_NOT_SUPPORTED,
509    UPDATE_NO_SET_CLAUSE,
510    UPDATE_ORDER_BY_OR_LIMIT_NOT_SUPPORTED,
511    UPDATE_OUTPUT_CLAUSE_NOT_SUPPORTED,
512    UPDATE_RETURNING_CLAUSE_NOT_SUPPORTED,
513    UPDATE_SET_HAS_SUBQUERY_NOT_SUPPORTED,
514    UPDATE_TARGET_MISSING,
515    UPDATE_TUPLE_ASSIGNMENT_NOT_SUPPORTED,
516    UPDATE_WHERE_EXISTS_BODY_MISSING,
517    UPDATE_WHERE_EXISTS_CORRELATED_UNKNOWN_OUTER_ALIAS,
518    UPDATE_WHERE_EXISTS_INNER_RELATION_UNKNOWN,
519    UPDATE_WHERE_OUTER_SHAPE_REJECTED,
520    UPDATE_WHERE_PREDICATE_GENERIC_NOT_SUPPORTED,
521    UPDATE_WHERE_PREDICATE_NOT_LIFTABLE,
522    UPDATE_WHERE_PREDICATE_NOT_NOT_SUPPORTED,
523    UPDATE_WHERE_PREDICATE_SCALAR_COMPARISON_NOT_LIFTABLE,
524    USING_IN_BODY_NOT_SUPPORTED,
525    USING_KEY_NOT_DECLARED,
526    WHERE_HAS_SUBQUERY_NOT_SUPPORTED,
527    WINDOW_CLUSTER_BY_NOT_SUPPORTED,
528    WINDOW_DISTRIBUTE_BY_NOT_SUPPORTED,
529    WINDOW_EMPTY_OVER_NOT_SUPPORTED,
530    WINDOW_FILTER_NOT_SUPPORTED,
531    WINDOW_FRAME_EXCLUDE_NOT_SUPPORTED,
532    WINDOW_FRAME_NULL_BOUNDARY_TYPE,
533    WINDOW_FRAME_NULL_LIMIT_ROW_TYPE,
534    WINDOW_FRAME_NULL_START_BOUNDARY,
535    WINDOW_FRAME_OFFSET_NON_CONSTANT,
536    WINDOW_FRAME_UNEXPECTED_OFFSET,
537    WINDOW_FRAME_UNSUPPORTED_BOUNDARY_TYPE,
538    WINDOW_FRAME_UNSUPPORTED_LIMIT_ROW_TYPE,
539    WINDOW_FUNCTION_AS_PROJECTION_NOT_SUPPORTED,
540    WINDOW_FUNCTION_EMBEDDED_NOT_SUPPORTED,
541    WINDOW_FUNCTION_LEVEL_ORDER_BY_NOT_SUPPORTED,
542    WINDOW_FUNCTION_LEVEL_SORT_NOT_SUPPORTED,
543    WINDOW_FUNCTION_UNSUPPORTED,
544    WINDOW_FUNCTION_USED_NOT_SUPPORTED,
545    WINDOW_KEEP_DENSE_RANK_NOT_SUPPORTED,
546    WINDOW_NAMED_WINDOW_DECLARATION_NOT_SUPPORTED,
547    WINDOW_NAMED_WINDOW_REFERENCE_NOT_SUPPORTED,
548    WINDOW_OVER_ORDER_BY_AGGREGATE,
549    WINDOW_OVER_ORDER_BY_CALCULATED_ALIAS,
550    WINDOW_OVER_ORDER_BY_ITEM_UNUSABLE,
551    WINDOW_OVER_ORDER_BY_LITERAL,
552    WINDOW_OVER_ORDER_BY_NULL_SORT_KEY,
553    WINDOW_OVER_ORDER_BY_RESET_WHEN_NOT_SUPPORTED,
554    WINDOW_OVER_ORDER_BY_SIBLINGS_NOT_SUPPORTED,
555    WINDOW_OVER_ORDER_BY_SUBQUERY,
556    WINDOW_OVER_ORDER_BY_UNKNOWN_REFERENCE,
557    WINDOW_OVER_ORDER_BY_WINDOW_FUNCTION,
558    WINDOW_PARTITION_BY_AGGREGATE,
559    WINDOW_PARTITION_BY_CALCULATED_ALIAS,
560    WINDOW_PARTITION_BY_ITEM_UNUSABLE,
561    WINDOW_PARTITION_BY_LITERAL,
562    WINDOW_PARTITION_BY_PROJECTION_ALIAS,
563    WINDOW_PARTITION_BY_SORT_NOT_SUPPORTED,
564    WINDOW_PARTITION_BY_SUBQUERY,
565    WINDOW_PARTITION_BY_UNKNOWN_REFERENCE,
566    WINDOW_SORT_BY_NOT_SUPPORTED,
567    WINDOW_WITHIN_GROUP_INSIDE_PROJECTION_NOT_SUPPORTED,
568    WINDOW_WITHIN_GROUP_NOT_SUPPORTED
569}