Skip to main content

sqruff_lib_core/dialects/
syntax.rs

1use std::iter::FromIterator;
2
3#[derive(
4    Debug,
5    PartialEq,
6    Eq,
7    Clone,
8    Copy,
9    strum_macros::IntoStaticStr,
10    strum_macros::EnumString,
11    Hash,
12    PartialOrd,
13    Ord,
14    Default,
15)]
16#[strum(serialize_all = "snake_case")]
17pub enum SyntaxKind {
18    Unparsable,
19    File,
20    ColumnReference,
21    ObjectReference,
22    Expression,
23    WildcardIdentifier,
24    Function,
25    FunctionContents,
26    HavingClause,
27    PathSegment,
28    LimitClause,
29    CubeRollupClause,
30    GroupingSetsClause,
31    GroupingExpressionList,
32    SetClause,
33    FetchClause,
34    FunctionDefinition,
35    AlterSequenceOptionsSegment,
36    RoleReference,
37    TablespaceReference,
38    ExtensionReference,
39    TagReference,
40    ColumnDefinition,
41    ColumnConstraintSegment,
42    CommentClause,
43    TableEndClause,
44    MergeMatch,
45    MergeWhenNotMatchedClause,
46    MergeInsertClause,
47    MergeUpdateClause,
48    MergeDeleteClause,
49    MergeTreeOrderByClause,
50    SetClauseList,
51    TableReference,
52    GroupbyClause,
53    FrameClause,
54    WithCompoundStatement,
55    CommonTableExpression,
56    CTEColumnList,
57    ReferencedColumnList,
58    TriggerReference,
59    TableConstraint,
60    JoinOnCondition,
61    DatabaseReference,
62    CollationReference,
63    OverClause,
64    NamedWindow,
65    WindowSpecification,
66    PartitionbyClause,
67    JoinClause,
68    DropTriggerStatement,
69    SampleExpression,
70    TableExpression,
71    CreateTriggerStatement,
72    DropModelStatement,
73    DescribeStatement,
74    UseStatement,
75    ExplainStatement,
76    CreateSequenceStatement,
77    CreateSequenceOptionsSegment,
78    AlterSequenceStatement,
79    DropSequenceStatement,
80    DropCastStatement,
81    CreateFunctionStatement,
82    DropFunctionStatement,
83    CreateModelStatement,
84    CreateViewStatement,
85    DeleteStatement,
86    UpdateStatement,
87    CreateCastStatement,
88    CreateRoleStatement,
89    DropRoleStatement,
90    AlterTableStatement,
91    CreateSchemaStatement,
92    SetSchemaStatement,
93    DropSchemaStatement,
94    DropTypeStatement,
95    CreateDatabaseStatement,
96    DropDatabaseStatement,
97    FunctionParameterList,
98    CreateIndexStatement,
99    DropIndexStatement,
100    CreateTableStatement,
101    AccessStatement,
102    InsertStatement,
103    TransactionStatement,
104    DropTableStatement,
105    DropViewStatement,
106    CreateUserStatement,
107    DropUserStatement,
108    ArrayExpression,
109    LocalAlias,
110    MergeStatement,
111    IndexColumnDefinition,
112    AggregateOrderByClause,
113    FunctionName,
114    CaseExpression,
115    WhenClause,
116    ElseClause,
117    PreWhereClause,
118    WhereClause,
119    SetOperator,
120    ValuesClause,
121    EmptyStructLiteral,
122    ObjectLiteral,
123    ObjectLiteralElement,
124    TimeZoneGrammar,
125    BracketedArguments,
126    DataType,
127    AliasExpression,
128    ArrayAccessor,
129    ArrayLiteral,
130    TypedArrayLiteral,
131    StructType,
132    StructLiteral,
133    TypedStructLiteral,
134    IntervalExpression,
135    ArrayType,
136    SizedArrayType,
137    SelectStatement,
138    OverlapsClause,
139    SelectClause,
140    Statement,
141    WithNoSchemaBindingClause,
142    WithDataClause,
143    SetExpression,
144    FromClause,
145    EmptyStructLiteralBrackets,
146    WildcardExpression,
147    OrderbyClause,
148    TruncateStatement,
149    FromExpression,
150    FromExpressionElement,
151    SelectClauseModifier,
152    NamedWindowExpression,
153    SelectClauseElement,
154    QualifyClause,
155    MultiStatementSegment,
156    AssertStatement,
157    ForInStatements,
158    ForInStatement,
159    RepeatStatements,
160    RepeatStatement,
161    IfStatements,
162    IfStatement,
163    LoopStatements,
164    LoopStatement,
165    WhileStatements,
166    WhileStatement,
167    DatePartWeek,
168    SelectExceptClause,
169    SelectReplaceClause,
170    StructTypeSchema,
171    Tuple,
172    NamedArgument,
173    DeclareSegment,
174    SetSegment,
175    PartitionBySegment,
176    ClusterBySegment,
177    OptionsSegment,
178    CreateExternalTableStatement,
179    AlterViewStatement,
180    CreateMaterializedViewStatement,
181    AlterMaterializedViewSetOptionsStatement,
182    DropMaterializedViewStatement,
183    ParameterizedExpression,
184    PivotForClause,
185    FromPivotExpression,
186    UnpivotClause,
187    FromUnpivotExpression,
188    NotMatchedByTargetClause,
189    MergeWhenMatchedClause,
190    ProcedureName,
191    ExportStatement,
192    ProcedureParameterList,
193    ProcedureStatements,
194    CallStatement,
195    ReturnStatement,
196    BreakStatement,
197    LeaveStatement,
198    ContinueStatement,
199    RaiseStatement,
200    PsqlVariable,
201    ComparisonOperator,
202    DatetimeTypeIdentifier,
203    DatetimeLiteral,
204    IndexAccessMethod,
205    OperatorClassReference,
206    DefinitionParameter,
207    DefinitionParameters,
208    RelationOption,
209    RelationOptions,
210    AlterFunctionActionSegment,
211    AlterProcedureActionSegment,
212    AlterProcedureStatement,
213    DropProcedureStatement,
214    WktGeometryType,
215    IntoClause,
216    ForClause,
217    AlterRoleStatement,
218    ExplainOption,
219    CreateTableAsStatement,
220    AlterPublicationStatement,
221    CreatePublicationStatement,
222    PublicationObjects,
223    PublicationTable,
224    PublicationReference,
225    DropExtensionStatement,
226    CreateExtensionStatement,
227    VersionIdentifier,
228    AlterTableActionSegment,
229    DropPublicationStatement,
230    AlterMaterializedViewStatement,
231    AlterMaterializedViewActionSegment,
232    RefreshMaterializedViewStatement,
233    WithCheckOption,
234    AlterPolicyStatement,
235    AlterDatabaseStatement,
236    VacuumStatement,
237    LikeOptionSegment,
238    PartitionBoundSpec,
239    IndexParameters,
240    ReferentialActionSegment,
241    IndexElement,
242    ExclusionConstraintElement,
243    AlterDefaultPrivilegesStatement,
244    AlterDefaultPrivilegesObjectPrivilege,
245    AlterDefaultPrivilegesSchemaObject,
246    AlterDefaultPrivilegesToFromRoles,
247    AlterDefaultPrivilegesGrant,
248    DropOwnedStatement,
249    ReassignOwnedStatement,
250    IndexElementOptions,
251    AlterDefaultPrivilegesRevoke,
252    AlterIndexStatement,
253    ReindexStatementSegment,
254    AnalyzeStatement,
255    AlterTrigger,
256    OperationClassReference,
257    ConflictAction,
258    ConflictTarget,
259    SetStatement,
260    CreatePolicyStatement,
261    CreateDomainStatement,
262    AlterDomainStatement,
263    DropDomainStatement,
264    DropPolicyStatement,
265    LoadStatement,
266    ResetStatement,
267    ListenStatement,
268    NotifyStatement,
269    UnlistenStatement,
270    ClusterStatement,
271    LanguageClause,
272    DoStatement,
273    CreateUserMappingStatement,
274    ImportForeignSchemaStatement,
275    CreateServerStatement,
276    CreateCollationStatement,
277    AlterTypeStatement,
278    CreateTypeStatement,
279    LockTableStatement,
280    CopyStatement,
281    DiscardStatement,
282    AlterSchemaStatement,
283    ServerReference,
284    ArrayJoinClause,
285    TableEngineFunction,
286    OnClusterClause,
287    Engine,
288    EngineFunction,
289    DatabaseEngine,
290    ColumnTtlSegment,
291    TableTtlSegment,
292    DropDictionaryStatement,
293    DropQuotaStatement,
294    DropSettingProfileStatement,
295    SystemMergesSegment,
296    SystemTtlMergesSegment,
297    SystemMovesSegment,
298    SystemReplicaSegment,
299    SystemFilesystemSegment,
300    SystemReplicatedSegment,
301    SystemReplicationSegment,
302    SystemFetchesSegment,
303    SystemDistributedSegment,
304    SystemModelSegment,
305    SystemFileSegment,
306    SystemUnfreezeSegment,
307    SystemStatement,
308    ConnectbyClause,
309    CallSegment,
310    WithingroupClause,
311    PatternExpression,
312    MatchRecognizeClause,
313    ChangesClause,
314    MatchConditionClause,
315    FromAtExpression,
316    FromBeforeExpression,
317    SnowflakeKeywordExpression,
318    SemiStructuredExpression,
319    SelectExcludeClause,
320    SelectRenameClause,
321    AlterTableTableColumnAction,
322    AlterTableClusteringAction,
323    AlterTableConstraintAction,
324    AlterWarehouseStatement,
325    AlterShareStatement,
326    AlterStorageIntegrationStatement,
327    AlterExternalTableStatement,
328    CommentEqualsClause,
329    TagBracketedEquals,
330    TagEquals,
331    CreateCloneStatement,
332    CreateDatabaseFromShareStatement,
333    CreateProcedureStatement,
334    ScriptingBlockStatement,
335    ScriptingLetStatement,
336    AlterFunctionStatement,
337    CreateExternalFunctionStatement,
338    WarehouseObjectProperties,
339    ConstraintPropertiesSegment,
340    CopyOptions,
341    SchemaObjectProperties,
342    CreateTaskStatement,
343    SnowflakeTaskExpressionSegment,
344    CreateStatement,
345    CreateFileFormatSegment,
346    AlterFileFormatSegment,
347    CsvFileFormatTypeParameters,
348    JsonFileFormatTypeParameters,
349    AvroFileFormatTypeParameters,
350    OrcFileFormatTypeParameters,
351    ParquetFileFormatTypeParameters,
352    XmlFileFormatTypeParameters,
353    AlterPipeSegment,
354    FileFormatSegment,
355    FormatTypeOptions,
356    CopyIntoLocationStatement,
357    CopyIntoTableStatement,
358    StorageLocation,
359    StageParameters,
360    S3ExternalStageParameters,
361    GcsExternalStageParameters,
362    AzureBlobStorageExternalStageParameters,
363    CreateStageStatement,
364    AlterStageStatement,
365    CreateStreamStatement,
366    AlterStreamStatement,
367    ShowStatement,
368    AlterUserStatement,
369    AlterSessionStatement,
370    AlterSessionSetStatement,
371    AlterSessionUnsetClause,
372    AlterTaskStatement,
373    AlterTaskSpecialSetClause,
374    AlterTaskSetClause,
375    AlterTaskUnsetClause,
376    ExecuteTaskClause,
377    UndropStatement,
378    CommentStatement,
379    DropExternalTableStatement,
380    ListStatement,
381    GetStatement,
382    PutStatement,
383    RemoveStatement,
384    CastExpression,
385    DropObjectStatement,
386    UnsetStatement,
387    SqlConfOption,
388    BinaryOperator,
389    PrimitiveType,
390    CreateWidgetStatement,
391    ReplaceTableStatement,
392    RemoveWidgetStatement,
393    UseDatabaseStatement,
394    InsertOverwriteDirectoryStatement,
395    InsertOverwriteDirectoryHiveFmtStatement,
396    LoadDataStatement,
397    ClusterByClause,
398    DistributeByClause,
399    HintFunction,
400    SelectHint,
401    WithCubeRollupClause,
402    SortByClause,
403    LateralViewClause,
404    PivotClause,
405    TransformClause,
406    AddFileStatement,
407    AddJarStatement,
408    AnalyzeTableStatement,
409    CacheTable,
410    ClearCache,
411    ListFileStatement,
412    ListJarStatement,
413    RefreshStatement,
414    UncacheTable,
415    FileReference,
416    PropertyNameIdentifier,
417    GeneratedColumnDefinition,
418    IntervalLiteral,
419    DescribeHistoryStatement,
420    DescribeDetailStatement,
421    GenerateManifestFileStatement,
422    ConvertToDeltaStatement,
423    RestoreTableStatement,
424    ConstraintStatement,
425    ApplyChangesIntoStatement,
426    UsingClause,
427    DataSourceFormat,
428    IcebergTransformation,
429    MsckRepairTableStatement,
430    RowFormatClause,
431    SkewedByClause,
432    Bracketed,
433    NumericLiteral,
434    Keyword,
435    EndOfFile,
436    Whitespace,
437    Newline,
438    NakedIdentifier,
439    Unlexable,
440    StartBracket,
441    EndBracket,
442    InlineComment,
443    Identifier,
444    Raw,
445    QuotedIdentifier,
446    Star,
447    Dot,
448    Comma,
449    Comment,
450    EmitsSegment,
451    Literal,
452    BareFunction,
453    NullLiteral,
454    BooleanLiteral,
455    BlockComment,
456    QuotedLiteral,
457    DoubleDivide,
458    Meta,
459    #[default]
460    Colon,
461    StatementTerminator,
462    StartSquareBracket,
463    EndSquareBracket,
464    StartCurlyBracket,
465    Tilde,
466    CastingOperator,
467    RawComparisonOperator,
468    DatePart,
469    Pipe,
470    SignIndicator,
471    LikeOperator,
472    Word,
473    DoubleQuote,
474    SingleQuote,
475    Dash,
476    Semicolon,
477    BackQuote,
478    DollarQuote,
479    Not,
480    Ampersand,
481    Question,
482    Percent,
483    Divide,
484    Minus,
485    Plus,
486    Caret,
487    VerticalBar,
488    EndCurlyBracket,
489    FunctionNameIdentifier,
490    Dedent,
491    Indent,
492    Implicit,
493    AtSignLiteral,
494    TsqlVariable,
495    QuestionMark,
496    RightArrow,
497    UdfBody,
498    StartAngleBracket,
499    EndAngleBracket,
500    Lambda,
501    NakedIdentifierAll,
502    ProcedureNameIdentifier,
503    Parameter,
504    DateConstructorLiteral,
505    ProcedureOption,
506    ExportOption,
507    PropertiesNakedIdentifier,
508    Symbol,
509    DataTypeIdentifier,
510    Placeholder,
511    ExecuteScriptStatement,
512    AssignmentOperator,
513    Batch,
514    PivotColumnReference,
515    IntoTableClause,
516    PasswordAuth,
517    ExecuteAsClause,
518    ExecuteImmediateClause,
519    UnicodeSingleQuote,
520    EscapedSingleQuote,
521    UnicodeDoubleQuote,
522    JsonOperator,
523    At,
524    BitStringLiteral,
525    DollarNumericLiteral,
526    WidgetNameIdentifier,
527    FileKeyword,
528    SemiStructuredElement,
529    BytesDoubleQuote,
530    BytesSingleQuote,
531    FileFormat,
532    FileType,
533    StartHint,
534    EndHint,
535    FunctionAssigner,
536    UnquotedFilePath,
537    Dollar,
538    SystemFunctionName,
539    IntegerLiteral,
540    StageEncryptionOption,
541    BucketPath,
542    QuotedStar,
543    StagePath,
544    FileLiteral,
545    BytesQuotedLiteral,
546    SignedQuotedLiteral,
547    ParameterAssigner,
548    ColumnSelector,
549    DollarLiteral,
550    ExcludeBracketClose,
551    WalrusOperator,
552    WarehouseSize,
553    Variable,
554    ExcludeBracketOpen,
555    SymlinkFormatManifest,
556    StartExcludeBracket,
557    CompressionType,
558    CopyOnErrorOption,
559    ColumnIndexIdentifierSegment,
560    ScalingPolicy,
561    ValidationModeOption,
562    EndExcludeBracket,
563    IdentifierList,
564    TemplateLoop,
565    ColonDelimiter,
566    SqlcmdOperator,
567    Slice,
568    TableEndClauseSegment,
569    PragmaStatement,
570    PragmaReference,
571    Slash,
572    DataFormatSegment,
573    AuthorizationSegment,
574    ColumnAttributeSegment,
575    ShowModelStatement,
576    CreateExternalSchemaStatement,
577    CreateLibraryStatement,
578    UnloadStatement,
579    DeclareStatement,
580    FetchStatement,
581    CloseStatement,
582    CreateDatashareStatement,
583    DescDatashareStatement,
584    DropDatashareStatement,
585    ShowDatasharesStatement,
586    GrantDatashareStatement,
587    CreateRlsPolicyStatement,
588    ManageRlsPolicyStatement,
589    DropRlsPolicyStatement,
590    AnalyzeCompressionStatement,
591    PartitionedBySegment,
592    RowFormatDelimitedSegment,
593    ObjectUnpivoting,
594    ArrayUnnesting,
595    AlterGroup,
596    CreateGroup,
597    ListaggOverflowClauseSegment,
598    UnorderedSelectStatementSegment,
599    MapType,
600    MapTypeSchema,
601    PrepareStatement,
602    ExecuteStatement,
603    RenameTableStatement,
604    ActionParameter,
605    AggregateClause,
606    AggregateOrderBy,
607    AliasOperator,
608    AllowConnections,
609    AlterAccountStatement,
610    AlterAggregateStatement,
611    AlterBiCapacityStatement,
612    AlterCapacityStatement,
613    AlterCatalogStatement,
614    AlterDynamicTableStatement,
615    AlterEventStatement,
616    AlterExtensionStatement,
617    AlterExternalVolumeStatement,
618    AlterForeignTableActionSegment,
619    AlterForeignTableStatement,
620    AlterMaskingPolicy,
621    AlterMasterKeyStatement,
622    AlterNetworkPolicyStatement,
623    AlterOptionSegment,
624    AlterOrganizationStatement,
625    AlterPartitionFunctionStatement,
626    AlterPartitionSchemeStatement,
627    AlterPasswordPolicyStatement,
628    AlterProjectStatement,
629    AlterReservationStatement,
630    AlterResourceMonitorStatement,
631    AlterRowAccessPolicyStatement,
632    AlterSecurityPolicyStatement,
633    AlterStatisticsStatement,
634    AlterStreamlitStatement,
635    AlterSubscription,
636    AlterTableSwitchStatement,
637    AlterTagStatement,
638    AlterTextSearchConfigurationStatement,
639    AlterVolumeStatement,
640    ArnCatalogSchemaSegment,
641    ArrayTypeSchema,
642    AtSign,
643    AtomicBeginEndBlock,
644    Atsign,
645    AutoOption,
646    BackupStorageRedundancy,
647    BeginEndBlock,
648    BeginStatement,
649    BinaryLiteral,
650    BindVariable,
651    BitValueLiteral,
652    BracketedIndexColumnListGrammar,
653    BulkInsertStatement,
654    BulkInsertWithSegment,
655    ByteLengthLiteral,
656    CallOperator,
657    CatalogReference,
658    CharacteristicStatement,
659    CheckConstraintGrammar,
660    CheckTableStatement,
661    ChecksumTableStatement,
662    CloseCursorStatement,
663    ClusterbyClause,
664    Code,
665    CollationClause,
666    ColonLiteral,
667    ColonPrefix,
668    ColumnPathOperator,
669    ColumnPropertiesSegment,
670    ColumnTypeReference,
671    ColumnsExpression,
672    Command,
673    CompatibilityLevel,
674    CompositeValueExpansion,
675    ComputedColumnDefinition,
676    ConflictClause,
677    ConnectionConstraintGrammar,
678    ConnectionLimitSegment,
679    CopyFilesIntoLocationStatement,
680    CreateAggregateStatement,
681    CreateAssignmentStatement,
682    CreateAuthenticationPolicySegment,
683    CreateCapacityStatement,
684    CreateCatalogStatement,
685    CreateColumnstoreIndexStatement,
686    CreateCortexSearchServiceStatement,
687    CreateDatabaseRoleStatement,
688    CreateDatabaseScopedCredentialStatement,
689    CreateDatabaseWithOptions,
690    CreateEventStatement,
691    CreateEventTableStatement,
692    CreateExternalDataSourceStatement,
693    CreateExternalFileFormat,
694    CreateExternalVolumeStatement,
695    CreateForeignDataWrapper,
696    CreateForeignTableStatement,
697    CreateFulltextCatalogStatement,
698    CreateFulltextIndexStatement,
699    CreateLoginStatement,
700    CreateMasterKeyStatement,
701    CreateMaterializedViewAsReplicaOfStatement,
702    CreateOperatorStatement,
703    CreateOptionSegment,
704    CreatePartitionFunctionStatement,
705    CreatePartitionSchemeStatement,
706    CreatePasswordPolicyStatement,
707    CreateReservationStatement,
708    CreateResourceMonitorStatement,
709    CreateRowAccessPolicyStatement,
710    CreateSearchIndexStatement,
711    CreateSecurityPolicyStatement,
712    CreateServerRoleStatement,
713    CreateSnapshotTableStatement,
714    CreateSqlFunctionStatement,
715    CreateStatisticsStatement,
716    CreateStreamlitStatement,
717    CreateSubscription,
718    CreateSynonymStatement,
719    CreateTableAsSelectStatement,
720    CreateTableFunctionStatement,
721    CreateTableGraphStatement,
722    CreateTableUsingStatement,
723    CreateTextSearchConfigurationStatement,
724    CreateTrigger,
725    CreateVectorIndexStatement,
726    CreateVirtualTableStatement,
727    CreateVolumeStatement,
728    CursorDefinition,
729    CursorFetchSegment,
730    CursorOpenCloseSegment,
731    DataGovernancePolicyTagActionSegment,
732    DatabaseRoleReference,
733    DateFormat,
734    DeallocateCursorStatement,
735    DeallocateSegment,
736    DeallocateStatement,
737    DeclareOrReplaceVariableStatement,
738    DefaultCollate,
739    DefinerSegment,
740    DeleteTargetTable,
741    DelimiterStatement,
742    DisableTrigger,
743    DistributebyClause,
744    DoubleAmpersand,
745    DoubleAtSignLiteral,
746    DoubleVerticalBar,
747    DropAggregateStatement,
748    DropAssignmentStatement,
749    DropCapacityStatement,
750    DropCatalogStatement,
751    DropCollationStatement,
752    DropColumnClause,
753    DropDynamicTableSegment,
754    DropEventStatement,
755    DropExternalVolumeStatement,
756    DropForeignTableStatement,
757    DropIcebergTableStatement,
758    DropMasterKeyStatement,
759    DropModelstatement,
760    DropPasswordPolicyStatement,
761    DropReservationStatement,
762    DropResourceMonitorStatement,
763    DropRowAccessPolicyStatement,
764    DropSearchIndexStatement,
765    DropSecurityPolicy,
766    DropStatement,
767    DropStatisticsStatement,
768    DropSubscription,
769    DropSynonymStatement,
770    DropTableFunctionStatement,
771    DropTextSearchConfigurationStatement,
772    DropTrigger,
773    DropVectorIndexStatement,
774    DropVolumeStatement,
775    DynamicTableLagIntervalSegment,
776    DynamicTableOptions,
777    Edition,
778    EncryptedWithGrammar,
779    ExceptionBlockStatement,
780    ExceptionCode,
781    ExecuteArrow,
782    ExecuteImmediate,
783    ExecuteOption,
784    ExecuteSegment,
785    ExtendClause,
786    ExternalAccessIntegrationEquals,
787    ExternalFileDelimitedTextClause,
788    ExternalFileDelimitedTextFormatOptionsClause,
789    ExternalFileDeltaClause,
790    ExternalFileJsonClause,
791    ExternalFileOrcClause,
792    ExternalFileParquetClause,
793    ExternalFileRcClause,
794    ExternalLocation,
795    ExternalVolumeReference,
796    FatRightArrow,
797    FetchCursorStatement,
798    FileCompression,
799    FileEncoding,
800    FileSpec,
801    FileSpecFileGrowth,
802    FileSpecFileName,
803    FileSpecMaxSize,
804    FileSpecNewName,
805    FileSpecSize,
806    FileSpecWithoutBracket,
807    FilegroupClause,
808    FilegroupName,
809    FilestreamOnOptionStatement,
810    FlushStatement,
811    ForSystemTimeAsOfSegment,
812    FormatClause,
813    FromDatashareClause,
814    FromIntegrationClause,
815    FullTextSearchOperator,
816    FunctionOptionSegment,
817    FunctionParameterListWithComments,
818    GetDiagnosticsSegment,
819    GlobOperator,
820    GoStatement,
821    GotoStatement,
822    GrantToSegment,
823    GraphTableConstraint,
824    GroupAndOrderbyClause,
825    HashIdentifier,
826    HashPrefix,
827    HelpStatement,
828    HexadecimalLiteral,
829    IamRoleClause,
830    IcebergTableOptions,
831    IdentifierClauseSegment,
832    IdentityGrammar,
833    IfClause,
834    IfThenStatement,
835    IndexHintClause,
836    IndexOption,
837    IndexReference,
838    IndexType,
839    InitializeType,
840    InlineDollarSign,
841    InlinePathOperator,
842    InsertRowAlias,
843    IntoOutfileClause,
844    IsolationLevelClause,
845    IterateStatement,
846    JsonPath,
847    LabelSegment,
848    LambdaArrow,
849    LambdaFunction,
850    LeadingDot,
851    LimitClauseComponent,
852    ListComprehension,
853    ListaggOverflowClause,
854    LocalAliasSegment,
855    LogLevelEquals,
856    LogicalFileName,
857    LoginUserSegment,
858    MagicCellSegment,
859    MagicLine,
860    MagicSingleLine,
861    MagicStart,
862    MaskStatement,
863    MasterKeyEncryptionOption,
864    MatchCondition,
865    MaxDuration,
866    MaxLiteral,
867    MetaCommand,
868    MetaCommandQueryBuffer,
869    MetaCommandStatement,
870    MlTableExpression,
871    MsckTableStatement,
872    NotOperator,
873    NotebookStart,
874    ObevoAnnotation,
875    OffsetClause,
876    OnPartitionOrFilegroupStatement,
877    OnPartitionsClause,
878    OpenCursorStatement,
879    OpenSymmetricKeyStatement,
880    OpenjsonSegment,
881    OpenjsonWithClause,
882    OpenquerySegment,
883    OpenrowsetSegment,
884    OpenrowsetWithClause,
885    OpenxmlSegment,
886    Operator,
887    OptimizeTableStatement,
888    Option,
889    OptionClause,
890    OptionIndicator,
891    OutputClause,
892    ParameterDirection,
893    PartitionClause,
894    PartitionSchemeClause,
895    PartitionSchemeName,
896    PasswordPolicyOptions,
897    PasswordPolicyReference,
898    PeriodSegment,
899    PgTrgmOperator,
900    PgvectorOperator,
901    PipeOperator,
902    PipeOperatorClause,
903    PipeStatement,
904    PivotOperator,
905    PostTableExpression,
906    PostgisOperator,
907    PrepareSegment,
908    PrewhereClause,
909    PrintStatement,
910    ProcedureStatement,
911    PurgeBinaryLogsStatement,
912    QualifiedOperator,
913    QueryHintSegment,
914    QuestionLiteral,
915    RaiserrorStatement,
916    RawDoubleQuote,
917    RawQuotedLiteral,
918    RawSingleQuote,
919    ReconfigureStatement,
920    ReferencesConstraintGrammar,
921    RelationalIndexOptions,
922    RenameColumnClause,
923    RenameStatement,
924    RepairTableStatement,
925    ReplaceStatement,
926    ResetMasterStatement,
927    ResetSessionAuthorizationStatement,
928    ResignalSegment,
929    ResourceConstraint,
930    ResourceMonitorOptions,
931    ReturnSegment,
932    ReturningClause,
933    SchemaReference,
934    ScriptingDeclareStatement,
935    ScriptingIfStatement,
936    ScriptingRaiseStatement,
937    SearchOptimizationAction,
938    SecurityLabelStatement,
939    SelectVariableAssignment,
940    SequenceNextValue,
941    SequenceReference,
942    SerdeMethod,
943    ServiceObjective,
944    SetConstraintStatement,
945    SetContextInfoStatement,
946    SetLanguageStatement,
947    SetLocalVariableSegment,
948    SetNamesStatement,
949    SetOperatorClause,
950    SetSessionAuthorizationStatement,
951    SetSessionStatement,
952    SetTimezoneStatement,
953    SetTransactionStatement,
954    SetVariableStatement,
955    SettingsClause,
956    SimplifiedPivot,
957    SimplifiedUnpivot,
958    SingleQuoteWithN,
959    SizeLiteral,
960    SortbyClause,
961    SqlcmdCommandSegment,
962    SquareQuote,
963    StatisticsReference,
964    StoringSegment,
965    SubscriptionReference,
966    SynonymReference,
967    SystemVariable,
968    TableClausesSegment,
969    TableClusterByClause,
970    TableColumnCommentAction,
971    TableDistributionClause,
972    TableDistributionIndexClause,
973    TableIndexClause,
974    TableIndexSegment,
975    TableLocationClause,
976    TableOptionStatement,
977    TableSpecificationSegment,
978    TagStatement,
979    TemporalQuery,
980    TextimageOnOptionStatement,
981    ThrowStatement,
982    TraceLevelEquals,
983    TruncateTable,
984    TryCatch,
985    TupleTypeSchema,
986    UndropSchemaStatement,
987    UnpivotMultiColumn,
988    UnpivotOperator,
989    UnpivotSingleColumn,
990    UnquotedRelativeSqlFilePath,
991    UpdateStatisticsStatement,
992    UpsertClause,
993    UpsertClauseList,
994    UseCatalogStatement,
995    VolumeReference,
996    WaitforStatement,
997    WildcardExclude,
998    WildcardPatternMatching,
999    WildcardRename,
1000    WildcardReplace,
1001    WithCheckOptions,
1002    WithFill,
1003    WithRollupClause,
1004    WithinGroupClause,
1005    WithordinalityClause,
1006    // Oracle-specific
1007    OracleAtSign,
1008    OraclePowerOperator,
1009    OracleAssignmentOperator,
1010    HierarchicalQueryClause,
1011    PivotSegment,
1012    UnpivotSegment,
1013    TriggerCorrelationName,
1014    OracleBindVariable,
1015    AlterTableProperties,
1016    AlterTableColumnClauses,
1017    AlterTableConstraintClauses,
1018    IndexTypeReference,
1019    ExecuteFileStatement,
1020    SlashBufferExecutor,
1021    OracleBatch,
1022    OracleCommentStatement,
1023    OracleCreateProcedureStatement,
1024    OracleDropProcedureStatement,
1025    OracleDeclareSegment,
1026    OracleColumnTypeReference,
1027    OracleRowTypeReference,
1028    CollectionType,
1029    RecordType,
1030    RefCursorType,
1031    DeclareCursorVariable,
1032    OracleExecuteImmediateStatement,
1033    OracleBeginEndBlock,
1034    OracleCreateFunctionStatement,
1035    OracleAlterFunctionStatement,
1036    OracleCreateTypeStatement,
1037    OracleTypeReference,
1038    OracleCreateTypeBodyStatement,
1039    OracleCreatePackageStatement,
1040    OraclePackageReference,
1041    OracleAlterPackageStatement,
1042    OracleDropPackageStatement,
1043    OracleCreateTriggerStatement,
1044    DmlEventClause,
1045    OracleReferencingClause,
1046    CompoundTriggerStatement,
1047    TimingPointSection,
1048    OracleAlterTriggerStatement,
1049    AssignmentSegmentStatement,
1050    OracleIfThenStatement,
1051    OracleIfClause,
1052    OracleCaseExpression,
1053    OracleWhenClause,
1054    OracleElseClause,
1055    OracleNullStatement,
1056    ForLoopStatement,
1057    WhileLoopStatement,
1058    OracleLoopStatement,
1059    ForallStatement,
1060    OracleOpenStatement,
1061    OracleOpenForStatement,
1062    OracleFetchStatement,
1063    OracleIntoClause,
1064    BulkCollectIntoClause,
1065    OracleExitStatement,
1066    OracleReturnStatement,
1067    OracleCreateUserStatement,
1068    OracleReturningClause,
1069    DatabaseLinkReference,
1070    OracleCreateDatabaseLinkStatement,
1071    OracleDropDatabaseLinkStatement,
1072    OracleAlterDatabaseLinkStatement,
1073    OracleCreateSynonymStatement,
1074    OracleDropSynonymStatement,
1075    OracleAlterSynonymStatement,
1076    OracleWithinGroupClause,
1077    OracleListaggOverflowClause,
1078    OracleNamedArgument,
1079    OracleCreateTableStatement,
1080    OracleColumnDefinition,
1081    OracleSqlplusVariable,
1082    StartwithClause,
1083    OracleTableReference,
1084    OracleCreateViewStatement,
1085    OracleAlterIndexStatement,
1086    OracleAlterTableStatement,
1087    OracleAlterSessionStatement,
1088    JsonTableColumnDefinition,
1089    JsonTableColumnsClause,
1090    JsonTableFunctionContents,
1091    OracleMergeUpdateClause,
1092    OracleInsertStatement,
1093    OracleUpdateStatement,
1094    OracleDeleteStatement,
1095    OracleTransactionStatement,
1096    OracleValuesClause,
1097    OracleTableConstraint,
1098    OracleFunctionName,
1099    OracleOrderByClause,
1100}
1101
1102impl SyntaxKind {
1103    pub fn indent_val(self) -> i8 {
1104        match self {
1105            SyntaxKind::Indent | SyntaxKind::Implicit => 1,
1106            SyntaxKind::Dedent => -1,
1107            _ => 0,
1108        }
1109    }
1110}
1111
1112impl SyntaxKind {
1113    pub fn as_str(&self) -> &'static str {
1114        self.into()
1115    }
1116}
1117
1118#[derive(Clone, PartialEq, Eq, Default)]
1119pub struct SyntaxSet([u64; 18]);
1120
1121impl std::fmt::Debug for SyntaxSet {
1122    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1123        f.debug_list().entries(self.iter()).finish()
1124    }
1125}
1126
1127impl SyntaxSet {
1128    pub const EMPTY: SyntaxSet = Self([0; 18]);
1129    const SLICE_BITS: u16 = u64::BITS as u16;
1130
1131    pub const fn new(kinds: &[SyntaxKind]) -> Self {
1132        let mut set = SyntaxSet::EMPTY;
1133
1134        let mut index = 0;
1135        while index < kinds.len() {
1136            set = set.union(&Self::single(kinds[index]));
1137            index += 1;
1138        }
1139
1140        set
1141    }
1142
1143    pub const fn single(kind: SyntaxKind) -> Self {
1144        let kind = kind as u16;
1145
1146        let index = (kind / Self::SLICE_BITS) as usize;
1147
1148        debug_assert!(
1149            index < Self::EMPTY.0.len(),
1150            "Index out of bounds. Increase the size of the bitset array."
1151        );
1152
1153        let shift = kind % Self::SLICE_BITS;
1154        let mask = 1 << shift;
1155
1156        let mut bits = Self::EMPTY.0;
1157        bits[index] = mask;
1158
1159        Self(bits)
1160    }
1161
1162    pub fn is_empty(&self) -> bool {
1163        self == &SyntaxSet::EMPTY
1164    }
1165
1166    pub fn insert(&mut self, value: SyntaxKind) {
1167        let set = std::mem::take(self);
1168        *self = set.union(&SyntaxSet::single(value));
1169    }
1170
1171    pub const fn intersection(mut self, other: &Self) -> Self {
1172        let mut index = 0;
1173
1174        while index < self.0.len() {
1175            self.0[index] &= other.0[index];
1176            index += 1;
1177        }
1178
1179        self
1180    }
1181
1182    pub const fn union(mut self, other: &Self) -> Self {
1183        let mut i = 0;
1184
1185        while i < self.0.len() {
1186            self.0[i] |= other.0[i];
1187            i += 1;
1188        }
1189
1190        self
1191    }
1192
1193    pub const fn intersects(&self, other: &Self) -> bool {
1194        let mut i = 0;
1195
1196        while i < self.0.len() {
1197            if self.0[i] & other.0[i] != 0 {
1198                return true;
1199            }
1200            i += 1;
1201        }
1202
1203        false
1204    }
1205
1206    pub const fn contains(&self, kind: SyntaxKind) -> bool {
1207        let kind = kind as u16;
1208        let index = kind as usize / Self::SLICE_BITS as usize;
1209        let shift = kind % Self::SLICE_BITS;
1210        let mask = 1 << shift;
1211
1212        self.0[index] & mask != 0
1213    }
1214
1215    pub const fn len(&self) -> usize {
1216        let mut len: u32 = 0;
1217
1218        let mut index = 0;
1219        while index < self.0.len() {
1220            len += self.0[index].count_ones();
1221            index += 1;
1222        }
1223
1224        len as usize
1225    }
1226
1227    pub fn iter(&self) -> SyntaxSetIter {
1228        SyntaxSetIter {
1229            set: self.clone(),
1230            index: 0,
1231        }
1232    }
1233}
1234
1235impl Extend<SyntaxKind> for SyntaxSet {
1236    fn extend<T: IntoIterator<Item = SyntaxKind>>(&mut self, iter: T) {
1237        let set = std::mem::take(self);
1238        *self = set.union(&SyntaxSet::from_iter(iter));
1239    }
1240}
1241
1242impl IntoIterator for SyntaxSet {
1243    type Item = SyntaxKind;
1244    type IntoIter = SyntaxSetIter;
1245
1246    fn into_iter(self) -> Self::IntoIter {
1247        self.iter()
1248    }
1249}
1250
1251impl IntoIterator for &SyntaxSet {
1252    type Item = SyntaxKind;
1253    type IntoIter = SyntaxSetIter;
1254
1255    fn into_iter(self) -> Self::IntoIter {
1256        self.iter()
1257    }
1258}
1259
1260impl FromIterator<SyntaxKind> for SyntaxSet {
1261    fn from_iter<T: IntoIterator<Item = SyntaxKind>>(iter: T) -> Self {
1262        let mut set = SyntaxSet::EMPTY;
1263
1264        for kind in iter {
1265            set.insert(kind);
1266        }
1267
1268        set
1269    }
1270}
1271
1272pub struct SyntaxSetIter {
1273    set: SyntaxSet,
1274    index: u16,
1275}
1276
1277impl Iterator for SyntaxSetIter {
1278    type Item = SyntaxKind;
1279
1280    fn next(&mut self) -> Option<Self::Item> {
1281        loop {
1282            let slice = self.set.0.get_mut(self.index as usize)?;
1283            let bit = slice.trailing_zeros() as u16;
1284
1285            if bit < SyntaxSet::SLICE_BITS {
1286                *slice ^= 1 << bit;
1287                let value = self.index * SyntaxSet::SLICE_BITS + bit;
1288                return Some(unsafe { std::mem::transmute::<u16, SyntaxKind>(value) });
1289            }
1290
1291            self.index += 1;
1292        }
1293    }
1294
1295    fn size_hint(&self) -> (usize, Option<usize>) {
1296        let len = self.set.len();
1297
1298        (len, Some(len))
1299    }
1300}