use std::iter::FromIterator;
#[derive(
Debug,
PartialEq,
Eq,
Clone,
Copy,
strum_macros::IntoStaticStr,
strum_macros::EnumString,
Hash,
PartialOrd,
Ord,
Default,
)]
#[strum(serialize_all = "snake_case")]
pub enum SyntaxKind {
Unparsable,
File,
ColumnReference,
ObjectReference,
Expression,
WildcardIdentifier,
Function,
FunctionContents,
HavingClause,
PathSegment,
LimitClause,
CubeRollupClause,
GroupingSetsClause,
GroupingExpressionList,
SetClause,
FetchClause,
FunctionDefinition,
AlterSequenceOptionsSegment,
RoleReference,
TablespaceReference,
ExtensionReference,
TagReference,
ColumnDefinition,
ColumnConstraintSegment,
CommentClause,
TableEndClause,
MergeMatch,
MergeWhenNotMatchedClause,
MergeInsertClause,
MergeUpdateClause,
MergeDeleteClause,
MergeTreeOrderByClause,
SetClauseList,
TableReference,
GroupbyClause,
FrameClause,
WithCompoundStatement,
CommonTableExpression,
CTEColumnList,
TriggerReference,
TableConstraint,
JoinOnCondition,
DatabaseReference,
CollationReference,
OverClause,
NamedWindow,
WindowSpecification,
PartitionbyClause,
JoinClause,
DropTriggerStatement,
SampleExpression,
TableExpression,
CreateTriggerStatement,
DropModelStatement,
DescribeStatement,
UseStatement,
ExplainStatement,
CreateSequenceStatement,
CreateSequenceOptionsSegment,
AlterSequenceStatement,
DropSequenceStatement,
DropCastStatement,
CreateFunctionStatement,
DropFunctionStatement,
CreateModelStatement,
CreateViewStatement,
DeleteStatement,
UpdateStatement,
CreateCastStatement,
CreateRoleStatement,
DropRoleStatement,
AlterTableStatement,
CreateSchemaStatement,
SetSchemaStatement,
DropSchemaStatement,
DropTypeStatement,
CreateDatabaseStatement,
DropDatabaseStatement,
FunctionParameterList,
CreateIndexStatement,
DropIndexStatement,
CreateTableStatement,
AccessStatement,
InsertStatement,
TransactionStatement,
DropTableStatement,
DropViewStatement,
CreateUserStatement,
DropUserStatement,
ArrayExpression,
LocalAlias,
MergeStatement,
IndexColumnDefinition,
AggregateOrderByClause,
FunctionName,
CaseExpression,
WhenClause,
ElseClause,
PreWhereClause,
WhereClause,
SetOperator,
ValuesClause,
EmptyStructLiteral,
ObjectLiteral,
ObjectLiteralElement,
TimeZoneGrammar,
BracketedArguments,
DataType,
AliasExpression,
ArrayAccessor,
ArrayLiteral,
TypedArrayLiteral,
StructType,
StructLiteral,
TypedStructLiteral,
IntervalExpression,
ArrayType,
SizedArrayType,
SelectStatement,
OverlapsClause,
SelectClause,
Statement,
WithNoSchemaBindingClause,
WithDataClause,
SetExpression,
FromClause,
EmptyStructLiteralBrackets,
WildcardExpression,
OrderbyClause,
TruncateStatement,
FromExpression,
FromExpressionElement,
SelectClauseModifier,
NamedWindowExpression,
SelectClauseElement,
QualifyClause,
MultiStatementSegment,
AssertStatement,
ForInStatements,
ForInStatement,
RepeatStatements,
RepeatStatement,
IfStatements,
IfStatement,
LoopStatements,
LoopStatement,
WhileStatements,
WhileStatement,
DatePartWeek,
SelectExceptClause,
SelectReplaceClause,
StructTypeSchema,
Tuple,
NamedArgument,
DeclareSegment,
SetSegment,
PartitionBySegment,
ClusterBySegment,
OptionsSegment,
CreateExternalTableStatement,
AlterViewStatement,
CreateMaterializedViewStatement,
AlterMaterializedViewSetOptionsStatement,
DropMaterializedViewStatement,
ParameterizedExpression,
PivotForClause,
FromPivotExpression,
UnpivotClause,
FromUnpivotExpression,
NotMatchedByTargetClause,
MergeWhenMatchedClause,
ProcedureName,
ExportStatement,
ProcedureParameterList,
ProcedureStatements,
CallStatement,
ReturnStatement,
BreakStatement,
LeaveStatement,
ContinueStatement,
RaiseStatement,
PsqlVariable,
ComparisonOperator,
DatetimeTypeIdentifier,
DatetimeLiteral,
IndexAccessMethod,
OperatorClassReference,
DefinitionParameter,
DefinitionParameters,
RelationOption,
RelationOptions,
AlterFunctionActionSegment,
AlterProcedureActionSegment,
AlterProcedureStatement,
DropProcedureStatement,
WktGeometryType,
IntoClause,
ForClause,
AlterRoleStatement,
ExplainOption,
CreateTableAsStatement,
AlterPublicationStatement,
CreatePublicationStatement,
PublicationObjects,
PublicationTable,
PublicationReference,
DropExtensionStatement,
CreateExtensionStatement,
VersionIdentifier,
AlterTableActionSegment,
DropPublicationStatement,
AlterMaterializedViewStatement,
AlterMaterializedViewActionSegment,
RefreshMaterializedViewStatement,
WithCheckOption,
AlterPolicyStatement,
AlterDatabaseStatement,
VacuumStatement,
LikeOptionSegment,
PartitionBoundSpec,
IndexParameters,
ReferentialActionSegment,
IndexElement,
ExclusionConstraintElement,
AlterDefaultPrivilegesStatement,
AlterDefaultPrivilegesObjectPrivilege,
AlterDefaultPrivilegesSchemaObject,
AlterDefaultPrivilegesToFromRoles,
AlterDefaultPrivilegesGrant,
DropOwnedStatement,
ReassignOwnedStatement,
IndexElementOptions,
AlterDefaultPrivilegesRevoke,
AlterIndexStatement,
ReindexStatementSegment,
AnalyzeStatement,
AlterTrigger,
OperationClassReference,
ConflictAction,
ConflictTarget,
SetStatement,
CreatePolicyStatement,
CreateDomainStatement,
AlterDomainStatement,
DropDomainStatement,
DropPolicyStatement,
LoadStatement,
ResetStatement,
ListenStatement,
NotifyStatement,
UnlistenStatement,
ClusterStatement,
LanguageClause,
DoStatement,
CreateUserMappingStatement,
ImportForeignSchemaStatement,
CreateServerStatement,
CreateCollationStatement,
AlterTypeStatement,
CreateTypeStatement,
LockTableStatement,
CopyStatement,
DiscardStatement,
AlterSchemaStatement,
ServerReference,
ArrayJoinClause,
TableEngineFunction,
OnClusterClause,
Engine,
EngineFunction,
DatabaseEngine,
ColumnTtlSegment,
TableTtlSegment,
DropDictionaryStatement,
DropQuotaStatement,
DropSettingProfileStatement,
SystemMergesSegment,
SystemTtlMergesSegment,
SystemMovesSegment,
SystemReplicaSegment,
SystemFilesystemSegment,
SystemReplicatedSegment,
SystemReplicationSegment,
SystemFetchesSegment,
SystemDistributedSegment,
SystemModelSegment,
SystemFileSegment,
SystemUnfreezeSegment,
SystemStatement,
ConnectbyClause,
CallSegment,
WithingroupClause,
PatternExpression,
MatchRecognizeClause,
ChangesClause,
MatchConditionClause,
FromAtExpression,
FromBeforeExpression,
SnowflakeKeywordExpression,
SemiStructuredExpression,
SelectExcludeClause,
SelectRenameClause,
AlterTableTableColumnAction,
AlterTableClusteringAction,
AlterTableConstraintAction,
AlterWarehouseStatement,
AlterShareStatement,
AlterStorageIntegrationStatement,
AlterExternalTableStatement,
CommentEqualsClause,
TagBracketedEquals,
TagEquals,
CreateCloneStatement,
CreateDatabaseFromShareStatement,
CreateProcedureStatement,
ScriptingBlockStatement,
ScriptingLetStatement,
AlterFunctionStatement,
CreateExternalFunctionStatement,
WarehouseObjectProperties,
ConstraintPropertiesSegment,
CopyOptions,
SchemaObjectProperties,
CreateTaskStatement,
SnowflakeTaskExpressionSegment,
CreateStatement,
CreateFileFormatSegment,
AlterFileFormatSegment,
CsvFileFormatTypeParameters,
JsonFileFormatTypeParameters,
AvroFileFormatTypeParameters,
OrcFileFormatTypeParameters,
ParquetFileFormatTypeParameters,
XmlFileFormatTypeParameters,
AlterPipeSegment,
FileFormatSegment,
FormatTypeOptions,
CopyIntoLocationStatement,
CopyIntoTableStatement,
StorageLocation,
StageParameters,
S3ExternalStageParameters,
GcsExternalStageParameters,
AzureBlobStorageExternalStageParameters,
CreateStageStatement,
AlterStageStatement,
CreateStreamStatement,
AlterStreamStatement,
ShowStatement,
AlterUserStatement,
AlterSessionStatement,
AlterSessionSetStatement,
AlterSessionUnsetClause,
AlterTaskStatement,
AlterTaskSpecialSetClause,
AlterTaskSetClause,
AlterTaskUnsetClause,
ExecuteTaskClause,
UndropStatement,
CommentStatement,
DropExternalTableStatement,
ListStatement,
GetStatement,
PutStatement,
RemoveStatement,
CastExpression,
DropObjectStatement,
UnsetStatement,
SqlConfOption,
BinaryOperator,
PrimitiveType,
CreateWidgetStatement,
ReplaceTableStatement,
RemoveWidgetStatement,
UseDatabaseStatement,
InsertOverwriteDirectoryStatement,
InsertOverwriteDirectoryHiveFmtStatement,
LoadDataStatement,
ClusterByClause,
DistributeByClause,
HintFunction,
SelectHint,
WithCubeRollupClause,
SortByClause,
LateralViewClause,
PivotClause,
TransformClause,
AddFileStatement,
AddJarStatement,
AnalyzeTableStatement,
CacheTable,
ClearCache,
ListFileStatement,
ListJarStatement,
RefreshStatement,
UncacheTable,
FileReference,
PropertyNameIdentifier,
GeneratedColumnDefinition,
IntervalLiteral,
DescribeHistoryStatement,
DescribeDetailStatement,
GenerateManifestFileStatement,
ConvertToDeltaStatement,
RestoreTableStatement,
ConstraintStatement,
ApplyChangesIntoStatement,
UsingClause,
DataSourceFormat,
IcebergTransformation,
MsckRepairTableStatement,
RowFormatClause,
SkewedByClause,
Bracketed,
NumericLiteral,
Keyword,
EndOfFile,
Whitespace,
Newline,
NakedIdentifier,
Unlexable,
StartBracket,
EndBracket,
InlineComment,
Identifier,
Raw,
QuotedIdentifier,
Star,
Dot,
Comma,
Comment,
EmitsSegment,
Literal,
BareFunction,
NullLiteral,
BooleanLiteral,
BlockComment,
QuotedLiteral,
DoubleDivide,
Meta,
#[default]
Colon,
StatementTerminator,
StartSquareBracket,
EndSquareBracket,
StartCurlyBracket,
Tilde,
CastingOperator,
RawComparisonOperator,
DatePart,
Pipe,
SignIndicator,
LikeOperator,
Word,
DoubleQuote,
SingleQuote,
Dash,
Semicolon,
BackQuote,
DollarQuote,
Not,
Ampersand,
Question,
Percent,
Divide,
Minus,
Plus,
Caret,
VerticalBar,
EndCurlyBracket,
FunctionNameIdentifier,
Dedent,
Indent,
Implicit,
AtSignLiteral,
TsqlVariable,
QuestionMark,
RightArrow,
UdfBody,
StartAngleBracket,
EndAngleBracket,
Lambda,
NakedIdentifierAll,
ProcedureNameIdentifier,
Parameter,
DateConstructorLiteral,
ProcedureOption,
ExportOption,
PropertiesNakedIdentifier,
Symbol,
DataTypeIdentifier,
Placeholder,
ExecuteScriptStatement,
AssignmentOperator,
Batch,
PivotColumnReference,
IntoTableClause,
PasswordAuth,
ExecuteAsClause,
ExecuteImmediateClause,
UnicodeSingleQuote,
EscapedSingleQuote,
UnicodeDoubleQuote,
JsonOperator,
At,
BitStringLiteral,
DollarNumericLiteral,
WidgetNameIdentifier,
FileKeyword,
SemiStructuredElement,
BytesDoubleQuote,
BytesSingleQuote,
FileFormat,
FileType,
StartHint,
EndHint,
FunctionAssigner,
UnquotedFilePath,
Dollar,
SystemFunctionName,
IntegerLiteral,
StageEncryptionOption,
BucketPath,
QuotedStar,
StagePath,
FileLiteral,
BytesQuotedLiteral,
SignedQuotedLiteral,
ParameterAssigner,
ColumnSelector,
DollarLiteral,
ExcludeBracketClose,
WalrusOperator,
WarehouseSize,
Variable,
ExcludeBracketOpen,
SymlinkFormatManifest,
StartExcludeBracket,
CompressionType,
CopyOnErrorOption,
ColumnIndexIdentifierSegment,
ScalingPolicy,
ValidationModeOption,
EndExcludeBracket,
IdentifierList,
TemplateLoop,
ColonDelimiter,
SqlcmdOperator,
Slice,
TableEndClauseSegment,
PragmaStatement,
PragmaReference,
Slash,
DataFormatSegment,
AuthorizationSegment,
ColumnAttributeSegment,
ShowModelStatement,
CreateExternalSchemaStatement,
CreateLibraryStatement,
UnloadStatement,
DeclareStatement,
FetchStatement,
CloseStatement,
CreateDatashareStatement,
DescDatashareStatement,
DropDatashareStatement,
ShowDatasharesStatement,
GrantDatashareStatement,
CreateRlsPolicyStatement,
ManageRlsPolicyStatement,
DropRlsPolicyStatement,
AnalyzeCompressionStatement,
PartitionedBySegment,
RowFormatDelimitedSegment,
ObjectUnpivoting,
ArrayUnnesting,
AlterGroup,
CreateGroup,
ListaggOverflowClauseSegment,
UnorderedSelectStatementSegment,
MapType,
MapTypeSchema,
PrepareStatement,
ExecuteStatement,
RenameTableStatement,
ActionParameter,
AggregateClause,
AggregateOrderBy,
AliasOperator,
AllowConnections,
AlterAccountStatement,
AlterAggregateStatement,
AlterBiCapacityStatement,
AlterCapacityStatement,
AlterCatalogStatement,
AlterDynamicTableStatement,
AlterEventStatement,
AlterExtensionStatement,
AlterExternalVolumeStatement,
AlterForeignTableActionSegment,
AlterForeignTableStatement,
AlterMaskingPolicy,
AlterMasterKeyStatement,
AlterNetworkPolicyStatement,
AlterOptionSegment,
AlterOrganizationStatement,
AlterPartitionFunctionStatement,
AlterPartitionSchemeStatement,
AlterPasswordPolicyStatement,
AlterProjectStatement,
AlterReservationStatement,
AlterResourceMonitorStatement,
AlterRowAccessPolicyStatement,
AlterSecurityPolicyStatement,
AlterStatisticsStatement,
AlterStreamlitStatement,
AlterSubscription,
AlterTableSwitchStatement,
AlterTagStatement,
AlterTextSearchConfigurationStatement,
AlterVolumeStatement,
ArnCatalogSchemaSegment,
ArrayTypeSchema,
AtSign,
AtomicBeginEndBlock,
Atsign,
AutoOption,
BackupStorageRedundancy,
BeginEndBlock,
BeginStatement,
BinaryLiteral,
BindVariable,
BitValueLiteral,
BracketedIndexColumnListGrammar,
BulkInsertStatement,
BulkInsertWithSegment,
ByteLengthLiteral,
CallOperator,
CatalogReference,
CharacteristicStatement,
CheckConstraintGrammar,
CheckTableStatement,
ChecksumTableStatement,
CloseCursorStatement,
ClusterbyClause,
Code,
CollationClause,
ColonLiteral,
ColonPrefix,
ColumnPathOperator,
ColumnPropertiesSegment,
ColumnTypeReference,
ColumnsExpression,
Command,
CompatibilityLevel,
CompositeValueExpansion,
ComputedColumnDefinition,
ConflictClause,
ConnectionConstraintGrammar,
ConnectionLimitSegment,
CopyFilesIntoLocationStatement,
CreateAggregateStatement,
CreateAssignmentStatement,
CreateAuthenticationPolicySegment,
CreateCapacityStatement,
CreateCatalogStatement,
CreateColumnstoreIndexStatement,
CreateCortexSearchServiceStatement,
CreateDatabaseRoleStatement,
CreateDatabaseScopedCredentialStatement,
CreateDatabaseWithOptions,
CreateEventStatement,
CreateEventTableStatement,
CreateExternalDataSourceStatement,
CreateExternalFileFormat,
CreateExternalVolumeStatement,
CreateForeignDataWrapper,
CreateForeignTableStatement,
CreateFulltextCatalogStatement,
CreateFulltextIndexStatement,
CreateLoginStatement,
CreateMasterKeyStatement,
CreateMaterializedViewAsReplicaOfStatement,
CreateOperatorStatement,
CreateOptionSegment,
CreatePartitionFunctionStatement,
CreatePartitionSchemeStatement,
CreatePasswordPolicyStatement,
CreateReservationStatement,
CreateResourceMonitorStatement,
CreateRowAccessPolicyStatement,
CreateSearchIndexStatement,
CreateSecurityPolicyStatement,
CreateServerRoleStatement,
CreateSnapshotTableStatement,
CreateSqlFunctionStatement,
CreateStatisticsStatement,
CreateStreamlitStatement,
CreateSubscription,
CreateSynonymStatement,
CreateTableAsSelectStatement,
CreateTableFunctionStatement,
CreateTableGraphStatement,
CreateTableUsingStatement,
CreateTextSearchConfigurationStatement,
CreateTrigger,
CreateVectorIndexStatement,
CreateVirtualTableStatement,
CreateVolumeStatement,
CursorDefinition,
CursorFetchSegment,
CursorOpenCloseSegment,
DataGovernancePolicyTagActionSegment,
DatabaseRoleReference,
DateFormat,
DeallocateCursorStatement,
DeallocateSegment,
DeallocateStatement,
DeclareOrReplaceVariableStatement,
DefaultCollate,
DefinerSegment,
DeleteTargetTable,
DelimiterStatement,
DisableTrigger,
DistributebyClause,
DoubleAmpersand,
DoubleAtSignLiteral,
DoubleVerticalBar,
DropAggregateStatement,
DropAssignmentStatement,
DropCapacityStatement,
DropCatalogStatement,
DropCollationStatement,
DropColumnClause,
DropDynamicTableSegment,
DropEventStatement,
DropExternalVolumeStatement,
DropForeignTableStatement,
DropIcebergTableStatement,
DropMasterKeyStatement,
DropModelstatement,
DropPasswordPolicyStatement,
DropReservationStatement,
DropResourceMonitorStatement,
DropRowAccessPolicyStatement,
DropSearchIndexStatement,
DropSecurityPolicy,
DropStatement,
DropStatisticsStatement,
DropSubscription,
DropSynonymStatement,
DropTableFunctionStatement,
DropTextSearchConfigurationStatement,
DropTrigger,
DropVectorIndexStatement,
DropVolumeStatement,
DynamicTableLagIntervalSegment,
DynamicTableOptions,
Edition,
EncryptedWithGrammar,
ExceptionBlockStatement,
ExceptionCode,
ExecuteArrow,
ExecuteImmediate,
ExecuteOption,
ExecuteSegment,
ExtendClause,
ExternalAccessIntegrationEquals,
ExternalFileDelimitedTextClause,
ExternalFileDelimitedTextFormatOptionsClause,
ExternalFileDeltaClause,
ExternalFileJsonClause,
ExternalFileOrcClause,
ExternalFileParquetClause,
ExternalFileRcClause,
ExternalLocation,
ExternalVolumeReference,
FatRightArrow,
FetchCursorStatement,
FileCompression,
FileEncoding,
FileSpec,
FileSpecFileGrowth,
FileSpecFileName,
FileSpecMaxSize,
FileSpecNewName,
FileSpecSize,
FileSpecWithoutBracket,
FilegroupClause,
FilegroupName,
FilestreamOnOptionStatement,
FlushStatement,
ForSystemTimeAsOfSegment,
FormatClause,
FromDatashareClause,
FromIntegrationClause,
FullTextSearchOperator,
FunctionOptionSegment,
FunctionParameterListWithComments,
GetDiagnosticsSegment,
GlobOperator,
GoStatement,
GotoStatement,
GrantToSegment,
GraphTableConstraint,
GroupAndOrderbyClause,
HashIdentifier,
HashPrefix,
HelpStatement,
HexadecimalLiteral,
IamRoleClause,
IcebergTableOptions,
IdentifierClauseSegment,
IdentityGrammar,
IfClause,
IfThenStatement,
IndexHintClause,
IndexOption,
IndexReference,
IndexType,
InitializeType,
InlineDollarSign,
InlinePathOperator,
InsertRowAlias,
IntoOutfileClause,
IsolationLevelClause,
IterateStatement,
JsonPath,
LabelSegment,
LambdaArrow,
LambdaFunction,
LeadingDot,
LimitClauseComponent,
ListComprehension,
ListaggOverflowClause,
LocalAliasSegment,
LogLevelEquals,
LogicalFileName,
LoginUserSegment,
MagicCellSegment,
MagicLine,
MagicSingleLine,
MagicStart,
MaskStatement,
MasterKeyEncryptionOption,
MatchCondition,
MaxDuration,
MaxLiteral,
MetaCommand,
MetaCommandQueryBuffer,
MetaCommandStatement,
MlTableExpression,
MsckTableStatement,
NotOperator,
NotebookStart,
ObevoAnnotation,
OffsetClause,
OnPartitionOrFilegroupStatement,
OnPartitionsClause,
OpenCursorStatement,
OpenSymmetricKeyStatement,
OpenjsonSegment,
OpenjsonWithClause,
OpenquerySegment,
OpenrowsetSegment,
OpenrowsetWithClause,
OpenxmlSegment,
Operator,
OptimizeTableStatement,
Option,
OptionClause,
OptionIndicator,
OutputClause,
ParameterDirection,
PartitionClause,
PartitionSchemeClause,
PartitionSchemeName,
PasswordPolicyOptions,
PasswordPolicyReference,
PeriodSegment,
PgTrgmOperator,
PgvectorOperator,
PipeOperator,
PipeOperatorClause,
PipeStatement,
PivotOperator,
PostTableExpression,
PostgisOperator,
PrepareSegment,
PrewhereClause,
PrintStatement,
ProcedureStatement,
PurgeBinaryLogsStatement,
QualifiedOperator,
QueryHintSegment,
QuestionLiteral,
RaiserrorStatement,
RawDoubleQuote,
RawQuotedLiteral,
RawSingleQuote,
ReconfigureStatement,
ReferencesConstraintGrammar,
RelationalIndexOptions,
RenameColumnClause,
RenameStatement,
RepairTableStatement,
ReplaceStatement,
ResetMasterStatement,
ResetSessionAuthorizationStatement,
ResignalSegment,
ResourceConstraint,
ResourceMonitorOptions,
ReturnSegment,
ReturningClause,
SchemaReference,
ScriptingDeclareStatement,
ScriptingIfStatement,
ScriptingRaiseStatement,
SearchOptimizationAction,
SecurityLabelStatement,
SelectVariableAssignment,
SequenceNextValue,
SequenceReference,
SerdeMethod,
ServiceObjective,
SetConstraintStatement,
SetContextInfoStatement,
SetLanguageStatement,
SetLocalVariableSegment,
SetNamesStatement,
SetOperatorClause,
SetSessionAuthorizationStatement,
SetSessionStatement,
SetTimezoneStatement,
SetTransactionStatement,
SetVariableStatement,
SettingsClause,
SimplifiedPivot,
SimplifiedUnpivot,
SingleQuoteWithN,
SizeLiteral,
SortbyClause,
SqlcmdCommandSegment,
SquareQuote,
StatisticsReference,
StoringSegment,
SubscriptionReference,
SynonymReference,
SystemVariable,
TableClausesSegment,
TableClusterByClause,
TableColumnCommentAction,
TableDistributionClause,
TableDistributionIndexClause,
TableIndexClause,
TableIndexSegment,
TableLocationClause,
TableOptionStatement,
TableSpecificationSegment,
TagStatement,
TemporalQuery,
TextimageOnOptionStatement,
ThrowStatement,
TraceLevelEquals,
TruncateTable,
TryCatch,
TupleTypeSchema,
UndropSchemaStatement,
UnpivotMultiColumn,
UnpivotOperator,
UnpivotSingleColumn,
UnquotedRelativeSqlFilePath,
UpdateStatisticsStatement,
UpsertClause,
UpsertClauseList,
UseCatalogStatement,
VolumeReference,
WaitforStatement,
WildcardExclude,
WildcardPatternMatching,
WildcardRename,
WildcardReplace,
WithCheckOptions,
WithFill,
WithRollupClause,
WithinGroupClause,
WithordinalityClause,
}
impl SyntaxKind {
pub fn indent_val(self) -> i8 {
match self {
SyntaxKind::Indent | SyntaxKind::Implicit => 1,
SyntaxKind::Dedent => -1,
_ => 0,
}
}
}
impl SyntaxKind {
pub fn as_str(&self) -> &'static str {
self.into()
}
}
#[derive(Clone, PartialEq, Eq, Default)]
pub struct SyntaxSet([u64; 16]);
impl std::fmt::Debug for SyntaxSet {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_list().entries(self.iter()).finish()
}
}
impl SyntaxSet {
pub const EMPTY: SyntaxSet = Self([0; 16]);
const SLICE_BITS: u16 = u64::BITS as u16;
pub const fn new(kinds: &[SyntaxKind]) -> Self {
let mut set = SyntaxSet::EMPTY;
let mut index = 0;
while index < kinds.len() {
set = set.union(&Self::single(kinds[index]));
index += 1;
}
set
}
pub const fn single(kind: SyntaxKind) -> Self {
let kind = kind as u16;
let index = (kind / Self::SLICE_BITS) as usize;
debug_assert!(
index < Self::EMPTY.0.len(),
"Index out of bounds. Increase the size of the bitset array."
);
let shift = kind % Self::SLICE_BITS;
let mask = 1 << shift;
let mut bits = Self::EMPTY.0;
bits[index] = mask;
Self(bits)
}
pub fn is_empty(&self) -> bool {
self == &SyntaxSet::EMPTY
}
pub fn insert(&mut self, value: SyntaxKind) {
let set = std::mem::take(self);
*self = set.union(&SyntaxSet::single(value));
}
pub const fn intersection(mut self, other: &Self) -> Self {
let mut index = 0;
while index < self.0.len() {
self.0[index] &= other.0[index];
index += 1;
}
self
}
pub const fn union(mut self, other: &Self) -> Self {
let mut i = 0;
while i < self.0.len() {
self.0[i] |= other.0[i];
i += 1;
}
self
}
pub const fn intersects(&self, other: &Self) -> bool {
let mut i = 0;
while i < self.0.len() {
if self.0[i] & other.0[i] != 0 {
return true;
}
i += 1;
}
false
}
pub const fn contains(&self, kind: SyntaxKind) -> bool {
let kind = kind as u16;
let index = kind as usize / Self::SLICE_BITS as usize;
let shift = kind % Self::SLICE_BITS;
let mask = 1 << shift;
self.0[index] & mask != 0
}
pub const fn len(&self) -> usize {
let mut len: u32 = 0;
let mut index = 0;
while index < self.0.len() {
len += self.0[index].count_ones();
index += 1;
}
len as usize
}
pub fn iter(&self) -> SyntaxSetIter {
SyntaxSetIter {
set: self.clone(),
index: 0,
}
}
}
impl Extend<SyntaxKind> for SyntaxSet {
fn extend<T: IntoIterator<Item = SyntaxKind>>(&mut self, iter: T) {
let set = std::mem::take(self);
*self = set.union(&SyntaxSet::from_iter(iter));
}
}
impl IntoIterator for SyntaxSet {
type Item = SyntaxKind;
type IntoIter = SyntaxSetIter;
fn into_iter(self) -> Self::IntoIter {
self.iter()
}
}
impl IntoIterator for &SyntaxSet {
type Item = SyntaxKind;
type IntoIter = SyntaxSetIter;
fn into_iter(self) -> Self::IntoIter {
self.iter()
}
}
impl FromIterator<SyntaxKind> for SyntaxSet {
fn from_iter<T: IntoIterator<Item = SyntaxKind>>(iter: T) -> Self {
let mut set = SyntaxSet::EMPTY;
for kind in iter {
set.insert(kind);
}
set
}
}
pub struct SyntaxSetIter {
set: SyntaxSet,
index: u16,
}
impl Iterator for SyntaxSetIter {
type Item = SyntaxKind;
fn next(&mut self) -> Option<Self::Item> {
loop {
let slice = self.set.0.get_mut(self.index as usize)?;
let bit = slice.trailing_zeros() as u16;
if bit < SyntaxSet::SLICE_BITS {
*slice ^= 1 << bit;
let value = self.index * SyntaxSet::SLICE_BITS + bit;
return Some(unsafe { std::mem::transmute::<u16, SyntaxKind>(value) });
}
self.index += 1;
}
}
fn size_hint(&self) -> (usize, Option<usize>) {
let len = self.set.len();
(len, Some(len))
}
}