use crate::tokens::Span;
use serde::{Deserialize, Serialize};
use std::fmt;
#[cfg(feature = "bindings")]
use ts_rs::TS;
fn default_true() -> bool {
true
}
fn is_true(v: &bool) -> bool {
*v
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[serde(rename_all = "snake_case")]
#[cfg_attr(feature = "bindings", ts(export))]
pub enum Expression {
Literal(Box<Literal>),
Boolean(BooleanLiteral),
Null(Null),
Identifier(Identifier),
Column(Box<Column>),
Table(Box<TableRef>),
Star(Star),
BracedWildcard(Box<Expression>),
Select(Box<Select>),
Union(Box<Union>),
Intersect(Box<Intersect>),
Except(Box<Except>),
Subquery(Box<Subquery>),
PipeOperator(Box<PipeOperator>),
Pivot(Box<Pivot>),
PivotAlias(Box<PivotAlias>),
Unpivot(Box<Unpivot>),
Values(Box<Values>),
PreWhere(Box<PreWhere>),
Stream(Box<Stream>),
UsingData(Box<UsingData>),
XmlNamespace(Box<XmlNamespace>),
Insert(Box<Insert>),
Update(Box<Update>),
Delete(Box<Delete>),
Copy(Box<CopyStmt>),
Put(Box<PutStmt>),
StageReference(Box<StageReference>),
Alias(Box<Alias>),
Cast(Box<Cast>),
Collation(Box<CollationExpr>),
Case(Box<Case>),
And(Box<BinaryOp>),
Or(Box<BinaryOp>),
Add(Box<BinaryOp>),
Sub(Box<BinaryOp>),
Mul(Box<BinaryOp>),
Div(Box<BinaryOp>),
Mod(Box<BinaryOp>),
Eq(Box<BinaryOp>),
Neq(Box<BinaryOp>),
Lt(Box<BinaryOp>),
Lte(Box<BinaryOp>),
Gt(Box<BinaryOp>),
Gte(Box<BinaryOp>),
Like(Box<LikeOp>),
ILike(Box<LikeOp>),
Match(Box<BinaryOp>),
BitwiseAnd(Box<BinaryOp>),
BitwiseOr(Box<BinaryOp>),
BitwiseXor(Box<BinaryOp>),
Concat(Box<BinaryOp>),
Adjacent(Box<BinaryOp>), TsMatch(Box<BinaryOp>), PropertyEQ(Box<BinaryOp>),
ArrayContainsAll(Box<BinaryOp>), ArrayContainedBy(Box<BinaryOp>), ArrayOverlaps(Box<BinaryOp>), JSONBContainsAllTopKeys(Box<BinaryOp>), JSONBContainsAnyTopKeys(Box<BinaryOp>), JSONBDeleteAtPath(Box<BinaryOp>), ExtendsLeft(Box<BinaryOp>), ExtendsRight(Box<BinaryOp>),
Not(Box<UnaryOp>),
Neg(Box<UnaryOp>),
BitwiseNot(Box<UnaryOp>),
In(Box<In>),
Between(Box<Between>),
IsNull(Box<IsNull>),
IsTrue(Box<IsTrueFalse>),
IsFalse(Box<IsTrueFalse>),
IsJson(Box<IsJson>),
Is(Box<BinaryOp>), Exists(Box<Exists>),
MemberOf(Box<BinaryOp>),
Function(Box<Function>),
AggregateFunction(Box<AggregateFunction>),
WindowFunction(Box<WindowFunction>),
From(Box<From>),
Join(Box<Join>),
JoinedTable(Box<JoinedTable>),
Where(Box<Where>),
GroupBy(Box<GroupBy>),
Having(Box<Having>),
OrderBy(Box<OrderBy>),
Limit(Box<Limit>),
Offset(Box<Offset>),
Qualify(Box<Qualify>),
With(Box<With>),
Cte(Box<Cte>),
DistributeBy(Box<DistributeBy>),
ClusterBy(Box<ClusterBy>),
SortBy(Box<SortBy>),
LateralView(Box<LateralView>),
Hint(Box<Hint>),
Pseudocolumn(Pseudocolumn),
Connect(Box<Connect>),
Prior(Box<Prior>),
ConnectByRoot(Box<ConnectByRoot>),
MatchRecognize(Box<MatchRecognize>),
Ordered(Box<Ordered>),
Window(Box<WindowSpec>),
Over(Box<Over>),
WithinGroup(Box<WithinGroup>),
DataType(DataType),
Array(Box<Array>),
Struct(Box<Struct>),
Tuple(Box<Tuple>),
Interval(Box<Interval>),
ConcatWs(Box<ConcatWs>),
Substring(Box<SubstringFunc>),
Upper(Box<UnaryFunc>),
Lower(Box<UnaryFunc>),
Length(Box<UnaryFunc>),
Trim(Box<TrimFunc>),
LTrim(Box<UnaryFunc>),
RTrim(Box<UnaryFunc>),
Replace(Box<ReplaceFunc>),
Reverse(Box<UnaryFunc>),
Left(Box<LeftRightFunc>),
Right(Box<LeftRightFunc>),
Repeat(Box<RepeatFunc>),
Lpad(Box<PadFunc>),
Rpad(Box<PadFunc>),
Split(Box<SplitFunc>),
RegexpLike(Box<RegexpFunc>),
RegexpReplace(Box<RegexpReplaceFunc>),
RegexpExtract(Box<RegexpExtractFunc>),
Overlay(Box<OverlayFunc>),
Abs(Box<UnaryFunc>),
Round(Box<RoundFunc>),
Floor(Box<FloorFunc>),
Ceil(Box<CeilFunc>),
Power(Box<BinaryFunc>),
Sqrt(Box<UnaryFunc>),
Cbrt(Box<UnaryFunc>),
Ln(Box<UnaryFunc>),
Log(Box<LogFunc>),
Exp(Box<UnaryFunc>),
Sign(Box<UnaryFunc>),
Greatest(Box<VarArgFunc>),
Least(Box<VarArgFunc>),
CurrentDate(CurrentDate),
CurrentTime(CurrentTime),
CurrentTimestamp(CurrentTimestamp),
CurrentTimestampLTZ(CurrentTimestampLTZ),
AtTimeZone(Box<AtTimeZone>),
DateAdd(Box<DateAddFunc>),
DateSub(Box<DateAddFunc>),
DateDiff(Box<DateDiffFunc>),
DateTrunc(Box<DateTruncFunc>),
Extract(Box<ExtractFunc>),
ToDate(Box<ToDateFunc>),
ToTimestamp(Box<ToTimestampFunc>),
Date(Box<UnaryFunc>),
Time(Box<UnaryFunc>),
DateFromUnixDate(Box<UnaryFunc>),
UnixDate(Box<UnaryFunc>),
UnixSeconds(Box<UnaryFunc>),
UnixMillis(Box<UnaryFunc>),
UnixMicros(Box<UnaryFunc>),
UnixToTimeStr(Box<BinaryFunc>),
TimeStrToDate(Box<UnaryFunc>),
DateToDi(Box<UnaryFunc>),
DiToDate(Box<UnaryFunc>),
TsOrDiToDi(Box<UnaryFunc>),
TsOrDsToDatetime(Box<UnaryFunc>),
TsOrDsToTimestamp(Box<UnaryFunc>),
YearOfWeek(Box<UnaryFunc>),
YearOfWeekIso(Box<UnaryFunc>),
Coalesce(Box<VarArgFunc>),
NullIf(Box<BinaryFunc>),
IfFunc(Box<IfFunc>),
IfNull(Box<BinaryFunc>),
Nvl(Box<BinaryFunc>),
Nvl2(Box<Nvl2Func>),
TryCast(Box<Cast>),
SafeCast(Box<Cast>),
Count(Box<CountFunc>),
Sum(Box<AggFunc>),
Avg(Box<AggFunc>),
Min(Box<AggFunc>),
Max(Box<AggFunc>),
GroupConcat(Box<GroupConcatFunc>),
StringAgg(Box<StringAggFunc>),
ListAgg(Box<ListAggFunc>),
ArrayAgg(Box<AggFunc>),
CountIf(Box<AggFunc>),
SumIf(Box<SumIfFunc>),
Stddev(Box<AggFunc>),
StddevPop(Box<AggFunc>),
StddevSamp(Box<AggFunc>),
Variance(Box<AggFunc>),
VarPop(Box<AggFunc>),
VarSamp(Box<AggFunc>),
Median(Box<AggFunc>),
Mode(Box<AggFunc>),
First(Box<AggFunc>),
Last(Box<AggFunc>),
AnyValue(Box<AggFunc>),
ApproxDistinct(Box<AggFunc>),
ApproxCountDistinct(Box<AggFunc>),
ApproxPercentile(Box<ApproxPercentileFunc>),
Percentile(Box<PercentileFunc>),
LogicalAnd(Box<AggFunc>),
LogicalOr(Box<AggFunc>),
Skewness(Box<AggFunc>),
BitwiseCount(Box<UnaryFunc>),
ArrayConcatAgg(Box<AggFunc>),
ArrayUniqueAgg(Box<AggFunc>),
BoolXorAgg(Box<AggFunc>),
RowNumber(RowNumber),
Rank(Rank),
DenseRank(DenseRank),
NTile(Box<NTileFunc>),
Lead(Box<LeadLagFunc>),
Lag(Box<LeadLagFunc>),
FirstValue(Box<ValueFunc>),
LastValue(Box<ValueFunc>),
NthValue(Box<NthValueFunc>),
PercentRank(PercentRank),
CumeDist(CumeDist),
PercentileCont(Box<PercentileFunc>),
PercentileDisc(Box<PercentileFunc>),
Contains(Box<BinaryFunc>),
StartsWith(Box<BinaryFunc>),
EndsWith(Box<BinaryFunc>),
Position(Box<PositionFunc>),
Initcap(Box<UnaryFunc>),
Ascii(Box<UnaryFunc>),
Chr(Box<UnaryFunc>),
CharFunc(Box<CharFunc>),
Soundex(Box<UnaryFunc>),
Levenshtein(Box<BinaryFunc>),
ByteLength(Box<UnaryFunc>),
Hex(Box<UnaryFunc>),
LowerHex(Box<UnaryFunc>),
Unicode(Box<UnaryFunc>),
ModFunc(Box<BinaryFunc>),
Random(Random),
Rand(Box<Rand>),
TruncFunc(Box<TruncateFunc>),
Pi(Pi),
Radians(Box<UnaryFunc>),
Degrees(Box<UnaryFunc>),
Sin(Box<UnaryFunc>),
Cos(Box<UnaryFunc>),
Tan(Box<UnaryFunc>),
Asin(Box<UnaryFunc>),
Acos(Box<UnaryFunc>),
Atan(Box<UnaryFunc>),
Atan2(Box<BinaryFunc>),
IsNan(Box<UnaryFunc>),
IsInf(Box<UnaryFunc>),
IntDiv(Box<BinaryFunc>),
Decode(Box<DecodeFunc>),
DateFormat(Box<DateFormatFunc>),
FormatDate(Box<DateFormatFunc>),
Year(Box<UnaryFunc>),
Month(Box<UnaryFunc>),
Day(Box<UnaryFunc>),
Hour(Box<UnaryFunc>),
Minute(Box<UnaryFunc>),
Second(Box<UnaryFunc>),
DayOfWeek(Box<UnaryFunc>),
DayOfWeekIso(Box<UnaryFunc>),
DayOfMonth(Box<UnaryFunc>),
DayOfYear(Box<UnaryFunc>),
WeekOfYear(Box<UnaryFunc>),
Quarter(Box<UnaryFunc>),
AddMonths(Box<BinaryFunc>),
MonthsBetween(Box<BinaryFunc>),
LastDay(Box<LastDayFunc>),
NextDay(Box<BinaryFunc>),
Epoch(Box<UnaryFunc>),
EpochMs(Box<UnaryFunc>),
FromUnixtime(Box<FromUnixtimeFunc>),
UnixTimestamp(Box<UnixTimestampFunc>),
MakeDate(Box<MakeDateFunc>),
MakeTimestamp(Box<MakeTimestampFunc>),
TimestampTrunc(Box<DateTruncFunc>),
TimeStrToUnix(Box<UnaryFunc>),
SessionUser(SessionUser),
SHA(Box<UnaryFunc>),
SHA1Digest(Box<UnaryFunc>),
TimeToUnix(Box<UnaryFunc>),
ArrayFunc(Box<ArrayConstructor>),
ArrayLength(Box<UnaryFunc>),
ArraySize(Box<UnaryFunc>),
Cardinality(Box<UnaryFunc>),
ArrayContains(Box<BinaryFunc>),
ArrayPosition(Box<BinaryFunc>),
ArrayAppend(Box<BinaryFunc>),
ArrayPrepend(Box<BinaryFunc>),
ArrayConcat(Box<VarArgFunc>),
ArraySort(Box<ArraySortFunc>),
ArrayReverse(Box<UnaryFunc>),
ArrayDistinct(Box<UnaryFunc>),
ArrayJoin(Box<ArrayJoinFunc>),
ArrayToString(Box<ArrayJoinFunc>),
Unnest(Box<UnnestFunc>),
Explode(Box<UnaryFunc>),
ExplodeOuter(Box<UnaryFunc>),
ArrayFilter(Box<ArrayFilterFunc>),
ArrayTransform(Box<ArrayTransformFunc>),
ArrayFlatten(Box<UnaryFunc>),
ArrayCompact(Box<UnaryFunc>),
ArrayIntersect(Box<VarArgFunc>),
ArrayUnion(Box<BinaryFunc>),
ArrayExcept(Box<BinaryFunc>),
ArrayRemove(Box<BinaryFunc>),
ArrayZip(Box<VarArgFunc>),
Sequence(Box<SequenceFunc>),
Generate(Box<SequenceFunc>),
ExplodingGenerateSeries(Box<SequenceFunc>),
ToArray(Box<UnaryFunc>),
StarMap(Box<BinaryFunc>),
StructFunc(Box<StructConstructor>),
StructExtract(Box<StructExtractFunc>),
NamedStruct(Box<NamedStructFunc>),
MapFunc(Box<MapConstructor>),
MapFromEntries(Box<UnaryFunc>),
MapFromArrays(Box<BinaryFunc>),
MapKeys(Box<UnaryFunc>),
MapValues(Box<UnaryFunc>),
MapContainsKey(Box<BinaryFunc>),
MapConcat(Box<VarArgFunc>),
ElementAt(Box<BinaryFunc>),
TransformKeys(Box<TransformFunc>),
TransformValues(Box<TransformFunc>),
FunctionEmits(Box<FunctionEmits>),
JsonExtract(Box<JsonExtractFunc>),
JsonExtractScalar(Box<JsonExtractFunc>),
JsonExtractPath(Box<JsonPathFunc>),
JsonArray(Box<VarArgFunc>),
JsonObject(Box<JsonObjectFunc>),
JsonQuery(Box<JsonExtractFunc>),
JsonValue(Box<JsonExtractFunc>),
JsonArrayLength(Box<UnaryFunc>),
JsonKeys(Box<UnaryFunc>),
JsonType(Box<UnaryFunc>),
ParseJson(Box<UnaryFunc>),
ToJson(Box<UnaryFunc>),
JsonSet(Box<JsonModifyFunc>),
JsonInsert(Box<JsonModifyFunc>),
JsonRemove(Box<JsonPathFunc>),
JsonMergePatch(Box<BinaryFunc>),
JsonArrayAgg(Box<JsonArrayAggFunc>),
JsonObjectAgg(Box<JsonObjectAggFunc>),
Convert(Box<ConvertFunc>),
Typeof(Box<UnaryFunc>),
Lambda(Box<LambdaExpr>),
Parameter(Box<Parameter>),
Placeholder(Placeholder),
NamedArgument(Box<NamedArgument>),
TableArgument(Box<TableArgument>),
SqlComment(Box<SqlComment>),
NullSafeEq(Box<BinaryOp>),
NullSafeNeq(Box<BinaryOp>),
Glob(Box<BinaryOp>),
SimilarTo(Box<SimilarToExpr>),
Any(Box<QuantifiedExpr>),
All(Box<QuantifiedExpr>),
Overlaps(Box<OverlapsExpr>),
BitwiseLeftShift(Box<BinaryOp>),
BitwiseRightShift(Box<BinaryOp>),
BitwiseAndAgg(Box<AggFunc>),
BitwiseOrAgg(Box<AggFunc>),
BitwiseXorAgg(Box<AggFunc>),
Subscript(Box<Subscript>),
Dot(Box<DotAccess>),
MethodCall(Box<MethodCall>),
ArraySlice(Box<ArraySlice>),
CreateTable(Box<CreateTable>),
DropTable(Box<DropTable>),
Undrop(Box<Undrop>),
AlterTable(Box<AlterTable>),
CreateIndex(Box<CreateIndex>),
DropIndex(Box<DropIndex>),
CreateView(Box<CreateView>),
DropView(Box<DropView>),
AlterView(Box<AlterView>),
AlterIndex(Box<AlterIndex>),
Truncate(Box<Truncate>),
Use(Box<Use>),
Cache(Box<Cache>),
Uncache(Box<Uncache>),
LoadData(Box<LoadData>),
Pragma(Box<Pragma>),
Grant(Box<Grant>),
Revoke(Box<Revoke>),
Comment(Box<Comment>),
SetStatement(Box<SetStatement>),
CreateSchema(Box<CreateSchema>),
DropSchema(Box<DropSchema>),
DropNamespace(Box<DropNamespace>),
CreateDatabase(Box<CreateDatabase>),
DropDatabase(Box<DropDatabase>),
CreateFunction(Box<CreateFunction>),
DropFunction(Box<DropFunction>),
CreateProcedure(Box<CreateProcedure>),
DropProcedure(Box<DropProcedure>),
CreateSequence(Box<CreateSequence>),
CreateSynonym(Box<CreateSynonym>),
DropSequence(Box<DropSequence>),
AlterSequence(Box<AlterSequence>),
CreateTrigger(Box<CreateTrigger>),
DropTrigger(Box<DropTrigger>),
CreateType(Box<CreateType>),
DropType(Box<DropType>),
Describe(Box<Describe>),
Show(Box<Show>),
Command(Box<Command>),
Kill(Box<Kill>),
Execute(Box<ExecuteStatement>),
CreateTask(Box<CreateTask>),
Raw(Raw),
Paren(Box<Paren>),
Annotated(Box<Annotated>),
Refresh(Box<Refresh>),
LockingStatement(Box<LockingStatement>),
SequenceProperties(Box<SequenceProperties>),
TruncateTable(Box<TruncateTable>),
Clone(Box<Clone>),
Attach(Box<Attach>),
Detach(Box<Detach>),
Install(Box<Install>),
Summarize(Box<Summarize>),
Declare(Box<Declare>),
DeclareItem(Box<DeclareItem>),
Set(Box<Set>),
Heredoc(Box<Heredoc>),
SetItem(Box<SetItem>),
QueryBand(Box<QueryBand>),
UserDefinedFunction(Box<UserDefinedFunction>),
RecursiveWithSearch(Box<RecursiveWithSearch>),
ProjectionDef(Box<ProjectionDef>),
TableAlias(Box<TableAlias>),
ByteString(Box<ByteString>),
HexStringExpr(Box<HexStringExpr>),
UnicodeString(Box<UnicodeString>),
ColumnPosition(Box<ColumnPosition>),
ColumnDef(Box<ColumnDef>),
AlterColumn(Box<AlterColumn>),
AlterSortKey(Box<AlterSortKey>),
AlterSet(Box<AlterSet>),
RenameColumn(Box<RenameColumn>),
Comprehension(Box<Comprehension>),
MergeTreeTTLAction(Box<MergeTreeTTLAction>),
MergeTreeTTL(Box<MergeTreeTTL>),
IndexConstraintOption(Box<IndexConstraintOption>),
ColumnConstraint(Box<ColumnConstraint>),
PeriodForSystemTimeConstraint(Box<PeriodForSystemTimeConstraint>),
CaseSpecificColumnConstraint(Box<CaseSpecificColumnConstraint>),
CharacterSetColumnConstraint(Box<CharacterSetColumnConstraint>),
CheckColumnConstraint(Box<CheckColumnConstraint>),
AssumeColumnConstraint(Box<AssumeColumnConstraint>),
CompressColumnConstraint(Box<CompressColumnConstraint>),
DateFormatColumnConstraint(Box<DateFormatColumnConstraint>),
EphemeralColumnConstraint(Box<EphemeralColumnConstraint>),
WithOperator(Box<WithOperator>),
GeneratedAsIdentityColumnConstraint(Box<GeneratedAsIdentityColumnConstraint>),
AutoIncrementColumnConstraint(AutoIncrementColumnConstraint),
CommentColumnConstraint(CommentColumnConstraint),
GeneratedAsRowColumnConstraint(Box<GeneratedAsRowColumnConstraint>),
IndexColumnConstraint(Box<IndexColumnConstraint>),
MaskingPolicyColumnConstraint(Box<MaskingPolicyColumnConstraint>),
NotNullColumnConstraint(Box<NotNullColumnConstraint>),
PrimaryKeyColumnConstraint(Box<PrimaryKeyColumnConstraint>),
UniqueColumnConstraint(Box<UniqueColumnConstraint>),
WatermarkColumnConstraint(Box<WatermarkColumnConstraint>),
ComputedColumnConstraint(Box<ComputedColumnConstraint>),
InOutColumnConstraint(Box<InOutColumnConstraint>),
DefaultColumnConstraint(Box<DefaultColumnConstraint>),
PathColumnConstraint(Box<PathColumnConstraint>),
Constraint(Box<Constraint>),
Export(Box<Export>),
Filter(Box<Filter>),
Changes(Box<Changes>),
CopyParameter(Box<CopyParameter>),
Credentials(Box<Credentials>),
Directory(Box<Directory>),
ForeignKey(Box<ForeignKey>),
ColumnPrefix(Box<ColumnPrefix>),
PrimaryKey(Box<PrimaryKey>),
IntoClause(Box<IntoClause>),
JoinHint(Box<JoinHint>),
Opclass(Box<Opclass>),
Index(Box<Index>),
IndexParameters(Box<IndexParameters>),
ConditionalInsert(Box<ConditionalInsert>),
MultitableInserts(Box<MultitableInserts>),
OnConflict(Box<OnConflict>),
OnCondition(Box<OnCondition>),
Returning(Box<Returning>),
Introducer(Box<Introducer>),
PartitionRange(Box<PartitionRange>),
Fetch(Box<Fetch>),
Group(Box<Group>),
Cube(Box<Cube>),
Rollup(Box<Rollup>),
GroupingSets(Box<GroupingSets>),
LimitOptions(Box<LimitOptions>),
Lateral(Box<Lateral>),
TableFromRows(Box<TableFromRows>),
RowsFrom(Box<RowsFrom>),
MatchRecognizeMeasure(Box<MatchRecognizeMeasure>),
WithFill(Box<WithFill>),
Property(Box<Property>),
GrantPrivilege(Box<GrantPrivilege>),
GrantPrincipal(Box<GrantPrincipal>),
AllowedValuesProperty(Box<AllowedValuesProperty>),
AlgorithmProperty(Box<AlgorithmProperty>),
AutoIncrementProperty(Box<AutoIncrementProperty>),
AutoRefreshProperty(Box<AutoRefreshProperty>),
BackupProperty(Box<BackupProperty>),
BuildProperty(Box<BuildProperty>),
BlockCompressionProperty(Box<BlockCompressionProperty>),
CharacterSetProperty(Box<CharacterSetProperty>),
ChecksumProperty(Box<ChecksumProperty>),
CollateProperty(Box<CollateProperty>),
DataBlocksizeProperty(Box<DataBlocksizeProperty>),
DataDeletionProperty(Box<DataDeletionProperty>),
DefinerProperty(Box<DefinerProperty>),
DistKeyProperty(Box<DistKeyProperty>),
DistributedByProperty(Box<DistributedByProperty>),
DistStyleProperty(Box<DistStyleProperty>),
DuplicateKeyProperty(Box<DuplicateKeyProperty>),
EngineProperty(Box<EngineProperty>),
ToTableProperty(Box<ToTableProperty>),
ExecuteAsProperty(Box<ExecuteAsProperty>),
ExternalProperty(Box<ExternalProperty>),
FallbackProperty(Box<FallbackProperty>),
FileFormatProperty(Box<FileFormatProperty>),
CredentialsProperty(Box<CredentialsProperty>),
FreespaceProperty(Box<FreespaceProperty>),
InheritsProperty(Box<InheritsProperty>),
InputModelProperty(Box<InputModelProperty>),
OutputModelProperty(Box<OutputModelProperty>),
IsolatedLoadingProperty(Box<IsolatedLoadingProperty>),
JournalProperty(Box<JournalProperty>),
LanguageProperty(Box<LanguageProperty>),
EnviromentProperty(Box<EnviromentProperty>),
ClusteredByProperty(Box<ClusteredByProperty>),
DictProperty(Box<DictProperty>),
DictRange(Box<DictRange>),
OnCluster(Box<OnCluster>),
LikeProperty(Box<LikeProperty>),
LocationProperty(Box<LocationProperty>),
LockProperty(Box<LockProperty>),
LockingProperty(Box<LockingProperty>),
LogProperty(Box<LogProperty>),
MaterializedProperty(Box<MaterializedProperty>),
MergeBlockRatioProperty(Box<MergeBlockRatioProperty>),
OnProperty(Box<OnProperty>),
OnCommitProperty(Box<OnCommitProperty>),
PartitionedByProperty(Box<PartitionedByProperty>),
PartitionByProperty(Box<PartitionByProperty>),
PartitionedByBucket(Box<PartitionedByBucket>),
ClusterByColumnsProperty(Box<ClusterByColumnsProperty>),
PartitionByTruncate(Box<PartitionByTruncate>),
PartitionByRangeProperty(Box<PartitionByRangeProperty>),
PartitionByRangePropertyDynamic(Box<PartitionByRangePropertyDynamic>),
PartitionByListProperty(Box<PartitionByListProperty>),
PartitionList(Box<PartitionList>),
Partition(Box<Partition>),
RefreshTriggerProperty(Box<RefreshTriggerProperty>),
UniqueKeyProperty(Box<UniqueKeyProperty>),
RollupProperty(Box<RollupProperty>),
PartitionBoundSpec(Box<PartitionBoundSpec>),
PartitionedOfProperty(Box<PartitionedOfProperty>),
RemoteWithConnectionModelProperty(Box<RemoteWithConnectionModelProperty>),
ReturnsProperty(Box<ReturnsProperty>),
RowFormatProperty(Box<RowFormatProperty>),
RowFormatDelimitedProperty(Box<RowFormatDelimitedProperty>),
RowFormatSerdeProperty(Box<RowFormatSerdeProperty>),
QueryTransform(Box<QueryTransform>),
SampleProperty(Box<SampleProperty>),
SecurityProperty(Box<SecurityProperty>),
SchemaCommentProperty(Box<SchemaCommentProperty>),
SemanticView(Box<SemanticView>),
SerdeProperties(Box<SerdeProperties>),
SetProperty(Box<SetProperty>),
SharingProperty(Box<SharingProperty>),
SetConfigProperty(Box<SetConfigProperty>),
SettingsProperty(Box<SettingsProperty>),
SortKeyProperty(Box<SortKeyProperty>),
SqlReadWriteProperty(Box<SqlReadWriteProperty>),
SqlSecurityProperty(Box<SqlSecurityProperty>),
StabilityProperty(Box<StabilityProperty>),
StorageHandlerProperty(Box<StorageHandlerProperty>),
TemporaryProperty(Box<TemporaryProperty>),
Tags(Box<Tags>),
TransformModelProperty(Box<TransformModelProperty>),
TransientProperty(Box<TransientProperty>),
UsingTemplateProperty(Box<UsingTemplateProperty>),
ViewAttributeProperty(Box<ViewAttributeProperty>),
VolatileProperty(Box<VolatileProperty>),
WithDataProperty(Box<WithDataProperty>),
WithJournalTableProperty(Box<WithJournalTableProperty>),
WithSchemaBindingProperty(Box<WithSchemaBindingProperty>),
WithSystemVersioningProperty(Box<WithSystemVersioningProperty>),
WithProcedureOptions(Box<WithProcedureOptions>),
EncodeProperty(Box<EncodeProperty>),
IncludeProperty(Box<IncludeProperty>),
Properties(Box<Properties>),
OptionsProperty(Box<OptionsProperty>),
InputOutputFormat(Box<InputOutputFormat>),
Reference(Box<Reference>),
QueryOption(Box<QueryOption>),
WithTableHint(Box<WithTableHint>),
IndexTableHint(Box<IndexTableHint>),
HistoricalData(Box<HistoricalData>),
Get(Box<Get>),
SetOperation(Box<SetOperation>),
Var(Box<Var>),
Variadic(Box<Variadic>),
Version(Box<Version>),
Schema(Box<Schema>),
Lock(Box<Lock>),
TableSample(Box<TableSample>),
Tag(Box<Tag>),
UnpivotColumns(Box<UnpivotColumns>),
WindowSpec(Box<WindowSpec>),
SessionParameter(Box<SessionParameter>),
PseudoType(Box<PseudoType>),
ObjectIdentifier(Box<ObjectIdentifier>),
Transaction(Box<Transaction>),
Commit(Box<Commit>),
Rollback(Box<Rollback>),
AlterSession(Box<AlterSession>),
Analyze(Box<Analyze>),
AnalyzeStatistics(Box<AnalyzeStatistics>),
AnalyzeHistogram(Box<AnalyzeHistogram>),
AnalyzeSample(Box<AnalyzeSample>),
AnalyzeListChainedRows(Box<AnalyzeListChainedRows>),
AnalyzeDelete(Box<AnalyzeDelete>),
AnalyzeWith(Box<AnalyzeWith>),
AnalyzeValidate(Box<AnalyzeValidate>),
AddPartition(Box<AddPartition>),
AttachOption(Box<AttachOption>),
DropPartition(Box<DropPartition>),
ReplacePartition(Box<ReplacePartition>),
DPipe(Box<DPipe>),
Operator(Box<Operator>),
PivotAny(Box<PivotAny>),
Aliases(Box<Aliases>),
AtIndex(Box<AtIndex>),
FromTimeZone(Box<FromTimeZone>),
FormatPhrase(Box<FormatPhrase>),
ForIn(Box<ForIn>),
TimeUnit(Box<TimeUnit>),
IntervalOp(Box<IntervalOp>),
IntervalSpan(Box<IntervalSpan>),
HavingMax(Box<HavingMax>),
CosineDistance(Box<CosineDistance>),
DotProduct(Box<DotProduct>),
EuclideanDistance(Box<EuclideanDistance>),
ManhattanDistance(Box<ManhattanDistance>),
JarowinklerSimilarity(Box<JarowinklerSimilarity>),
Booland(Box<Booland>),
Boolor(Box<Boolor>),
ParameterizedAgg(Box<ParameterizedAgg>),
ArgMax(Box<ArgMax>),
ArgMin(Box<ArgMin>),
ApproxTopK(Box<ApproxTopK>),
ApproxTopKAccumulate(Box<ApproxTopKAccumulate>),
ApproxTopKCombine(Box<ApproxTopKCombine>),
ApproxTopKEstimate(Box<ApproxTopKEstimate>),
ApproxTopSum(Box<ApproxTopSum>),
ApproxQuantiles(Box<ApproxQuantiles>),
Minhash(Box<Minhash>),
FarmFingerprint(Box<FarmFingerprint>),
Float64(Box<Float64>),
Transform(Box<Transform>),
Translate(Box<Translate>),
Grouping(Box<Grouping>),
GroupingId(Box<GroupingId>),
Anonymous(Box<Anonymous>),
AnonymousAggFunc(Box<AnonymousAggFunc>),
CombinedAggFunc(Box<CombinedAggFunc>),
CombinedParameterizedAgg(Box<CombinedParameterizedAgg>),
HashAgg(Box<HashAgg>),
Hll(Box<Hll>),
Apply(Box<Apply>),
ToBoolean(Box<ToBoolean>),
List(Box<List>),
ToMap(Box<ToMap>),
Pad(Box<Pad>),
ToChar(Box<ToChar>),
ToNumber(Box<ToNumber>),
ToDouble(Box<ToDouble>),
Int64(Box<UnaryFunc>),
StringFunc(Box<StringFunc>),
ToDecfloat(Box<ToDecfloat>),
TryToDecfloat(Box<TryToDecfloat>),
ToFile(Box<ToFile>),
Columns(Box<Columns>),
ConvertToCharset(Box<ConvertToCharset>),
ConvertTimezone(Box<ConvertTimezone>),
GenerateSeries(Box<GenerateSeries>),
AIAgg(Box<AIAgg>),
AIClassify(Box<AIClassify>),
ArrayAll(Box<ArrayAll>),
ArrayAny(Box<ArrayAny>),
ArrayConstructCompact(Box<ArrayConstructCompact>),
StPoint(Box<StPoint>),
StDistance(Box<StDistance>),
StringToArray(Box<StringToArray>),
ArraySum(Box<ArraySum>),
ObjectAgg(Box<ObjectAgg>),
CastToStrType(Box<CastToStrType>),
CheckJson(Box<CheckJson>),
CheckXml(Box<CheckXml>),
TranslateCharacters(Box<TranslateCharacters>),
CurrentSchemas(Box<CurrentSchemas>),
CurrentDatetime(Box<CurrentDatetime>),
Localtime(Box<Localtime>),
Localtimestamp(Box<Localtimestamp>),
Systimestamp(Box<Systimestamp>),
CurrentSchema(Box<CurrentSchema>),
CurrentUser(Box<CurrentUser>),
UtcTime(Box<UtcTime>),
UtcTimestamp(Box<UtcTimestamp>),
Timestamp(Box<TimestampFunc>),
DateBin(Box<DateBin>),
Datetime(Box<Datetime>),
DatetimeAdd(Box<DatetimeAdd>),
DatetimeSub(Box<DatetimeSub>),
DatetimeDiff(Box<DatetimeDiff>),
DatetimeTrunc(Box<DatetimeTrunc>),
Dayname(Box<Dayname>),
MakeInterval(Box<MakeInterval>),
PreviousDay(Box<PreviousDay>),
Elt(Box<Elt>),
TimestampAdd(Box<TimestampAdd>),
TimestampSub(Box<TimestampSub>),
TimestampDiff(Box<TimestampDiff>),
TimeSlice(Box<TimeSlice>),
TimeAdd(Box<TimeAdd>),
TimeSub(Box<TimeSub>),
TimeDiff(Box<TimeDiff>),
TimeTrunc(Box<TimeTrunc>),
DateFromParts(Box<DateFromParts>),
TimeFromParts(Box<TimeFromParts>),
DecodeCase(Box<DecodeCase>),
Decrypt(Box<Decrypt>),
DecryptRaw(Box<DecryptRaw>),
Encode(Box<Encode>),
Encrypt(Box<Encrypt>),
EncryptRaw(Box<EncryptRaw>),
EqualNull(Box<EqualNull>),
ToBinary(Box<ToBinary>),
Base64DecodeBinary(Box<Base64DecodeBinary>),
Base64DecodeString(Box<Base64DecodeString>),
Base64Encode(Box<Base64Encode>),
TryBase64DecodeBinary(Box<TryBase64DecodeBinary>),
TryBase64DecodeString(Box<TryBase64DecodeString>),
GapFill(Box<GapFill>),
GenerateDateArray(Box<GenerateDateArray>),
GenerateTimestampArray(Box<GenerateTimestampArray>),
GetExtract(Box<GetExtract>),
Getbit(Box<Getbit>),
OverflowTruncateBehavior(Box<OverflowTruncateBehavior>),
HexEncode(Box<HexEncode>),
Compress(Box<Compress>),
DecompressBinary(Box<DecompressBinary>),
DecompressString(Box<DecompressString>),
Xor(Box<Xor>),
Nullif(Box<Nullif>),
JSON(Box<JSON>),
JSONPath(Box<JSONPath>),
JSONPathFilter(Box<JSONPathFilter>),
JSONPathKey(Box<JSONPathKey>),
JSONPathRecursive(Box<JSONPathRecursive>),
JSONPathScript(Box<JSONPathScript>),
JSONPathSlice(Box<JSONPathSlice>),
JSONPathSelector(Box<JSONPathSelector>),
JSONPathSubscript(Box<JSONPathSubscript>),
JSONPathUnion(Box<JSONPathUnion>),
Format(Box<Format>),
JSONKeys(Box<JSONKeys>),
JSONKeyValue(Box<JSONKeyValue>),
JSONKeysAtDepth(Box<JSONKeysAtDepth>),
JSONObject(Box<JSONObject>),
JSONObjectAgg(Box<JSONObjectAgg>),
JSONBObjectAgg(Box<JSONBObjectAgg>),
JSONArray(Box<JSONArray>),
JSONArrayAgg(Box<JSONArrayAgg>),
JSONExists(Box<JSONExists>),
JSONColumnDef(Box<JSONColumnDef>),
JSONSchema(Box<JSONSchema>),
JSONSet(Box<JSONSet>),
JSONStripNulls(Box<JSONStripNulls>),
JSONValue(Box<JSONValue>),
JSONValueArray(Box<JSONValueArray>),
JSONRemove(Box<JSONRemove>),
JSONTable(Box<JSONTable>),
JSONType(Box<JSONType>),
ObjectInsert(Box<ObjectInsert>),
OpenJSONColumnDef(Box<OpenJSONColumnDef>),
OpenJSON(Box<OpenJSON>),
JSONBExists(Box<JSONBExists>),
JSONBContains(Box<BinaryFunc>),
JSONBExtract(Box<BinaryFunc>),
JSONCast(Box<JSONCast>),
JSONExtract(Box<JSONExtract>),
JSONExtractQuote(Box<JSONExtractQuote>),
JSONExtractArray(Box<JSONExtractArray>),
JSONExtractScalar(Box<JSONExtractScalar>),
JSONBExtractScalar(Box<JSONBExtractScalar>),
JSONFormat(Box<JSONFormat>),
JSONBool(Box<UnaryFunc>),
JSONPathRoot(JSONPathRoot),
JSONArrayAppend(Box<JSONArrayAppend>),
JSONArrayContains(Box<JSONArrayContains>),
JSONArrayInsert(Box<JSONArrayInsert>),
ParseJSON(Box<ParseJSON>),
ParseUrl(Box<ParseUrl>),
ParseIp(Box<ParseIp>),
ParseTime(Box<ParseTime>),
ParseDatetime(Box<ParseDatetime>),
Map(Box<Map>),
MapCat(Box<MapCat>),
MapDelete(Box<MapDelete>),
MapInsert(Box<MapInsert>),
MapPick(Box<MapPick>),
ScopeResolution(Box<ScopeResolution>),
Slice(Box<Slice>),
VarMap(Box<VarMap>),
MatchAgainst(Box<MatchAgainst>),
MD5Digest(Box<MD5Digest>),
MD5NumberLower64(Box<UnaryFunc>),
MD5NumberUpper64(Box<UnaryFunc>),
Monthname(Box<Monthname>),
Ntile(Box<Ntile>),
Normalize(Box<Normalize>),
Normal(Box<Normal>),
Predict(Box<Predict>),
MLTranslate(Box<MLTranslate>),
FeaturesAtTime(Box<FeaturesAtTime>),
GenerateEmbedding(Box<GenerateEmbedding>),
MLForecast(Box<MLForecast>),
ModelAttribute(Box<ModelAttribute>),
VectorSearch(Box<VectorSearch>),
Quantile(Box<Quantile>),
ApproxQuantile(Box<ApproxQuantile>),
ApproxPercentileEstimate(Box<ApproxPercentileEstimate>),
Randn(Box<Randn>),
Randstr(Box<Randstr>),
RangeN(Box<RangeN>),
RangeBucket(Box<RangeBucket>),
ReadCSV(Box<ReadCSV>),
ReadParquet(Box<ReadParquet>),
Reduce(Box<Reduce>),
RegexpExtractAll(Box<RegexpExtractAll>),
RegexpILike(Box<RegexpILike>),
RegexpFullMatch(Box<RegexpFullMatch>),
RegexpInstr(Box<RegexpInstr>),
RegexpSplit(Box<RegexpSplit>),
RegexpCount(Box<RegexpCount>),
RegrValx(Box<RegrValx>),
RegrValy(Box<RegrValy>),
RegrAvgy(Box<RegrAvgy>),
RegrAvgx(Box<RegrAvgx>),
RegrCount(Box<RegrCount>),
RegrIntercept(Box<RegrIntercept>),
RegrR2(Box<RegrR2>),
RegrSxx(Box<RegrSxx>),
RegrSxy(Box<RegrSxy>),
RegrSyy(Box<RegrSyy>),
RegrSlope(Box<RegrSlope>),
SafeAdd(Box<SafeAdd>),
SafeDivide(Box<SafeDivide>),
SafeMultiply(Box<SafeMultiply>),
SafeSubtract(Box<SafeSubtract>),
SHA2(Box<SHA2>),
SHA2Digest(Box<SHA2Digest>),
SortArray(Box<SortArray>),
SplitPart(Box<SplitPart>),
SubstringIndex(Box<SubstringIndex>),
StandardHash(Box<StandardHash>),
StrPosition(Box<StrPosition>),
Search(Box<Search>),
SearchIp(Box<SearchIp>),
StrToDate(Box<StrToDate>),
DateStrToDate(Box<UnaryFunc>),
DateToDateStr(Box<UnaryFunc>),
StrToTime(Box<StrToTime>),
StrToUnix(Box<StrToUnix>),
StrToMap(Box<StrToMap>),
NumberToStr(Box<NumberToStr>),
FromBase(Box<FromBase>),
Stuff(Box<Stuff>),
TimeToStr(Box<TimeToStr>),
TimeStrToTime(Box<TimeStrToTime>),
TsOrDsAdd(Box<TsOrDsAdd>),
TsOrDsDiff(Box<TsOrDsDiff>),
TsOrDsToDate(Box<TsOrDsToDate>),
TsOrDsToTime(Box<TsOrDsToTime>),
Unhex(Box<Unhex>),
Uniform(Box<Uniform>),
UnixToStr(Box<UnixToStr>),
UnixToTime(Box<UnixToTime>),
Uuid(Box<Uuid>),
TimestampFromParts(Box<TimestampFromParts>),
TimestampTzFromParts(Box<TimestampTzFromParts>),
Corr(Box<Corr>),
WidthBucket(Box<WidthBucket>),
CovarSamp(Box<CovarSamp>),
CovarPop(Box<CovarPop>),
Week(Box<Week>),
XMLElement(Box<XMLElement>),
XMLGet(Box<XMLGet>),
XMLTable(Box<XMLTable>),
XMLKeyValueOption(Box<XMLKeyValueOption>),
Zipf(Box<Zipf>),
Merge(Box<Merge>),
When(Box<When>),
Whens(Box<Whens>),
NextValueFor(Box<NextValueFor>),
ReturnStmt(Box<Expression>),
}
impl Expression {
#[inline]
pub fn boxed_column(col: Column) -> Self {
Expression::Column(Box::new(col))
}
#[inline]
pub fn boxed_table(t: TableRef) -> Self {
Expression::Table(Box::new(t))
}
pub fn is_statement(&self) -> bool {
match self {
Expression::Select(_)
| Expression::Union(_)
| Expression::Intersect(_)
| Expression::Except(_)
| Expression::Subquery(_)
| Expression::Values(_)
| Expression::PipeOperator(_)
| Expression::Insert(_)
| Expression::Update(_)
| Expression::Delete(_)
| Expression::Copy(_)
| Expression::Put(_)
| Expression::Merge(_)
| Expression::CreateTable(_)
| Expression::DropTable(_)
| Expression::Undrop(_)
| Expression::AlterTable(_)
| Expression::CreateIndex(_)
| Expression::DropIndex(_)
| Expression::CreateView(_)
| Expression::DropView(_)
| Expression::AlterView(_)
| Expression::AlterIndex(_)
| Expression::Truncate(_)
| Expression::TruncateTable(_)
| Expression::CreateSchema(_)
| Expression::DropSchema(_)
| Expression::DropNamespace(_)
| Expression::CreateDatabase(_)
| Expression::DropDatabase(_)
| Expression::CreateFunction(_)
| Expression::DropFunction(_)
| Expression::CreateProcedure(_)
| Expression::DropProcedure(_)
| Expression::CreateSequence(_)
| Expression::CreateSynonym(_)
| Expression::DropSequence(_)
| Expression::AlterSequence(_)
| Expression::CreateTrigger(_)
| Expression::DropTrigger(_)
| Expression::CreateType(_)
| Expression::DropType(_)
| Expression::Comment(_)
| Expression::Use(_)
| Expression::Set(_)
| Expression::SetStatement(_)
| Expression::Transaction(_)
| Expression::Commit(_)
| Expression::Rollback(_)
| Expression::Grant(_)
| Expression::Revoke(_)
| Expression::Cache(_)
| Expression::Uncache(_)
| Expression::LoadData(_)
| Expression::Pragma(_)
| Expression::Describe(_)
| Expression::Show(_)
| Expression::Kill(_)
| Expression::Execute(_)
| Expression::Declare(_)
| Expression::Refresh(_)
| Expression::AlterSession(_)
| Expression::LockingStatement(_)
| Expression::Analyze(_)
| Expression::AnalyzeStatistics(_)
| Expression::AnalyzeHistogram(_)
| Expression::AnalyzeSample(_)
| Expression::AnalyzeListChainedRows(_)
| Expression::AnalyzeDelete(_)
| Expression::Attach(_)
| Expression::Detach(_)
| Expression::Install(_)
| Expression::Summarize(_)
| Expression::Pivot(_)
| Expression::Unpivot(_)
| Expression::Command(_)
| Expression::Raw(_)
| Expression::CreateTask(_)
| Expression::ReturnStmt(_) => true,
Expression::Annotated(a) => a.this.is_statement(),
Expression::Alias(a) => a.this.is_statement(),
_ => false,
}
}
pub fn number(n: i64) -> Self {
Expression::Literal(Box::new(Literal::Number(n.to_string())))
}
pub fn string(s: impl Into<String>) -> Self {
Expression::Literal(Box::new(Literal::String(s.into())))
}
pub fn float(f: f64) -> Self {
Expression::Literal(Box::new(Literal::Number(f.to_string())))
}
pub fn inferred_type(&self) -> Option<&DataType> {
match self {
Expression::And(op)
| Expression::Or(op)
| Expression::Add(op)
| Expression::Sub(op)
| Expression::Mul(op)
| Expression::Div(op)
| Expression::Mod(op)
| Expression::Eq(op)
| Expression::Neq(op)
| Expression::Lt(op)
| Expression::Lte(op)
| Expression::Gt(op)
| Expression::Gte(op)
| Expression::Concat(op)
| Expression::BitwiseAnd(op)
| Expression::BitwiseOr(op)
| Expression::BitwiseXor(op)
| Expression::Adjacent(op)
| Expression::TsMatch(op)
| Expression::PropertyEQ(op)
| Expression::ArrayContainsAll(op)
| Expression::ArrayContainedBy(op)
| Expression::ArrayOverlaps(op)
| Expression::JSONBContainsAllTopKeys(op)
| Expression::JSONBContainsAnyTopKeys(op)
| Expression::JSONBDeleteAtPath(op)
| Expression::ExtendsLeft(op)
| Expression::ExtendsRight(op)
| Expression::Is(op)
| Expression::MemberOf(op)
| Expression::Match(op)
| Expression::NullSafeEq(op)
| Expression::NullSafeNeq(op)
| Expression::Glob(op)
| Expression::BitwiseLeftShift(op)
| Expression::BitwiseRightShift(op) => op.inferred_type.as_ref(),
Expression::Not(op) | Expression::Neg(op) | Expression::BitwiseNot(op) => {
op.inferred_type.as_ref()
}
Expression::Like(op) | Expression::ILike(op) => op.inferred_type.as_ref(),
Expression::Cast(c) | Expression::TryCast(c) | Expression::SafeCast(c) => {
c.inferred_type.as_ref()
}
Expression::Column(c) => c.inferred_type.as_ref(),
Expression::Function(f) => f.inferred_type.as_ref(),
Expression::AggregateFunction(f) => f.inferred_type.as_ref(),
Expression::WindowFunction(f) => f.inferred_type.as_ref(),
Expression::Case(c) => c.inferred_type.as_ref(),
Expression::Subquery(s) => s.inferred_type.as_ref(),
Expression::Alias(a) => a.inferred_type.as_ref(),
Expression::IfFunc(f) => f.inferred_type.as_ref(),
Expression::Nvl2(f) => f.inferred_type.as_ref(),
Expression::Count(f) => f.inferred_type.as_ref(),
Expression::GroupConcat(f) => f.inferred_type.as_ref(),
Expression::StringAgg(f) => f.inferred_type.as_ref(),
Expression::ListAgg(f) => f.inferred_type.as_ref(),
Expression::SumIf(f) => f.inferred_type.as_ref(),
Expression::Upper(f)
| Expression::Lower(f)
| Expression::Length(f)
| Expression::LTrim(f)
| Expression::RTrim(f)
| Expression::Reverse(f)
| Expression::Abs(f)
| Expression::Sqrt(f)
| Expression::Cbrt(f)
| Expression::Ln(f)
| Expression::Exp(f)
| Expression::Sign(f)
| Expression::Date(f)
| Expression::Time(f)
| Expression::Initcap(f)
| Expression::Ascii(f)
| Expression::Chr(f)
| Expression::Soundex(f)
| Expression::ByteLength(f)
| Expression::Hex(f)
| Expression::LowerHex(f)
| Expression::Unicode(f)
| Expression::Typeof(f)
| Expression::Explode(f)
| Expression::ExplodeOuter(f)
| Expression::MapFromEntries(f)
| Expression::MapKeys(f)
| Expression::MapValues(f)
| Expression::ArrayLength(f)
| Expression::ArraySize(f)
| Expression::Cardinality(f)
| Expression::ArrayReverse(f)
| Expression::ArrayDistinct(f)
| Expression::ArrayFlatten(f)
| Expression::ArrayCompact(f)
| Expression::ToArray(f)
| Expression::JsonArrayLength(f)
| Expression::JsonKeys(f)
| Expression::JsonType(f)
| Expression::ParseJson(f)
| Expression::ToJson(f)
| Expression::Radians(f)
| Expression::Degrees(f)
| Expression::Sin(f)
| Expression::Cos(f)
| Expression::Tan(f)
| Expression::Asin(f)
| Expression::Acos(f)
| Expression::Atan(f)
| Expression::IsNan(f)
| Expression::IsInf(f)
| Expression::Year(f)
| Expression::Month(f)
| Expression::Day(f)
| Expression::Hour(f)
| Expression::Minute(f)
| Expression::Second(f)
| Expression::DayOfWeek(f)
| Expression::DayOfWeekIso(f)
| Expression::DayOfMonth(f)
| Expression::DayOfYear(f)
| Expression::WeekOfYear(f)
| Expression::Quarter(f)
| Expression::Epoch(f)
| Expression::EpochMs(f)
| Expression::BitwiseCount(f)
| Expression::DateFromUnixDate(f)
| Expression::UnixDate(f)
| Expression::UnixSeconds(f)
| Expression::UnixMillis(f)
| Expression::UnixMicros(f)
| Expression::TimeStrToDate(f)
| Expression::DateToDi(f)
| Expression::DiToDate(f)
| Expression::TsOrDiToDi(f)
| Expression::TsOrDsToDatetime(f)
| Expression::TsOrDsToTimestamp(f)
| Expression::YearOfWeek(f)
| Expression::YearOfWeekIso(f)
| Expression::SHA(f)
| Expression::SHA1Digest(f)
| Expression::TimeToUnix(f)
| Expression::TimeStrToUnix(f) => f.inferred_type.as_ref(),
Expression::Power(f)
| Expression::NullIf(f)
| Expression::IfNull(f)
| Expression::Nvl(f)
| Expression::Contains(f)
| Expression::StartsWith(f)
| Expression::EndsWith(f)
| Expression::Levenshtein(f)
| Expression::ModFunc(f)
| Expression::IntDiv(f)
| Expression::Atan2(f)
| Expression::AddMonths(f)
| Expression::MonthsBetween(f)
| Expression::NextDay(f)
| Expression::UnixToTimeStr(f)
| Expression::ArrayContains(f)
| Expression::ArrayPosition(f)
| Expression::ArrayAppend(f)
| Expression::ArrayPrepend(f)
| Expression::ArrayUnion(f)
| Expression::ArrayExcept(f)
| Expression::ArrayRemove(f)
| Expression::StarMap(f)
| Expression::MapFromArrays(f)
| Expression::MapContainsKey(f)
| Expression::ElementAt(f)
| Expression::JsonMergePatch(f) => f.inferred_type.as_ref(),
Expression::Coalesce(f)
| Expression::Greatest(f)
| Expression::Least(f)
| Expression::ArrayConcat(f)
| Expression::ArrayIntersect(f)
| Expression::ArrayZip(f)
| Expression::MapConcat(f)
| Expression::JsonArray(f) => f.inferred_type.as_ref(),
Expression::Sum(f)
| Expression::Avg(f)
| Expression::Min(f)
| Expression::Max(f)
| Expression::ArrayAgg(f)
| Expression::CountIf(f)
| Expression::Stddev(f)
| Expression::StddevPop(f)
| Expression::StddevSamp(f)
| Expression::Variance(f)
| Expression::VarPop(f)
| Expression::VarSamp(f)
| Expression::Median(f)
| Expression::Mode(f)
| Expression::First(f)
| Expression::Last(f)
| Expression::AnyValue(f)
| Expression::ApproxDistinct(f)
| Expression::ApproxCountDistinct(f)
| Expression::LogicalAnd(f)
| Expression::LogicalOr(f)
| Expression::Skewness(f)
| Expression::ArrayConcatAgg(f)
| Expression::ArrayUniqueAgg(f)
| Expression::BoolXorAgg(f)
| Expression::BitwiseAndAgg(f)
| Expression::BitwiseOrAgg(f)
| Expression::BitwiseXorAgg(f) => f.inferred_type.as_ref(),
_ => None,
}
}
pub fn set_inferred_type(&mut self, dt: DataType) {
match self {
Expression::And(op)
| Expression::Or(op)
| Expression::Add(op)
| Expression::Sub(op)
| Expression::Mul(op)
| Expression::Div(op)
| Expression::Mod(op)
| Expression::Eq(op)
| Expression::Neq(op)
| Expression::Lt(op)
| Expression::Lte(op)
| Expression::Gt(op)
| Expression::Gte(op)
| Expression::Concat(op)
| Expression::BitwiseAnd(op)
| Expression::BitwiseOr(op)
| Expression::BitwiseXor(op)
| Expression::Adjacent(op)
| Expression::TsMatch(op)
| Expression::PropertyEQ(op)
| Expression::ArrayContainsAll(op)
| Expression::ArrayContainedBy(op)
| Expression::ArrayOverlaps(op)
| Expression::JSONBContainsAllTopKeys(op)
| Expression::JSONBContainsAnyTopKeys(op)
| Expression::JSONBDeleteAtPath(op)
| Expression::ExtendsLeft(op)
| Expression::ExtendsRight(op)
| Expression::Is(op)
| Expression::MemberOf(op)
| Expression::Match(op)
| Expression::NullSafeEq(op)
| Expression::NullSafeNeq(op)
| Expression::Glob(op)
| Expression::BitwiseLeftShift(op)
| Expression::BitwiseRightShift(op) => op.inferred_type = Some(dt),
Expression::Not(op) | Expression::Neg(op) | Expression::BitwiseNot(op) => {
op.inferred_type = Some(dt)
}
Expression::Like(op) | Expression::ILike(op) => op.inferred_type = Some(dt),
Expression::Cast(c) | Expression::TryCast(c) | Expression::SafeCast(c) => {
c.inferred_type = Some(dt)
}
Expression::Column(c) => c.inferred_type = Some(dt),
Expression::Function(f) => f.inferred_type = Some(dt),
Expression::AggregateFunction(f) => f.inferred_type = Some(dt),
Expression::WindowFunction(f) => f.inferred_type = Some(dt),
Expression::Case(c) => c.inferred_type = Some(dt),
Expression::Subquery(s) => s.inferred_type = Some(dt),
Expression::Alias(a) => a.inferred_type = Some(dt),
Expression::IfFunc(f) => f.inferred_type = Some(dt),
Expression::Nvl2(f) => f.inferred_type = Some(dt),
Expression::Count(f) => f.inferred_type = Some(dt),
Expression::GroupConcat(f) => f.inferred_type = Some(dt),
Expression::StringAgg(f) => f.inferred_type = Some(dt),
Expression::ListAgg(f) => f.inferred_type = Some(dt),
Expression::SumIf(f) => f.inferred_type = Some(dt),
Expression::Upper(f)
| Expression::Lower(f)
| Expression::Length(f)
| Expression::LTrim(f)
| Expression::RTrim(f)
| Expression::Reverse(f)
| Expression::Abs(f)
| Expression::Sqrt(f)
| Expression::Cbrt(f)
| Expression::Ln(f)
| Expression::Exp(f)
| Expression::Sign(f)
| Expression::Date(f)
| Expression::Time(f)
| Expression::Initcap(f)
| Expression::Ascii(f)
| Expression::Chr(f)
| Expression::Soundex(f)
| Expression::ByteLength(f)
| Expression::Hex(f)
| Expression::LowerHex(f)
| Expression::Unicode(f)
| Expression::Typeof(f)
| Expression::Explode(f)
| Expression::ExplodeOuter(f)
| Expression::MapFromEntries(f)
| Expression::MapKeys(f)
| Expression::MapValues(f)
| Expression::ArrayLength(f)
| Expression::ArraySize(f)
| Expression::Cardinality(f)
| Expression::ArrayReverse(f)
| Expression::ArrayDistinct(f)
| Expression::ArrayFlatten(f)
| Expression::ArrayCompact(f)
| Expression::ToArray(f)
| Expression::JsonArrayLength(f)
| Expression::JsonKeys(f)
| Expression::JsonType(f)
| Expression::ParseJson(f)
| Expression::ToJson(f)
| Expression::Radians(f)
| Expression::Degrees(f)
| Expression::Sin(f)
| Expression::Cos(f)
| Expression::Tan(f)
| Expression::Asin(f)
| Expression::Acos(f)
| Expression::Atan(f)
| Expression::IsNan(f)
| Expression::IsInf(f)
| Expression::Year(f)
| Expression::Month(f)
| Expression::Day(f)
| Expression::Hour(f)
| Expression::Minute(f)
| Expression::Second(f)
| Expression::DayOfWeek(f)
| Expression::DayOfWeekIso(f)
| Expression::DayOfMonth(f)
| Expression::DayOfYear(f)
| Expression::WeekOfYear(f)
| Expression::Quarter(f)
| Expression::Epoch(f)
| Expression::EpochMs(f)
| Expression::BitwiseCount(f)
| Expression::DateFromUnixDate(f)
| Expression::UnixDate(f)
| Expression::UnixSeconds(f)
| Expression::UnixMillis(f)
| Expression::UnixMicros(f)
| Expression::TimeStrToDate(f)
| Expression::DateToDi(f)
| Expression::DiToDate(f)
| Expression::TsOrDiToDi(f)
| Expression::TsOrDsToDatetime(f)
| Expression::TsOrDsToTimestamp(f)
| Expression::YearOfWeek(f)
| Expression::YearOfWeekIso(f)
| Expression::SHA(f)
| Expression::SHA1Digest(f)
| Expression::TimeToUnix(f)
| Expression::TimeStrToUnix(f) => f.inferred_type = Some(dt),
Expression::Power(f)
| Expression::NullIf(f)
| Expression::IfNull(f)
| Expression::Nvl(f)
| Expression::Contains(f)
| Expression::StartsWith(f)
| Expression::EndsWith(f)
| Expression::Levenshtein(f)
| Expression::ModFunc(f)
| Expression::IntDiv(f)
| Expression::Atan2(f)
| Expression::AddMonths(f)
| Expression::MonthsBetween(f)
| Expression::NextDay(f)
| Expression::UnixToTimeStr(f)
| Expression::ArrayContains(f)
| Expression::ArrayPosition(f)
| Expression::ArrayAppend(f)
| Expression::ArrayPrepend(f)
| Expression::ArrayUnion(f)
| Expression::ArrayExcept(f)
| Expression::ArrayRemove(f)
| Expression::StarMap(f)
| Expression::MapFromArrays(f)
| Expression::MapContainsKey(f)
| Expression::ElementAt(f)
| Expression::JsonMergePatch(f) => f.inferred_type = Some(dt),
Expression::Coalesce(f)
| Expression::Greatest(f)
| Expression::Least(f)
| Expression::ArrayConcat(f)
| Expression::ArrayIntersect(f)
| Expression::ArrayZip(f)
| Expression::MapConcat(f)
| Expression::JsonArray(f) => f.inferred_type = Some(dt),
Expression::Sum(f)
| Expression::Avg(f)
| Expression::Min(f)
| Expression::Max(f)
| Expression::ArrayAgg(f)
| Expression::CountIf(f)
| Expression::Stddev(f)
| Expression::StddevPop(f)
| Expression::StddevSamp(f)
| Expression::Variance(f)
| Expression::VarPop(f)
| Expression::VarSamp(f)
| Expression::Median(f)
| Expression::Mode(f)
| Expression::First(f)
| Expression::Last(f)
| Expression::AnyValue(f)
| Expression::ApproxDistinct(f)
| Expression::ApproxCountDistinct(f)
| Expression::LogicalAnd(f)
| Expression::LogicalOr(f)
| Expression::Skewness(f)
| Expression::ArrayConcatAgg(f)
| Expression::ArrayUniqueAgg(f)
| Expression::BoolXorAgg(f)
| Expression::BitwiseAndAgg(f)
| Expression::BitwiseOrAgg(f)
| Expression::BitwiseXorAgg(f) => f.inferred_type = Some(dt),
_ => {}
}
}
pub fn column(name: impl Into<String>) -> Self {
Expression::Column(Box::new(Column {
name: Identifier::new(name),
table: None,
join_mark: false,
trailing_comments: Vec::new(),
span: None,
inferred_type: None,
}))
}
pub fn qualified_column(table: impl Into<String>, column: impl Into<String>) -> Self {
Expression::Column(Box::new(Column {
name: Identifier::new(column),
table: Some(Identifier::new(table)),
join_mark: false,
trailing_comments: Vec::new(),
span: None,
inferred_type: None,
}))
}
pub fn identifier(name: impl Into<String>) -> Self {
Expression::Identifier(Identifier::new(name))
}
pub fn null() -> Self {
Expression::Null(Null)
}
pub fn true_() -> Self {
Expression::Boolean(BooleanLiteral { value: true })
}
pub fn false_() -> Self {
Expression::Boolean(BooleanLiteral { value: false })
}
pub fn star() -> Self {
Expression::Star(Star {
table: None,
except: None,
replace: None,
rename: None,
trailing_comments: Vec::new(),
span: None,
})
}
pub fn alias(self, name: impl Into<String>) -> Self {
Expression::Alias(Box::new(Alias::new(self, Identifier::new(name))))
}
pub fn is_select(&self) -> bool {
matches!(self, Expression::Select(_))
}
pub fn as_select(&self) -> Option<&Select> {
match self {
Expression::Select(s) => Some(s),
_ => None,
}
}
pub fn as_select_mut(&mut self) -> Option<&mut Select> {
match self {
Expression::Select(s) => Some(s),
_ => None,
}
}
pub fn sql(&self) -> String {
crate::generator::Generator::sql(self).unwrap_or_default()
}
pub fn sql_for(&self, dialect: crate::dialects::DialectType) -> String {
crate::generate(self, dialect).unwrap_or_default()
}
}
impl Expression {
pub fn variant_name(&self) -> &'static str {
match self {
Expression::Literal(_) => "literal",
Expression::Boolean(_) => "boolean",
Expression::Null(_) => "null",
Expression::Identifier(_) => "identifier",
Expression::Column(_) => "column",
Expression::Table(_) => "table",
Expression::Star(_) => "star",
Expression::BracedWildcard(_) => "braced_wildcard",
Expression::Select(_) => "select",
Expression::Union(_) => "union",
Expression::Intersect(_) => "intersect",
Expression::Except(_) => "except",
Expression::Subquery(_) => "subquery",
Expression::PipeOperator(_) => "pipe_operator",
Expression::Pivot(_) => "pivot",
Expression::PivotAlias(_) => "pivot_alias",
Expression::Unpivot(_) => "unpivot",
Expression::Values(_) => "values",
Expression::PreWhere(_) => "pre_where",
Expression::Stream(_) => "stream",
Expression::UsingData(_) => "using_data",
Expression::XmlNamespace(_) => "xml_namespace",
Expression::Insert(_) => "insert",
Expression::Update(_) => "update",
Expression::Delete(_) => "delete",
Expression::Copy(_) => "copy",
Expression::Put(_) => "put",
Expression::StageReference(_) => "stage_reference",
Expression::Alias(_) => "alias",
Expression::Cast(_) => "cast",
Expression::Collation(_) => "collation",
Expression::Case(_) => "case",
Expression::And(_) => "and",
Expression::Or(_) => "or",
Expression::Add(_) => "add",
Expression::Sub(_) => "sub",
Expression::Mul(_) => "mul",
Expression::Div(_) => "div",
Expression::Mod(_) => "mod",
Expression::Eq(_) => "eq",
Expression::Neq(_) => "neq",
Expression::Lt(_) => "lt",
Expression::Lte(_) => "lte",
Expression::Gt(_) => "gt",
Expression::Gte(_) => "gte",
Expression::Like(_) => "like",
Expression::ILike(_) => "i_like",
Expression::Match(_) => "match",
Expression::BitwiseAnd(_) => "bitwise_and",
Expression::BitwiseOr(_) => "bitwise_or",
Expression::BitwiseXor(_) => "bitwise_xor",
Expression::Concat(_) => "concat",
Expression::Adjacent(_) => "adjacent",
Expression::TsMatch(_) => "ts_match",
Expression::PropertyEQ(_) => "property_e_q",
Expression::ArrayContainsAll(_) => "array_contains_all",
Expression::ArrayContainedBy(_) => "array_contained_by",
Expression::ArrayOverlaps(_) => "array_overlaps",
Expression::JSONBContainsAllTopKeys(_) => "j_s_o_n_b_contains_all_top_keys",
Expression::JSONBContainsAnyTopKeys(_) => "j_s_o_n_b_contains_any_top_keys",
Expression::JSONBDeleteAtPath(_) => "j_s_o_n_b_delete_at_path",
Expression::ExtendsLeft(_) => "extends_left",
Expression::ExtendsRight(_) => "extends_right",
Expression::Not(_) => "not",
Expression::Neg(_) => "neg",
Expression::BitwiseNot(_) => "bitwise_not",
Expression::In(_) => "in",
Expression::Between(_) => "between",
Expression::IsNull(_) => "is_null",
Expression::IsTrue(_) => "is_true",
Expression::IsFalse(_) => "is_false",
Expression::IsJson(_) => "is_json",
Expression::Is(_) => "is",
Expression::Exists(_) => "exists",
Expression::MemberOf(_) => "member_of",
Expression::Function(_) => "function",
Expression::AggregateFunction(_) => "aggregate_function",
Expression::WindowFunction(_) => "window_function",
Expression::From(_) => "from",
Expression::Join(_) => "join",
Expression::JoinedTable(_) => "joined_table",
Expression::Where(_) => "where",
Expression::GroupBy(_) => "group_by",
Expression::Having(_) => "having",
Expression::OrderBy(_) => "order_by",
Expression::Limit(_) => "limit",
Expression::Offset(_) => "offset",
Expression::Qualify(_) => "qualify",
Expression::With(_) => "with",
Expression::Cte(_) => "cte",
Expression::DistributeBy(_) => "distribute_by",
Expression::ClusterBy(_) => "cluster_by",
Expression::SortBy(_) => "sort_by",
Expression::LateralView(_) => "lateral_view",
Expression::Hint(_) => "hint",
Expression::Pseudocolumn(_) => "pseudocolumn",
Expression::Connect(_) => "connect",
Expression::Prior(_) => "prior",
Expression::ConnectByRoot(_) => "connect_by_root",
Expression::MatchRecognize(_) => "match_recognize",
Expression::Ordered(_) => "ordered",
Expression::Window(_) => "window",
Expression::Over(_) => "over",
Expression::WithinGroup(_) => "within_group",
Expression::DataType(_) => "data_type",
Expression::Array(_) => "array",
Expression::Struct(_) => "struct",
Expression::Tuple(_) => "tuple",
Expression::Interval(_) => "interval",
Expression::ConcatWs(_) => "concat_ws",
Expression::Substring(_) => "substring",
Expression::Upper(_) => "upper",
Expression::Lower(_) => "lower",
Expression::Length(_) => "length",
Expression::Trim(_) => "trim",
Expression::LTrim(_) => "l_trim",
Expression::RTrim(_) => "r_trim",
Expression::Replace(_) => "replace",
Expression::Reverse(_) => "reverse",
Expression::Left(_) => "left",
Expression::Right(_) => "right",
Expression::Repeat(_) => "repeat",
Expression::Lpad(_) => "lpad",
Expression::Rpad(_) => "rpad",
Expression::Split(_) => "split",
Expression::RegexpLike(_) => "regexp_like",
Expression::RegexpReplace(_) => "regexp_replace",
Expression::RegexpExtract(_) => "regexp_extract",
Expression::Overlay(_) => "overlay",
Expression::Abs(_) => "abs",
Expression::Round(_) => "round",
Expression::Floor(_) => "floor",
Expression::Ceil(_) => "ceil",
Expression::Power(_) => "power",
Expression::Sqrt(_) => "sqrt",
Expression::Cbrt(_) => "cbrt",
Expression::Ln(_) => "ln",
Expression::Log(_) => "log",
Expression::Exp(_) => "exp",
Expression::Sign(_) => "sign",
Expression::Greatest(_) => "greatest",
Expression::Least(_) => "least",
Expression::CurrentDate(_) => "current_date",
Expression::CurrentTime(_) => "current_time",
Expression::CurrentTimestamp(_) => "current_timestamp",
Expression::CurrentTimestampLTZ(_) => "current_timestamp_l_t_z",
Expression::AtTimeZone(_) => "at_time_zone",
Expression::DateAdd(_) => "date_add",
Expression::DateSub(_) => "date_sub",
Expression::DateDiff(_) => "date_diff",
Expression::DateTrunc(_) => "date_trunc",
Expression::Extract(_) => "extract",
Expression::ToDate(_) => "to_date",
Expression::ToTimestamp(_) => "to_timestamp",
Expression::Date(_) => "date",
Expression::Time(_) => "time",
Expression::DateFromUnixDate(_) => "date_from_unix_date",
Expression::UnixDate(_) => "unix_date",
Expression::UnixSeconds(_) => "unix_seconds",
Expression::UnixMillis(_) => "unix_millis",
Expression::UnixMicros(_) => "unix_micros",
Expression::UnixToTimeStr(_) => "unix_to_time_str",
Expression::TimeStrToDate(_) => "time_str_to_date",
Expression::DateToDi(_) => "date_to_di",
Expression::DiToDate(_) => "di_to_date",
Expression::TsOrDiToDi(_) => "ts_or_di_to_di",
Expression::TsOrDsToDatetime(_) => "ts_or_ds_to_datetime",
Expression::TsOrDsToTimestamp(_) => "ts_or_ds_to_timestamp",
Expression::YearOfWeek(_) => "year_of_week",
Expression::YearOfWeekIso(_) => "year_of_week_iso",
Expression::Coalesce(_) => "coalesce",
Expression::NullIf(_) => "null_if",
Expression::IfFunc(_) => "if_func",
Expression::IfNull(_) => "if_null",
Expression::Nvl(_) => "nvl",
Expression::Nvl2(_) => "nvl2",
Expression::TryCast(_) => "try_cast",
Expression::SafeCast(_) => "safe_cast",
Expression::Count(_) => "count",
Expression::Sum(_) => "sum",
Expression::Avg(_) => "avg",
Expression::Min(_) => "min",
Expression::Max(_) => "max",
Expression::GroupConcat(_) => "group_concat",
Expression::StringAgg(_) => "string_agg",
Expression::ListAgg(_) => "list_agg",
Expression::ArrayAgg(_) => "array_agg",
Expression::CountIf(_) => "count_if",
Expression::SumIf(_) => "sum_if",
Expression::Stddev(_) => "stddev",
Expression::StddevPop(_) => "stddev_pop",
Expression::StddevSamp(_) => "stddev_samp",
Expression::Variance(_) => "variance",
Expression::VarPop(_) => "var_pop",
Expression::VarSamp(_) => "var_samp",
Expression::Median(_) => "median",
Expression::Mode(_) => "mode",
Expression::First(_) => "first",
Expression::Last(_) => "last",
Expression::AnyValue(_) => "any_value",
Expression::ApproxDistinct(_) => "approx_distinct",
Expression::ApproxCountDistinct(_) => "approx_count_distinct",
Expression::ApproxPercentile(_) => "approx_percentile",
Expression::Percentile(_) => "percentile",
Expression::LogicalAnd(_) => "logical_and",
Expression::LogicalOr(_) => "logical_or",
Expression::Skewness(_) => "skewness",
Expression::BitwiseCount(_) => "bitwise_count",
Expression::ArrayConcatAgg(_) => "array_concat_agg",
Expression::ArrayUniqueAgg(_) => "array_unique_agg",
Expression::BoolXorAgg(_) => "bool_xor_agg",
Expression::RowNumber(_) => "row_number",
Expression::Rank(_) => "rank",
Expression::DenseRank(_) => "dense_rank",
Expression::NTile(_) => "n_tile",
Expression::Lead(_) => "lead",
Expression::Lag(_) => "lag",
Expression::FirstValue(_) => "first_value",
Expression::LastValue(_) => "last_value",
Expression::NthValue(_) => "nth_value",
Expression::PercentRank(_) => "percent_rank",
Expression::CumeDist(_) => "cume_dist",
Expression::PercentileCont(_) => "percentile_cont",
Expression::PercentileDisc(_) => "percentile_disc",
Expression::Contains(_) => "contains",
Expression::StartsWith(_) => "starts_with",
Expression::EndsWith(_) => "ends_with",
Expression::Position(_) => "position",
Expression::Initcap(_) => "initcap",
Expression::Ascii(_) => "ascii",
Expression::Chr(_) => "chr",
Expression::CharFunc(_) => "char_func",
Expression::Soundex(_) => "soundex",
Expression::Levenshtein(_) => "levenshtein",
Expression::ByteLength(_) => "byte_length",
Expression::Hex(_) => "hex",
Expression::LowerHex(_) => "lower_hex",
Expression::Unicode(_) => "unicode",
Expression::ModFunc(_) => "mod_func",
Expression::Random(_) => "random",
Expression::Rand(_) => "rand",
Expression::TruncFunc(_) => "trunc_func",
Expression::Pi(_) => "pi",
Expression::Radians(_) => "radians",
Expression::Degrees(_) => "degrees",
Expression::Sin(_) => "sin",
Expression::Cos(_) => "cos",
Expression::Tan(_) => "tan",
Expression::Asin(_) => "asin",
Expression::Acos(_) => "acos",
Expression::Atan(_) => "atan",
Expression::Atan2(_) => "atan2",
Expression::IsNan(_) => "is_nan",
Expression::IsInf(_) => "is_inf",
Expression::IntDiv(_) => "int_div",
Expression::Decode(_) => "decode",
Expression::DateFormat(_) => "date_format",
Expression::FormatDate(_) => "format_date",
Expression::Year(_) => "year",
Expression::Month(_) => "month",
Expression::Day(_) => "day",
Expression::Hour(_) => "hour",
Expression::Minute(_) => "minute",
Expression::Second(_) => "second",
Expression::DayOfWeek(_) => "day_of_week",
Expression::DayOfWeekIso(_) => "day_of_week_iso",
Expression::DayOfMonth(_) => "day_of_month",
Expression::DayOfYear(_) => "day_of_year",
Expression::WeekOfYear(_) => "week_of_year",
Expression::Quarter(_) => "quarter",
Expression::AddMonths(_) => "add_months",
Expression::MonthsBetween(_) => "months_between",
Expression::LastDay(_) => "last_day",
Expression::NextDay(_) => "next_day",
Expression::Epoch(_) => "epoch",
Expression::EpochMs(_) => "epoch_ms",
Expression::FromUnixtime(_) => "from_unixtime",
Expression::UnixTimestamp(_) => "unix_timestamp",
Expression::MakeDate(_) => "make_date",
Expression::MakeTimestamp(_) => "make_timestamp",
Expression::TimestampTrunc(_) => "timestamp_trunc",
Expression::TimeStrToUnix(_) => "time_str_to_unix",
Expression::SessionUser(_) => "session_user",
Expression::SHA(_) => "s_h_a",
Expression::SHA1Digest(_) => "s_h_a1_digest",
Expression::TimeToUnix(_) => "time_to_unix",
Expression::ArrayFunc(_) => "array_func",
Expression::ArrayLength(_) => "array_length",
Expression::ArraySize(_) => "array_size",
Expression::Cardinality(_) => "cardinality",
Expression::ArrayContains(_) => "array_contains",
Expression::ArrayPosition(_) => "array_position",
Expression::ArrayAppend(_) => "array_append",
Expression::ArrayPrepend(_) => "array_prepend",
Expression::ArrayConcat(_) => "array_concat",
Expression::ArraySort(_) => "array_sort",
Expression::ArrayReverse(_) => "array_reverse",
Expression::ArrayDistinct(_) => "array_distinct",
Expression::ArrayJoin(_) => "array_join",
Expression::ArrayToString(_) => "array_to_string",
Expression::Unnest(_) => "unnest",
Expression::Explode(_) => "explode",
Expression::ExplodeOuter(_) => "explode_outer",
Expression::ArrayFilter(_) => "array_filter",
Expression::ArrayTransform(_) => "array_transform",
Expression::ArrayFlatten(_) => "array_flatten",
Expression::ArrayCompact(_) => "array_compact",
Expression::ArrayIntersect(_) => "array_intersect",
Expression::ArrayUnion(_) => "array_union",
Expression::ArrayExcept(_) => "array_except",
Expression::ArrayRemove(_) => "array_remove",
Expression::ArrayZip(_) => "array_zip",
Expression::Sequence(_) => "sequence",
Expression::Generate(_) => "generate",
Expression::ExplodingGenerateSeries(_) => "exploding_generate_series",
Expression::ToArray(_) => "to_array",
Expression::StarMap(_) => "star_map",
Expression::StructFunc(_) => "struct_func",
Expression::StructExtract(_) => "struct_extract",
Expression::NamedStruct(_) => "named_struct",
Expression::MapFunc(_) => "map_func",
Expression::MapFromEntries(_) => "map_from_entries",
Expression::MapFromArrays(_) => "map_from_arrays",
Expression::MapKeys(_) => "map_keys",
Expression::MapValues(_) => "map_values",
Expression::MapContainsKey(_) => "map_contains_key",
Expression::MapConcat(_) => "map_concat",
Expression::ElementAt(_) => "element_at",
Expression::TransformKeys(_) => "transform_keys",
Expression::TransformValues(_) => "transform_values",
Expression::FunctionEmits(_) => "function_emits",
Expression::JsonExtract(_) => "json_extract",
Expression::JsonExtractScalar(_) => "json_extract_scalar",
Expression::JsonExtractPath(_) => "json_extract_path",
Expression::JsonArray(_) => "json_array",
Expression::JsonObject(_) => "json_object",
Expression::JsonQuery(_) => "json_query",
Expression::JsonValue(_) => "json_value",
Expression::JsonArrayLength(_) => "json_array_length",
Expression::JsonKeys(_) => "json_keys",
Expression::JsonType(_) => "json_type",
Expression::ParseJson(_) => "parse_json",
Expression::ToJson(_) => "to_json",
Expression::JsonSet(_) => "json_set",
Expression::JsonInsert(_) => "json_insert",
Expression::JsonRemove(_) => "json_remove",
Expression::JsonMergePatch(_) => "json_merge_patch",
Expression::JsonArrayAgg(_) => "json_array_agg",
Expression::JsonObjectAgg(_) => "json_object_agg",
Expression::Convert(_) => "convert",
Expression::Typeof(_) => "typeof",
Expression::Lambda(_) => "lambda",
Expression::Parameter(_) => "parameter",
Expression::Placeholder(_) => "placeholder",
Expression::NamedArgument(_) => "named_argument",
Expression::TableArgument(_) => "table_argument",
Expression::SqlComment(_) => "sql_comment",
Expression::NullSafeEq(_) => "null_safe_eq",
Expression::NullSafeNeq(_) => "null_safe_neq",
Expression::Glob(_) => "glob",
Expression::SimilarTo(_) => "similar_to",
Expression::Any(_) => "any",
Expression::All(_) => "all",
Expression::Overlaps(_) => "overlaps",
Expression::BitwiseLeftShift(_) => "bitwise_left_shift",
Expression::BitwiseRightShift(_) => "bitwise_right_shift",
Expression::BitwiseAndAgg(_) => "bitwise_and_agg",
Expression::BitwiseOrAgg(_) => "bitwise_or_agg",
Expression::BitwiseXorAgg(_) => "bitwise_xor_agg",
Expression::Subscript(_) => "subscript",
Expression::Dot(_) => "dot",
Expression::MethodCall(_) => "method_call",
Expression::ArraySlice(_) => "array_slice",
Expression::CreateTable(_) => "create_table",
Expression::DropTable(_) => "drop_table",
Expression::Undrop(_) => "undrop",
Expression::AlterTable(_) => "alter_table",
Expression::CreateIndex(_) => "create_index",
Expression::DropIndex(_) => "drop_index",
Expression::CreateView(_) => "create_view",
Expression::DropView(_) => "drop_view",
Expression::AlterView(_) => "alter_view",
Expression::AlterIndex(_) => "alter_index",
Expression::Truncate(_) => "truncate",
Expression::Use(_) => "use",
Expression::Cache(_) => "cache",
Expression::Uncache(_) => "uncache",
Expression::LoadData(_) => "load_data",
Expression::Pragma(_) => "pragma",
Expression::Grant(_) => "grant",
Expression::Revoke(_) => "revoke",
Expression::Comment(_) => "comment",
Expression::SetStatement(_) => "set_statement",
Expression::CreateSchema(_) => "create_schema",
Expression::DropSchema(_) => "drop_schema",
Expression::DropNamespace(_) => "drop_namespace",
Expression::CreateDatabase(_) => "create_database",
Expression::DropDatabase(_) => "drop_database",
Expression::CreateFunction(_) => "create_function",
Expression::DropFunction(_) => "drop_function",
Expression::CreateProcedure(_) => "create_procedure",
Expression::DropProcedure(_) => "drop_procedure",
Expression::CreateSequence(_) => "create_sequence",
Expression::CreateSynonym(_) => "create_synonym",
Expression::DropSequence(_) => "drop_sequence",
Expression::AlterSequence(_) => "alter_sequence",
Expression::CreateTrigger(_) => "create_trigger",
Expression::DropTrigger(_) => "drop_trigger",
Expression::CreateType(_) => "create_type",
Expression::DropType(_) => "drop_type",
Expression::Describe(_) => "describe",
Expression::Show(_) => "show",
Expression::Command(_) => "command",
Expression::Kill(_) => "kill",
Expression::Execute(_) => "execute",
Expression::Raw(_) => "raw",
Expression::CreateTask(_) => "create_task",
Expression::Paren(_) => "paren",
Expression::Annotated(_) => "annotated",
Expression::Refresh(_) => "refresh",
Expression::LockingStatement(_) => "locking_statement",
Expression::SequenceProperties(_) => "sequence_properties",
Expression::TruncateTable(_) => "truncate_table",
Expression::Clone(_) => "clone",
Expression::Attach(_) => "attach",
Expression::Detach(_) => "detach",
Expression::Install(_) => "install",
Expression::Summarize(_) => "summarize",
Expression::Declare(_) => "declare",
Expression::DeclareItem(_) => "declare_item",
Expression::Set(_) => "set",
Expression::Heredoc(_) => "heredoc",
Expression::SetItem(_) => "set_item",
Expression::QueryBand(_) => "query_band",
Expression::UserDefinedFunction(_) => "user_defined_function",
Expression::RecursiveWithSearch(_) => "recursive_with_search",
Expression::ProjectionDef(_) => "projection_def",
Expression::TableAlias(_) => "table_alias",
Expression::ByteString(_) => "byte_string",
Expression::HexStringExpr(_) => "hex_string_expr",
Expression::UnicodeString(_) => "unicode_string",
Expression::ColumnPosition(_) => "column_position",
Expression::ColumnDef(_) => "column_def",
Expression::AlterColumn(_) => "alter_column",
Expression::AlterSortKey(_) => "alter_sort_key",
Expression::AlterSet(_) => "alter_set",
Expression::RenameColumn(_) => "rename_column",
Expression::Comprehension(_) => "comprehension",
Expression::MergeTreeTTLAction(_) => "merge_tree_t_t_l_action",
Expression::MergeTreeTTL(_) => "merge_tree_t_t_l",
Expression::IndexConstraintOption(_) => "index_constraint_option",
Expression::ColumnConstraint(_) => "column_constraint",
Expression::PeriodForSystemTimeConstraint(_) => "period_for_system_time_constraint",
Expression::CaseSpecificColumnConstraint(_) => "case_specific_column_constraint",
Expression::CharacterSetColumnConstraint(_) => "character_set_column_constraint",
Expression::CheckColumnConstraint(_) => "check_column_constraint",
Expression::AssumeColumnConstraint(_) => "assume_column_constraint",
Expression::CompressColumnConstraint(_) => "compress_column_constraint",
Expression::DateFormatColumnConstraint(_) => "date_format_column_constraint",
Expression::EphemeralColumnConstraint(_) => "ephemeral_column_constraint",
Expression::WithOperator(_) => "with_operator",
Expression::GeneratedAsIdentityColumnConstraint(_) => {
"generated_as_identity_column_constraint"
}
Expression::AutoIncrementColumnConstraint(_) => "auto_increment_column_constraint",
Expression::CommentColumnConstraint(_) => "comment_column_constraint",
Expression::GeneratedAsRowColumnConstraint(_) => "generated_as_row_column_constraint",
Expression::IndexColumnConstraint(_) => "index_column_constraint",
Expression::MaskingPolicyColumnConstraint(_) => "masking_policy_column_constraint",
Expression::NotNullColumnConstraint(_) => "not_null_column_constraint",
Expression::PrimaryKeyColumnConstraint(_) => "primary_key_column_constraint",
Expression::UniqueColumnConstraint(_) => "unique_column_constraint",
Expression::WatermarkColumnConstraint(_) => "watermark_column_constraint",
Expression::ComputedColumnConstraint(_) => "computed_column_constraint",
Expression::InOutColumnConstraint(_) => "in_out_column_constraint",
Expression::DefaultColumnConstraint(_) => "default_column_constraint",
Expression::PathColumnConstraint(_) => "path_column_constraint",
Expression::Constraint(_) => "constraint",
Expression::Export(_) => "export",
Expression::Filter(_) => "filter",
Expression::Changes(_) => "changes",
Expression::CopyParameter(_) => "copy_parameter",
Expression::Credentials(_) => "credentials",
Expression::Directory(_) => "directory",
Expression::ForeignKey(_) => "foreign_key",
Expression::ColumnPrefix(_) => "column_prefix",
Expression::PrimaryKey(_) => "primary_key",
Expression::IntoClause(_) => "into_clause",
Expression::JoinHint(_) => "join_hint",
Expression::Opclass(_) => "opclass",
Expression::Index(_) => "index",
Expression::IndexParameters(_) => "index_parameters",
Expression::ConditionalInsert(_) => "conditional_insert",
Expression::MultitableInserts(_) => "multitable_inserts",
Expression::OnConflict(_) => "on_conflict",
Expression::OnCondition(_) => "on_condition",
Expression::Returning(_) => "returning",
Expression::Introducer(_) => "introducer",
Expression::PartitionRange(_) => "partition_range",
Expression::Fetch(_) => "fetch",
Expression::Group(_) => "group",
Expression::Cube(_) => "cube",
Expression::Rollup(_) => "rollup",
Expression::GroupingSets(_) => "grouping_sets",
Expression::LimitOptions(_) => "limit_options",
Expression::Lateral(_) => "lateral",
Expression::TableFromRows(_) => "table_from_rows",
Expression::RowsFrom(_) => "rows_from",
Expression::MatchRecognizeMeasure(_) => "match_recognize_measure",
Expression::WithFill(_) => "with_fill",
Expression::Property(_) => "property",
Expression::GrantPrivilege(_) => "grant_privilege",
Expression::GrantPrincipal(_) => "grant_principal",
Expression::AllowedValuesProperty(_) => "allowed_values_property",
Expression::AlgorithmProperty(_) => "algorithm_property",
Expression::AutoIncrementProperty(_) => "auto_increment_property",
Expression::AutoRefreshProperty(_) => "auto_refresh_property",
Expression::BackupProperty(_) => "backup_property",
Expression::BuildProperty(_) => "build_property",
Expression::BlockCompressionProperty(_) => "block_compression_property",
Expression::CharacterSetProperty(_) => "character_set_property",
Expression::ChecksumProperty(_) => "checksum_property",
Expression::CollateProperty(_) => "collate_property",
Expression::DataBlocksizeProperty(_) => "data_blocksize_property",
Expression::DataDeletionProperty(_) => "data_deletion_property",
Expression::DefinerProperty(_) => "definer_property",
Expression::DistKeyProperty(_) => "dist_key_property",
Expression::DistributedByProperty(_) => "distributed_by_property",
Expression::DistStyleProperty(_) => "dist_style_property",
Expression::DuplicateKeyProperty(_) => "duplicate_key_property",
Expression::EngineProperty(_) => "engine_property",
Expression::ToTableProperty(_) => "to_table_property",
Expression::ExecuteAsProperty(_) => "execute_as_property",
Expression::ExternalProperty(_) => "external_property",
Expression::FallbackProperty(_) => "fallback_property",
Expression::FileFormatProperty(_) => "file_format_property",
Expression::CredentialsProperty(_) => "credentials_property",
Expression::FreespaceProperty(_) => "freespace_property",
Expression::InheritsProperty(_) => "inherits_property",
Expression::InputModelProperty(_) => "input_model_property",
Expression::OutputModelProperty(_) => "output_model_property",
Expression::IsolatedLoadingProperty(_) => "isolated_loading_property",
Expression::JournalProperty(_) => "journal_property",
Expression::LanguageProperty(_) => "language_property",
Expression::EnviromentProperty(_) => "enviroment_property",
Expression::ClusteredByProperty(_) => "clustered_by_property",
Expression::DictProperty(_) => "dict_property",
Expression::DictRange(_) => "dict_range",
Expression::OnCluster(_) => "on_cluster",
Expression::LikeProperty(_) => "like_property",
Expression::LocationProperty(_) => "location_property",
Expression::LockProperty(_) => "lock_property",
Expression::LockingProperty(_) => "locking_property",
Expression::LogProperty(_) => "log_property",
Expression::MaterializedProperty(_) => "materialized_property",
Expression::MergeBlockRatioProperty(_) => "merge_block_ratio_property",
Expression::OnProperty(_) => "on_property",
Expression::OnCommitProperty(_) => "on_commit_property",
Expression::PartitionedByProperty(_) => "partitioned_by_property",
Expression::PartitionByProperty(_) => "partition_by_property",
Expression::PartitionedByBucket(_) => "partitioned_by_bucket",
Expression::ClusterByColumnsProperty(_) => "cluster_by_columns_property",
Expression::PartitionByTruncate(_) => "partition_by_truncate",
Expression::PartitionByRangeProperty(_) => "partition_by_range_property",
Expression::PartitionByRangePropertyDynamic(_) => "partition_by_range_property_dynamic",
Expression::PartitionByListProperty(_) => "partition_by_list_property",
Expression::PartitionList(_) => "partition_list",
Expression::Partition(_) => "partition",
Expression::RefreshTriggerProperty(_) => "refresh_trigger_property",
Expression::UniqueKeyProperty(_) => "unique_key_property",
Expression::RollupProperty(_) => "rollup_property",
Expression::PartitionBoundSpec(_) => "partition_bound_spec",
Expression::PartitionedOfProperty(_) => "partitioned_of_property",
Expression::RemoteWithConnectionModelProperty(_) => {
"remote_with_connection_model_property"
}
Expression::ReturnsProperty(_) => "returns_property",
Expression::RowFormatProperty(_) => "row_format_property",
Expression::RowFormatDelimitedProperty(_) => "row_format_delimited_property",
Expression::RowFormatSerdeProperty(_) => "row_format_serde_property",
Expression::QueryTransform(_) => "query_transform",
Expression::SampleProperty(_) => "sample_property",
Expression::SecurityProperty(_) => "security_property",
Expression::SchemaCommentProperty(_) => "schema_comment_property",
Expression::SemanticView(_) => "semantic_view",
Expression::SerdeProperties(_) => "serde_properties",
Expression::SetProperty(_) => "set_property",
Expression::SharingProperty(_) => "sharing_property",
Expression::SetConfigProperty(_) => "set_config_property",
Expression::SettingsProperty(_) => "settings_property",
Expression::SortKeyProperty(_) => "sort_key_property",
Expression::SqlReadWriteProperty(_) => "sql_read_write_property",
Expression::SqlSecurityProperty(_) => "sql_security_property",
Expression::StabilityProperty(_) => "stability_property",
Expression::StorageHandlerProperty(_) => "storage_handler_property",
Expression::TemporaryProperty(_) => "temporary_property",
Expression::Tags(_) => "tags",
Expression::TransformModelProperty(_) => "transform_model_property",
Expression::TransientProperty(_) => "transient_property",
Expression::UsingTemplateProperty(_) => "using_template_property",
Expression::ViewAttributeProperty(_) => "view_attribute_property",
Expression::VolatileProperty(_) => "volatile_property",
Expression::WithDataProperty(_) => "with_data_property",
Expression::WithJournalTableProperty(_) => "with_journal_table_property",
Expression::WithSchemaBindingProperty(_) => "with_schema_binding_property",
Expression::WithSystemVersioningProperty(_) => "with_system_versioning_property",
Expression::WithProcedureOptions(_) => "with_procedure_options",
Expression::EncodeProperty(_) => "encode_property",
Expression::IncludeProperty(_) => "include_property",
Expression::Properties(_) => "properties",
Expression::OptionsProperty(_) => "options_property",
Expression::InputOutputFormat(_) => "input_output_format",
Expression::Reference(_) => "reference",
Expression::QueryOption(_) => "query_option",
Expression::WithTableHint(_) => "with_table_hint",
Expression::IndexTableHint(_) => "index_table_hint",
Expression::HistoricalData(_) => "historical_data",
Expression::Get(_) => "get",
Expression::SetOperation(_) => "set_operation",
Expression::Var(_) => "var",
Expression::Variadic(_) => "variadic",
Expression::Version(_) => "version",
Expression::Schema(_) => "schema",
Expression::Lock(_) => "lock",
Expression::TableSample(_) => "table_sample",
Expression::Tag(_) => "tag",
Expression::UnpivotColumns(_) => "unpivot_columns",
Expression::WindowSpec(_) => "window_spec",
Expression::SessionParameter(_) => "session_parameter",
Expression::PseudoType(_) => "pseudo_type",
Expression::ObjectIdentifier(_) => "object_identifier",
Expression::Transaction(_) => "transaction",
Expression::Commit(_) => "commit",
Expression::Rollback(_) => "rollback",
Expression::AlterSession(_) => "alter_session",
Expression::Analyze(_) => "analyze",
Expression::AnalyzeStatistics(_) => "analyze_statistics",
Expression::AnalyzeHistogram(_) => "analyze_histogram",
Expression::AnalyzeSample(_) => "analyze_sample",
Expression::AnalyzeListChainedRows(_) => "analyze_list_chained_rows",
Expression::AnalyzeDelete(_) => "analyze_delete",
Expression::AnalyzeWith(_) => "analyze_with",
Expression::AnalyzeValidate(_) => "analyze_validate",
Expression::AddPartition(_) => "add_partition",
Expression::AttachOption(_) => "attach_option",
Expression::DropPartition(_) => "drop_partition",
Expression::ReplacePartition(_) => "replace_partition",
Expression::DPipe(_) => "d_pipe",
Expression::Operator(_) => "operator",
Expression::PivotAny(_) => "pivot_any",
Expression::Aliases(_) => "aliases",
Expression::AtIndex(_) => "at_index",
Expression::FromTimeZone(_) => "from_time_zone",
Expression::FormatPhrase(_) => "format_phrase",
Expression::ForIn(_) => "for_in",
Expression::TimeUnit(_) => "time_unit",
Expression::IntervalOp(_) => "interval_op",
Expression::IntervalSpan(_) => "interval_span",
Expression::HavingMax(_) => "having_max",
Expression::CosineDistance(_) => "cosine_distance",
Expression::DotProduct(_) => "dot_product",
Expression::EuclideanDistance(_) => "euclidean_distance",
Expression::ManhattanDistance(_) => "manhattan_distance",
Expression::JarowinklerSimilarity(_) => "jarowinkler_similarity",
Expression::Booland(_) => "booland",
Expression::Boolor(_) => "boolor",
Expression::ParameterizedAgg(_) => "parameterized_agg",
Expression::ArgMax(_) => "arg_max",
Expression::ArgMin(_) => "arg_min",
Expression::ApproxTopK(_) => "approx_top_k",
Expression::ApproxTopKAccumulate(_) => "approx_top_k_accumulate",
Expression::ApproxTopKCombine(_) => "approx_top_k_combine",
Expression::ApproxTopKEstimate(_) => "approx_top_k_estimate",
Expression::ApproxTopSum(_) => "approx_top_sum",
Expression::ApproxQuantiles(_) => "approx_quantiles",
Expression::Minhash(_) => "minhash",
Expression::FarmFingerprint(_) => "farm_fingerprint",
Expression::Float64(_) => "float64",
Expression::Transform(_) => "transform",
Expression::Translate(_) => "translate",
Expression::Grouping(_) => "grouping",
Expression::GroupingId(_) => "grouping_id",
Expression::Anonymous(_) => "anonymous",
Expression::AnonymousAggFunc(_) => "anonymous_agg_func",
Expression::CombinedAggFunc(_) => "combined_agg_func",
Expression::CombinedParameterizedAgg(_) => "combined_parameterized_agg",
Expression::HashAgg(_) => "hash_agg",
Expression::Hll(_) => "hll",
Expression::Apply(_) => "apply",
Expression::ToBoolean(_) => "to_boolean",
Expression::List(_) => "list",
Expression::ToMap(_) => "to_map",
Expression::Pad(_) => "pad",
Expression::ToChar(_) => "to_char",
Expression::ToNumber(_) => "to_number",
Expression::ToDouble(_) => "to_double",
Expression::Int64(_) => "int64",
Expression::StringFunc(_) => "string_func",
Expression::ToDecfloat(_) => "to_decfloat",
Expression::TryToDecfloat(_) => "try_to_decfloat",
Expression::ToFile(_) => "to_file",
Expression::Columns(_) => "columns",
Expression::ConvertToCharset(_) => "convert_to_charset",
Expression::ConvertTimezone(_) => "convert_timezone",
Expression::GenerateSeries(_) => "generate_series",
Expression::AIAgg(_) => "a_i_agg",
Expression::AIClassify(_) => "a_i_classify",
Expression::ArrayAll(_) => "array_all",
Expression::ArrayAny(_) => "array_any",
Expression::ArrayConstructCompact(_) => "array_construct_compact",
Expression::StPoint(_) => "st_point",
Expression::StDistance(_) => "st_distance",
Expression::StringToArray(_) => "string_to_array",
Expression::ArraySum(_) => "array_sum",
Expression::ObjectAgg(_) => "object_agg",
Expression::CastToStrType(_) => "cast_to_str_type",
Expression::CheckJson(_) => "check_json",
Expression::CheckXml(_) => "check_xml",
Expression::TranslateCharacters(_) => "translate_characters",
Expression::CurrentSchemas(_) => "current_schemas",
Expression::CurrentDatetime(_) => "current_datetime",
Expression::Localtime(_) => "localtime",
Expression::Localtimestamp(_) => "localtimestamp",
Expression::Systimestamp(_) => "systimestamp",
Expression::CurrentSchema(_) => "current_schema",
Expression::CurrentUser(_) => "current_user",
Expression::UtcTime(_) => "utc_time",
Expression::UtcTimestamp(_) => "utc_timestamp",
Expression::Timestamp(_) => "timestamp",
Expression::DateBin(_) => "date_bin",
Expression::Datetime(_) => "datetime",
Expression::DatetimeAdd(_) => "datetime_add",
Expression::DatetimeSub(_) => "datetime_sub",
Expression::DatetimeDiff(_) => "datetime_diff",
Expression::DatetimeTrunc(_) => "datetime_trunc",
Expression::Dayname(_) => "dayname",
Expression::MakeInterval(_) => "make_interval",
Expression::PreviousDay(_) => "previous_day",
Expression::Elt(_) => "elt",
Expression::TimestampAdd(_) => "timestamp_add",
Expression::TimestampSub(_) => "timestamp_sub",
Expression::TimestampDiff(_) => "timestamp_diff",
Expression::TimeSlice(_) => "time_slice",
Expression::TimeAdd(_) => "time_add",
Expression::TimeSub(_) => "time_sub",
Expression::TimeDiff(_) => "time_diff",
Expression::TimeTrunc(_) => "time_trunc",
Expression::DateFromParts(_) => "date_from_parts",
Expression::TimeFromParts(_) => "time_from_parts",
Expression::DecodeCase(_) => "decode_case",
Expression::Decrypt(_) => "decrypt",
Expression::DecryptRaw(_) => "decrypt_raw",
Expression::Encode(_) => "encode",
Expression::Encrypt(_) => "encrypt",
Expression::EncryptRaw(_) => "encrypt_raw",
Expression::EqualNull(_) => "equal_null",
Expression::ToBinary(_) => "to_binary",
Expression::Base64DecodeBinary(_) => "base64_decode_binary",
Expression::Base64DecodeString(_) => "base64_decode_string",
Expression::Base64Encode(_) => "base64_encode",
Expression::TryBase64DecodeBinary(_) => "try_base64_decode_binary",
Expression::TryBase64DecodeString(_) => "try_base64_decode_string",
Expression::GapFill(_) => "gap_fill",
Expression::GenerateDateArray(_) => "generate_date_array",
Expression::GenerateTimestampArray(_) => "generate_timestamp_array",
Expression::GetExtract(_) => "get_extract",
Expression::Getbit(_) => "getbit",
Expression::OverflowTruncateBehavior(_) => "overflow_truncate_behavior",
Expression::HexEncode(_) => "hex_encode",
Expression::Compress(_) => "compress",
Expression::DecompressBinary(_) => "decompress_binary",
Expression::DecompressString(_) => "decompress_string",
Expression::Xor(_) => "xor",
Expression::Nullif(_) => "nullif",
Expression::JSON(_) => "j_s_o_n",
Expression::JSONPath(_) => "j_s_o_n_path",
Expression::JSONPathFilter(_) => "j_s_o_n_path_filter",
Expression::JSONPathKey(_) => "j_s_o_n_path_key",
Expression::JSONPathRecursive(_) => "j_s_o_n_path_recursive",
Expression::JSONPathScript(_) => "j_s_o_n_path_script",
Expression::JSONPathSlice(_) => "j_s_o_n_path_slice",
Expression::JSONPathSelector(_) => "j_s_o_n_path_selector",
Expression::JSONPathSubscript(_) => "j_s_o_n_path_subscript",
Expression::JSONPathUnion(_) => "j_s_o_n_path_union",
Expression::Format(_) => "format",
Expression::JSONKeys(_) => "j_s_o_n_keys",
Expression::JSONKeyValue(_) => "j_s_o_n_key_value",
Expression::JSONKeysAtDepth(_) => "j_s_o_n_keys_at_depth",
Expression::JSONObject(_) => "j_s_o_n_object",
Expression::JSONObjectAgg(_) => "j_s_o_n_object_agg",
Expression::JSONBObjectAgg(_) => "j_s_o_n_b_object_agg",
Expression::JSONArray(_) => "j_s_o_n_array",
Expression::JSONArrayAgg(_) => "j_s_o_n_array_agg",
Expression::JSONExists(_) => "j_s_o_n_exists",
Expression::JSONColumnDef(_) => "j_s_o_n_column_def",
Expression::JSONSchema(_) => "j_s_o_n_schema",
Expression::JSONSet(_) => "j_s_o_n_set",
Expression::JSONStripNulls(_) => "j_s_o_n_strip_nulls",
Expression::JSONValue(_) => "j_s_o_n_value",
Expression::JSONValueArray(_) => "j_s_o_n_value_array",
Expression::JSONRemove(_) => "j_s_o_n_remove",
Expression::JSONTable(_) => "j_s_o_n_table",
Expression::JSONType(_) => "j_s_o_n_type",
Expression::ObjectInsert(_) => "object_insert",
Expression::OpenJSONColumnDef(_) => "open_j_s_o_n_column_def",
Expression::OpenJSON(_) => "open_j_s_o_n",
Expression::JSONBExists(_) => "j_s_o_n_b_exists",
Expression::JSONBContains(_) => "j_s_o_n_b_contains",
Expression::JSONBExtract(_) => "j_s_o_n_b_extract",
Expression::JSONCast(_) => "j_s_o_n_cast",
Expression::JSONExtract(_) => "j_s_o_n_extract",
Expression::JSONExtractQuote(_) => "j_s_o_n_extract_quote",
Expression::JSONExtractArray(_) => "j_s_o_n_extract_array",
Expression::JSONExtractScalar(_) => "j_s_o_n_extract_scalar",
Expression::JSONBExtractScalar(_) => "j_s_o_n_b_extract_scalar",
Expression::JSONFormat(_) => "j_s_o_n_format",
Expression::JSONBool(_) => "j_s_o_n_bool",
Expression::JSONPathRoot(_) => "j_s_o_n_path_root",
Expression::JSONArrayAppend(_) => "j_s_o_n_array_append",
Expression::JSONArrayContains(_) => "j_s_o_n_array_contains",
Expression::JSONArrayInsert(_) => "j_s_o_n_array_insert",
Expression::ParseJSON(_) => "parse_j_s_o_n",
Expression::ParseUrl(_) => "parse_url",
Expression::ParseIp(_) => "parse_ip",
Expression::ParseTime(_) => "parse_time",
Expression::ParseDatetime(_) => "parse_datetime",
Expression::Map(_) => "map",
Expression::MapCat(_) => "map_cat",
Expression::MapDelete(_) => "map_delete",
Expression::MapInsert(_) => "map_insert",
Expression::MapPick(_) => "map_pick",
Expression::ScopeResolution(_) => "scope_resolution",
Expression::Slice(_) => "slice",
Expression::VarMap(_) => "var_map",
Expression::MatchAgainst(_) => "match_against",
Expression::MD5Digest(_) => "m_d5_digest",
Expression::MD5NumberLower64(_) => "m_d5_number_lower64",
Expression::MD5NumberUpper64(_) => "m_d5_number_upper64",
Expression::Monthname(_) => "monthname",
Expression::Ntile(_) => "ntile",
Expression::Normalize(_) => "normalize",
Expression::Normal(_) => "normal",
Expression::Predict(_) => "predict",
Expression::MLTranslate(_) => "m_l_translate",
Expression::FeaturesAtTime(_) => "features_at_time",
Expression::GenerateEmbedding(_) => "generate_embedding",
Expression::MLForecast(_) => "m_l_forecast",
Expression::ModelAttribute(_) => "model_attribute",
Expression::VectorSearch(_) => "vector_search",
Expression::Quantile(_) => "quantile",
Expression::ApproxQuantile(_) => "approx_quantile",
Expression::ApproxPercentileEstimate(_) => "approx_percentile_estimate",
Expression::Randn(_) => "randn",
Expression::Randstr(_) => "randstr",
Expression::RangeN(_) => "range_n",
Expression::RangeBucket(_) => "range_bucket",
Expression::ReadCSV(_) => "read_c_s_v",
Expression::ReadParquet(_) => "read_parquet",
Expression::Reduce(_) => "reduce",
Expression::RegexpExtractAll(_) => "regexp_extract_all",
Expression::RegexpILike(_) => "regexp_i_like",
Expression::RegexpFullMatch(_) => "regexp_full_match",
Expression::RegexpInstr(_) => "regexp_instr",
Expression::RegexpSplit(_) => "regexp_split",
Expression::RegexpCount(_) => "regexp_count",
Expression::RegrValx(_) => "regr_valx",
Expression::RegrValy(_) => "regr_valy",
Expression::RegrAvgy(_) => "regr_avgy",
Expression::RegrAvgx(_) => "regr_avgx",
Expression::RegrCount(_) => "regr_count",
Expression::RegrIntercept(_) => "regr_intercept",
Expression::RegrR2(_) => "regr_r2",
Expression::RegrSxx(_) => "regr_sxx",
Expression::RegrSxy(_) => "regr_sxy",
Expression::RegrSyy(_) => "regr_syy",
Expression::RegrSlope(_) => "regr_slope",
Expression::SafeAdd(_) => "safe_add",
Expression::SafeDivide(_) => "safe_divide",
Expression::SafeMultiply(_) => "safe_multiply",
Expression::SafeSubtract(_) => "safe_subtract",
Expression::SHA2(_) => "s_h_a2",
Expression::SHA2Digest(_) => "s_h_a2_digest",
Expression::SortArray(_) => "sort_array",
Expression::SplitPart(_) => "split_part",
Expression::SubstringIndex(_) => "substring_index",
Expression::StandardHash(_) => "standard_hash",
Expression::StrPosition(_) => "str_position",
Expression::Search(_) => "search",
Expression::SearchIp(_) => "search_ip",
Expression::StrToDate(_) => "str_to_date",
Expression::DateStrToDate(_) => "date_str_to_date",
Expression::DateToDateStr(_) => "date_to_date_str",
Expression::StrToTime(_) => "str_to_time",
Expression::StrToUnix(_) => "str_to_unix",
Expression::StrToMap(_) => "str_to_map",
Expression::NumberToStr(_) => "number_to_str",
Expression::FromBase(_) => "from_base",
Expression::Stuff(_) => "stuff",
Expression::TimeToStr(_) => "time_to_str",
Expression::TimeStrToTime(_) => "time_str_to_time",
Expression::TsOrDsAdd(_) => "ts_or_ds_add",
Expression::TsOrDsDiff(_) => "ts_or_ds_diff",
Expression::TsOrDsToDate(_) => "ts_or_ds_to_date",
Expression::TsOrDsToTime(_) => "ts_or_ds_to_time",
Expression::Unhex(_) => "unhex",
Expression::Uniform(_) => "uniform",
Expression::UnixToStr(_) => "unix_to_str",
Expression::UnixToTime(_) => "unix_to_time",
Expression::Uuid(_) => "uuid",
Expression::TimestampFromParts(_) => "timestamp_from_parts",
Expression::TimestampTzFromParts(_) => "timestamp_tz_from_parts",
Expression::Corr(_) => "corr",
Expression::WidthBucket(_) => "width_bucket",
Expression::CovarSamp(_) => "covar_samp",
Expression::CovarPop(_) => "covar_pop",
Expression::Week(_) => "week",
Expression::XMLElement(_) => "x_m_l_element",
Expression::XMLGet(_) => "x_m_l_get",
Expression::XMLTable(_) => "x_m_l_table",
Expression::XMLKeyValueOption(_) => "x_m_l_key_value_option",
Expression::Zipf(_) => "zipf",
Expression::Merge(_) => "merge",
Expression::When(_) => "when",
Expression::Whens(_) => "whens",
Expression::NextValueFor(_) => "next_value_for",
Expression::ReturnStmt(_) => "return_stmt",
}
}
pub fn get_this(&self) -> Option<&Expression> {
match self {
Expression::Not(u) | Expression::Neg(u) | Expression::BitwiseNot(u) => Some(&u.this),
Expression::Upper(f)
| Expression::Lower(f)
| Expression::Length(f)
| Expression::LTrim(f)
| Expression::RTrim(f)
| Expression::Reverse(f)
| Expression::Abs(f)
| Expression::Sqrt(f)
| Expression::Cbrt(f)
| Expression::Ln(f)
| Expression::Exp(f)
| Expression::Sign(f)
| Expression::Date(f)
| Expression::Time(f)
| Expression::Initcap(f)
| Expression::Ascii(f)
| Expression::Chr(f)
| Expression::Soundex(f)
| Expression::ByteLength(f)
| Expression::Hex(f)
| Expression::LowerHex(f)
| Expression::Unicode(f)
| Expression::Typeof(f)
| Expression::Explode(f)
| Expression::ExplodeOuter(f)
| Expression::MapFromEntries(f)
| Expression::MapKeys(f)
| Expression::MapValues(f)
| Expression::ArrayLength(f)
| Expression::ArraySize(f)
| Expression::Cardinality(f)
| Expression::ArrayReverse(f)
| Expression::ArrayDistinct(f)
| Expression::ArrayFlatten(f)
| Expression::ArrayCompact(f)
| Expression::ToArray(f)
| Expression::JsonArrayLength(f)
| Expression::JsonKeys(f)
| Expression::JsonType(f)
| Expression::ParseJson(f)
| Expression::ToJson(f)
| Expression::Radians(f)
| Expression::Degrees(f)
| Expression::Sin(f)
| Expression::Cos(f)
| Expression::Tan(f)
| Expression::Asin(f)
| Expression::Acos(f)
| Expression::Atan(f)
| Expression::IsNan(f)
| Expression::IsInf(f)
| Expression::Year(f)
| Expression::Month(f)
| Expression::Day(f)
| Expression::Hour(f)
| Expression::Minute(f)
| Expression::Second(f)
| Expression::DayOfWeek(f)
| Expression::DayOfWeekIso(f)
| Expression::DayOfMonth(f)
| Expression::DayOfYear(f)
| Expression::WeekOfYear(f)
| Expression::Quarter(f)
| Expression::Epoch(f)
| Expression::EpochMs(f)
| Expression::BitwiseCount(f)
| Expression::DateFromUnixDate(f)
| Expression::UnixDate(f)
| Expression::UnixSeconds(f)
| Expression::UnixMillis(f)
| Expression::UnixMicros(f)
| Expression::TimeStrToDate(f)
| Expression::DateToDi(f)
| Expression::DiToDate(f)
| Expression::TsOrDiToDi(f)
| Expression::TsOrDsToDatetime(f)
| Expression::TsOrDsToTimestamp(f)
| Expression::YearOfWeek(f)
| Expression::YearOfWeekIso(f)
| Expression::SHA(f)
| Expression::SHA1Digest(f)
| Expression::TimeToUnix(f)
| Expression::TimeStrToUnix(f)
| Expression::Int64(f)
| Expression::JSONBool(f)
| Expression::MD5NumberLower64(f)
| Expression::MD5NumberUpper64(f)
| Expression::DateStrToDate(f)
| Expression::DateToDateStr(f) => Some(&f.this),
Expression::Power(f)
| Expression::NullIf(f)
| Expression::IfNull(f)
| Expression::Nvl(f)
| Expression::Contains(f)
| Expression::StartsWith(f)
| Expression::EndsWith(f)
| Expression::Levenshtein(f)
| Expression::ModFunc(f)
| Expression::IntDiv(f)
| Expression::Atan2(f)
| Expression::AddMonths(f)
| Expression::MonthsBetween(f)
| Expression::NextDay(f)
| Expression::UnixToTimeStr(f)
| Expression::ArrayContains(f)
| Expression::ArrayPosition(f)
| Expression::ArrayAppend(f)
| Expression::ArrayPrepend(f)
| Expression::ArrayUnion(f)
| Expression::ArrayExcept(f)
| Expression::ArrayRemove(f)
| Expression::StarMap(f)
| Expression::MapFromArrays(f)
| Expression::MapContainsKey(f)
| Expression::ElementAt(f)
| Expression::JsonMergePatch(f)
| Expression::JSONBContains(f)
| Expression::JSONBExtract(f) => Some(&f.this),
Expression::Sum(af)
| Expression::Avg(af)
| Expression::Min(af)
| Expression::Max(af)
| Expression::ArrayAgg(af)
| Expression::CountIf(af)
| Expression::Stddev(af)
| Expression::StddevPop(af)
| Expression::StddevSamp(af)
| Expression::Variance(af)
| Expression::VarPop(af)
| Expression::VarSamp(af)
| Expression::Median(af)
| Expression::Mode(af)
| Expression::First(af)
| Expression::Last(af)
| Expression::AnyValue(af)
| Expression::ApproxDistinct(af)
| Expression::ApproxCountDistinct(af)
| Expression::LogicalAnd(af)
| Expression::LogicalOr(af)
| Expression::Skewness(af)
| Expression::ArrayConcatAgg(af)
| Expression::ArrayUniqueAgg(af)
| Expression::BoolXorAgg(af)
| Expression::BitwiseAndAgg(af)
| Expression::BitwiseOrAgg(af)
| Expression::BitwiseXorAgg(af) => Some(&af.this),
Expression::And(op)
| Expression::Or(op)
| Expression::Add(op)
| Expression::Sub(op)
| Expression::Mul(op)
| Expression::Div(op)
| Expression::Mod(op)
| Expression::Eq(op)
| Expression::Neq(op)
| Expression::Lt(op)
| Expression::Lte(op)
| Expression::Gt(op)
| Expression::Gte(op)
| Expression::BitwiseAnd(op)
| Expression::BitwiseOr(op)
| Expression::BitwiseXor(op)
| Expression::Concat(op)
| Expression::Adjacent(op)
| Expression::TsMatch(op)
| Expression::PropertyEQ(op)
| Expression::ArrayContainsAll(op)
| Expression::ArrayContainedBy(op)
| Expression::ArrayOverlaps(op)
| Expression::JSONBContainsAllTopKeys(op)
| Expression::JSONBContainsAnyTopKeys(op)
| Expression::JSONBDeleteAtPath(op)
| Expression::ExtendsLeft(op)
| Expression::ExtendsRight(op)
| Expression::Is(op)
| Expression::MemberOf(op)
| Expression::Match(op)
| Expression::NullSafeEq(op)
| Expression::NullSafeNeq(op)
| Expression::Glob(op)
| Expression::BitwiseLeftShift(op)
| Expression::BitwiseRightShift(op) => Some(&op.left),
Expression::Like(op) | Expression::ILike(op) => Some(&op.left),
Expression::Alias(a) => Some(&a.this),
Expression::Cast(c) | Expression::TryCast(c) | Expression::SafeCast(c) => Some(&c.this),
Expression::Paren(p) => Some(&p.this),
Expression::Annotated(a) => Some(&a.this),
Expression::Subquery(s) => Some(&s.this),
Expression::Where(w) => Some(&w.this),
Expression::Having(h) => Some(&h.this),
Expression::Qualify(q) => Some(&q.this),
Expression::IsNull(i) => Some(&i.this),
Expression::Exists(e) => Some(&e.this),
Expression::Ordered(o) => Some(&o.this),
Expression::WindowFunction(wf) => Some(&wf.this),
Expression::Cte(cte) => Some(&cte.this),
Expression::Between(b) => Some(&b.this),
Expression::In(i) => Some(&i.this),
Expression::ReturnStmt(e) => Some(e),
_ => None,
}
}
pub fn get_expression(&self) -> Option<&Expression> {
match self {
Expression::And(op)
| Expression::Or(op)
| Expression::Add(op)
| Expression::Sub(op)
| Expression::Mul(op)
| Expression::Div(op)
| Expression::Mod(op)
| Expression::Eq(op)
| Expression::Neq(op)
| Expression::Lt(op)
| Expression::Lte(op)
| Expression::Gt(op)
| Expression::Gte(op)
| Expression::BitwiseAnd(op)
| Expression::BitwiseOr(op)
| Expression::BitwiseXor(op)
| Expression::Concat(op)
| Expression::Adjacent(op)
| Expression::TsMatch(op)
| Expression::PropertyEQ(op)
| Expression::ArrayContainsAll(op)
| Expression::ArrayContainedBy(op)
| Expression::ArrayOverlaps(op)
| Expression::JSONBContainsAllTopKeys(op)
| Expression::JSONBContainsAnyTopKeys(op)
| Expression::JSONBDeleteAtPath(op)
| Expression::ExtendsLeft(op)
| Expression::ExtendsRight(op)
| Expression::Is(op)
| Expression::MemberOf(op)
| Expression::Match(op)
| Expression::NullSafeEq(op)
| Expression::NullSafeNeq(op)
| Expression::Glob(op)
| Expression::BitwiseLeftShift(op)
| Expression::BitwiseRightShift(op) => Some(&op.right),
Expression::Like(op) | Expression::ILike(op) => Some(&op.right),
Expression::Power(f)
| Expression::NullIf(f)
| Expression::IfNull(f)
| Expression::Nvl(f)
| Expression::Contains(f)
| Expression::StartsWith(f)
| Expression::EndsWith(f)
| Expression::Levenshtein(f)
| Expression::ModFunc(f)
| Expression::IntDiv(f)
| Expression::Atan2(f)
| Expression::AddMonths(f)
| Expression::MonthsBetween(f)
| Expression::NextDay(f)
| Expression::UnixToTimeStr(f)
| Expression::ArrayContains(f)
| Expression::ArrayPosition(f)
| Expression::ArrayAppend(f)
| Expression::ArrayPrepend(f)
| Expression::ArrayUnion(f)
| Expression::ArrayExcept(f)
| Expression::ArrayRemove(f)
| Expression::StarMap(f)
| Expression::MapFromArrays(f)
| Expression::MapContainsKey(f)
| Expression::ElementAt(f)
| Expression::JsonMergePatch(f)
| Expression::JSONBContains(f)
| Expression::JSONBExtract(f) => Some(&f.expression),
_ => None,
}
}
pub fn get_expressions(&self) -> &[Expression] {
match self {
Expression::Select(s) => &s.expressions,
Expression::Function(f) => &f.args,
Expression::AggregateFunction(f) => &f.args,
Expression::From(f) => &f.expressions,
Expression::GroupBy(g) => &g.expressions,
Expression::In(i) => &i.expressions,
Expression::Array(a) => &a.expressions,
Expression::Tuple(t) => &t.expressions,
Expression::Coalesce(f)
| Expression::Greatest(f)
| Expression::Least(f)
| Expression::ArrayConcat(f)
| Expression::ArrayIntersect(f)
| Expression::ArrayZip(f)
| Expression::MapConcat(f)
| Expression::JsonArray(f) => &f.expressions,
_ => &[],
}
}
pub fn get_name(&self) -> &str {
match self {
Expression::Identifier(id) => &id.name,
Expression::Column(col) => &col.name.name,
Expression::Table(t) => &t.name.name,
Expression::Literal(lit) => lit.value_str(),
Expression::Star(_) => "*",
Expression::Function(f) => &f.name,
Expression::AggregateFunction(f) => &f.name,
Expression::Alias(a) => a.this.get_name(),
Expression::Boolean(b) => {
if b.value {
"TRUE"
} else {
"FALSE"
}
}
Expression::Null(_) => "NULL",
_ => "",
}
}
pub fn get_alias(&self) -> &str {
match self {
Expression::Alias(a) => &a.alias.name,
Expression::Table(t) => t.alias.as_ref().map(|a| a.name.as_str()).unwrap_or(""),
Expression::Subquery(s) => s.alias.as_ref().map(|a| a.name.as_str()).unwrap_or(""),
_ => "",
}
}
pub fn get_output_name(&self) -> &str {
match self {
Expression::Alias(a) => &a.alias.name,
Expression::Column(c) => &c.name.name,
Expression::Identifier(id) => &id.name,
Expression::Literal(lit) => lit.value_str(),
Expression::Subquery(s) => s.alias.as_ref().map(|a| a.name.as_str()).unwrap_or(""),
Expression::Star(_) => "*",
_ => "",
}
}
pub fn get_comments(&self) -> Vec<&str> {
match self {
Expression::Identifier(id) => id.trailing_comments.iter().map(|s| s.as_str()).collect(),
Expression::Column(c) => c.trailing_comments.iter().map(|s| s.as_str()).collect(),
Expression::Star(s) => s.trailing_comments.iter().map(|s| s.as_str()).collect(),
Expression::Paren(p) => p.trailing_comments.iter().map(|s| s.as_str()).collect(),
Expression::Annotated(a) => a.trailing_comments.iter().map(|s| s.as_str()).collect(),
Expression::Alias(a) => a.trailing_comments.iter().map(|s| s.as_str()).collect(),
Expression::Cast(c) | Expression::TryCast(c) | Expression::SafeCast(c) => {
c.trailing_comments.iter().map(|s| s.as_str()).collect()
}
Expression::And(op)
| Expression::Or(op)
| Expression::Add(op)
| Expression::Sub(op)
| Expression::Mul(op)
| Expression::Div(op)
| Expression::Mod(op)
| Expression::Eq(op)
| Expression::Neq(op)
| Expression::Lt(op)
| Expression::Lte(op)
| Expression::Gt(op)
| Expression::Gte(op)
| Expression::Concat(op)
| Expression::BitwiseAnd(op)
| Expression::BitwiseOr(op)
| Expression::BitwiseXor(op) => {
op.trailing_comments.iter().map(|s| s.as_str()).collect()
}
Expression::Function(f) => f.trailing_comments.iter().map(|s| s.as_str()).collect(),
Expression::Subquery(s) => s.trailing_comments.iter().map(|s| s.as_str()).collect(),
_ => Vec::new(),
}
}
}
impl fmt::Display for Expression {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Expression::Literal(lit) => write!(f, "{}", lit),
Expression::Identifier(id) => write!(f, "{}", id),
Expression::Column(col) => write!(f, "{}", col),
Expression::Star(_) => write!(f, "*"),
Expression::Null(_) => write!(f, "NULL"),
Expression::Boolean(b) => write!(f, "{}", if b.value { "TRUE" } else { "FALSE" }),
Expression::Select(_) => write!(f, "SELECT ..."),
_ => write!(f, "{:?}", self),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[serde(tag = "literal_type", content = "value", rename_all = "snake_case")]
pub enum Literal {
String(String),
Number(String),
HexString(String),
HexNumber(String),
BitString(String),
ByteString(String),
NationalString(String),
Date(String),
Time(String),
Timestamp(String),
Datetime(String),
TripleQuotedString(String, char),
EscapeString(String),
DollarString(String),
RawString(String),
}
impl Literal {
pub fn value_str(&self) -> &str {
match self {
Literal::String(s)
| Literal::Number(s)
| Literal::HexString(s)
| Literal::HexNumber(s)
| Literal::BitString(s)
| Literal::ByteString(s)
| Literal::NationalString(s)
| Literal::Date(s)
| Literal::Time(s)
| Literal::Timestamp(s)
| Literal::Datetime(s)
| Literal::EscapeString(s)
| Literal::DollarString(s)
| Literal::RawString(s) => s.as_str(),
Literal::TripleQuotedString(s, _) => s.as_str(),
}
}
pub fn is_string(&self) -> bool {
matches!(
self,
Literal::String(_)
| Literal::NationalString(_)
| Literal::EscapeString(_)
| Literal::DollarString(_)
| Literal::RawString(_)
| Literal::TripleQuotedString(_, _)
)
}
pub fn is_number(&self) -> bool {
matches!(self, Literal::Number(_) | Literal::HexNumber(_))
}
}
impl fmt::Display for Literal {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Literal::String(s) => write!(f, "'{}'", s),
Literal::Number(n) => write!(f, "{}", n),
Literal::HexString(h) => write!(f, "X'{}'", h),
Literal::HexNumber(h) => write!(f, "0x{}", h),
Literal::BitString(b) => write!(f, "B'{}'", b),
Literal::ByteString(b) => write!(f, "b'{}'", b),
Literal::NationalString(s) => write!(f, "N'{}'", s),
Literal::Date(d) => write!(f, "DATE '{}'", d),
Literal::Time(t) => write!(f, "TIME '{}'", t),
Literal::Timestamp(ts) => write!(f, "TIMESTAMP '{}'", ts),
Literal::Datetime(dt) => write!(f, "DATETIME '{}'", dt),
Literal::TripleQuotedString(s, q) => {
write!(f, "{0}{0}{0}{1}{0}{0}{0}", q, s)
}
Literal::EscapeString(s) => write!(f, "E'{}'", s),
Literal::DollarString(s) => write!(f, "$${}$$", s),
Literal::RawString(s) => write!(f, "r'{}'", s),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct BooleanLiteral {
pub value: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Null;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Identifier {
pub name: String,
pub quoted: bool,
#[serde(default)]
pub trailing_comments: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub span: Option<Span>,
}
impl Identifier {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: name.into(),
quoted: false,
trailing_comments: Vec::new(),
span: None,
}
}
pub fn quoted(name: impl Into<String>) -> Self {
Self {
name: name.into(),
quoted: true,
trailing_comments: Vec::new(),
span: None,
}
}
pub fn empty() -> Self {
Self {
name: String::new(),
quoted: false,
trailing_comments: Vec::new(),
span: None,
}
}
pub fn is_empty(&self) -> bool {
self.name.is_empty()
}
pub fn with_span(mut self, span: Span) -> Self {
self.span = Some(span);
self
}
}
impl fmt::Display for Identifier {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
if self.quoted {
write!(f, "\"{}\"", self.name)
} else {
write!(f, "{}", self.name)
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Column {
pub name: Identifier,
pub table: Option<Identifier>,
#[serde(default)]
pub join_mark: bool,
#[serde(default)]
pub trailing_comments: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub span: Option<Span>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
impl fmt::Display for Column {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
if let Some(table) = &self.table {
write!(f, "{}.{}", table, self.name)
} else {
write!(f, "{}", self.name)
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TableRef {
pub name: Identifier,
pub schema: Option<Identifier>,
pub catalog: Option<Identifier>,
pub alias: Option<Identifier>,
#[serde(default)]
pub alias_explicit_as: bool,
#[serde(default)]
pub column_aliases: Vec<Identifier>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub leading_comments: Vec<String>,
#[serde(default)]
pub trailing_comments: Vec<String>,
#[serde(default)]
pub when: Option<Box<HistoricalData>>,
#[serde(default)]
pub only: bool,
#[serde(default)]
pub final_: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub table_sample: Option<Box<Sample>>,
#[serde(default)]
pub hints: Vec<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub system_time: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub partitions: Vec<Identifier>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub identifier_func: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub changes: Option<Box<Changes>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub version: Option<Box<Version>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub span: Option<Span>,
}
impl TableRef {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
schema: None,
catalog: None,
alias: None,
alias_explicit_as: false,
column_aliases: Vec::new(),
leading_comments: Vec::new(),
trailing_comments: Vec::new(),
when: None,
only: false,
final_: false,
table_sample: None,
hints: Vec::new(),
system_time: None,
partitions: Vec::new(),
identifier_func: None,
changes: None,
version: None,
span: None,
}
}
pub fn new_with_schema(name: impl Into<String>, schema: impl Into<String>) -> Self {
let mut t = Self::new(name);
t.schema = Some(Identifier::new(schema));
t
}
pub fn new_with_catalog(
name: impl Into<String>,
schema: impl Into<String>,
catalog: impl Into<String>,
) -> Self {
let mut t = Self::new(name);
t.schema = Some(Identifier::new(schema));
t.catalog = Some(Identifier::new(catalog));
t
}
pub fn from_identifier(name: Identifier) -> Self {
Self {
name,
schema: None,
catalog: None,
alias: None,
alias_explicit_as: false,
column_aliases: Vec::new(),
leading_comments: Vec::new(),
trailing_comments: Vec::new(),
when: None,
only: false,
final_: false,
table_sample: None,
hints: Vec::new(),
system_time: None,
partitions: Vec::new(),
identifier_func: None,
changes: None,
version: None,
span: None,
}
}
pub fn with_alias(mut self, alias: impl Into<String>) -> Self {
self.alias = Some(Identifier::new(alias));
self
}
pub fn with_schema(mut self, schema: impl Into<String>) -> Self {
self.schema = Some(Identifier::new(schema));
self
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Star {
pub table: Option<Identifier>,
pub except: Option<Vec<Identifier>>,
pub replace: Option<Vec<Alias>>,
pub rename: Option<Vec<(Identifier, Identifier)>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub trailing_comments: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub span: Option<Span>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Select {
pub expressions: Vec<Expression>,
pub from: Option<From>,
pub joins: Vec<Join>,
pub lateral_views: Vec<LateralView>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prewhere: Option<Expression>,
pub where_clause: Option<Where>,
pub group_by: Option<GroupBy>,
pub having: Option<Having>,
pub qualify: Option<Qualify>,
pub order_by: Option<OrderBy>,
pub distribute_by: Option<DistributeBy>,
pub cluster_by: Option<ClusterBy>,
pub sort_by: Option<SortBy>,
pub limit: Option<Limit>,
pub offset: Option<Offset>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit_by: Option<Vec<Expression>>,
pub fetch: Option<Fetch>,
pub distinct: bool,
pub distinct_on: Option<Vec<Expression>>,
pub top: Option<Top>,
pub with: Option<With>,
pub sample: Option<Sample>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub settings: Option<Vec<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub format: Option<Expression>,
pub windows: Option<Vec<NamedWindow>>,
pub hint: Option<Hint>,
pub connect: Option<Connect>,
pub into: Option<SelectInto>,
#[serde(default)]
pub locks: Vec<Lock>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub for_xml: Vec<Expression>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub for_json: Vec<Expression>,
#[serde(default)]
pub leading_comments: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub post_select_comments: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub operation_modifiers: Vec<String>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub qualify_after_window: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub option: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exclude: Option<Vec<Expression>>,
}
impl Select {
pub fn new() -> Self {
Self {
expressions: Vec::new(),
from: None,
joins: Vec::new(),
lateral_views: Vec::new(),
prewhere: None,
where_clause: None,
group_by: None,
having: None,
qualify: None,
order_by: None,
distribute_by: None,
cluster_by: None,
sort_by: None,
limit: None,
offset: None,
limit_by: None,
fetch: None,
distinct: false,
distinct_on: None,
top: None,
with: None,
sample: None,
settings: None,
format: None,
windows: None,
hint: None,
connect: None,
into: None,
locks: Vec::new(),
for_xml: Vec::new(),
for_json: Vec::new(),
leading_comments: Vec::new(),
post_select_comments: Vec::new(),
kind: None,
operation_modifiers: Vec::new(),
qualify_after_window: false,
option: None,
exclude: None,
}
}
pub fn column(mut self, expr: Expression) -> Self {
self.expressions.push(expr);
self
}
pub fn from(mut self, table: Expression) -> Self {
self.from = Some(From {
expressions: vec![table],
});
self
}
pub fn where_(mut self, condition: Expression) -> Self {
self.where_clause = Some(Where { this: condition });
self
}
pub fn distinct(mut self) -> Self {
self.distinct = true;
self
}
pub fn join(mut self, join: Join) -> Self {
self.joins.push(join);
self
}
pub fn order_by(mut self, expressions: Vec<Ordered>) -> Self {
self.order_by = Some(OrderBy {
expressions,
siblings: false,
comments: Vec::new(),
});
self
}
pub fn limit(mut self, n: Expression) -> Self {
self.limit = Some(Limit {
this: n,
percent: false,
comments: Vec::new(),
});
self
}
pub fn offset(mut self, n: Expression) -> Self {
self.offset = Some(Offset {
this: n,
rows: None,
});
self
}
}
impl Default for Select {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Union {
pub left: Expression,
pub right: Expression,
pub all: bool,
#[serde(default)]
pub distinct: bool,
pub with: Option<With>,
pub order_by: Option<OrderBy>,
pub limit: Option<Box<Expression>>,
pub offset: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub distribute_by: Option<DistributeBy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sort_by: Option<SortBy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cluster_by: Option<ClusterBy>,
#[serde(default)]
pub by_name: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub side: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(default)]
pub corresponding: bool,
#[serde(default)]
pub strict: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub on_columns: Vec<Expression>,
}
impl Drop for Union {
fn drop(&mut self) {
loop {
if let Expression::Union(ref mut inner) = self.left {
let next_left = std::mem::replace(&mut inner.left, Expression::Null(Null));
let old_left = std::mem::replace(&mut self.left, next_left);
drop(old_left);
} else {
break;
}
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Intersect {
pub left: Expression,
pub right: Expression,
pub all: bool,
#[serde(default)]
pub distinct: bool,
pub with: Option<With>,
pub order_by: Option<OrderBy>,
pub limit: Option<Box<Expression>>,
pub offset: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub distribute_by: Option<DistributeBy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sort_by: Option<SortBy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cluster_by: Option<ClusterBy>,
#[serde(default)]
pub by_name: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub side: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(default)]
pub corresponding: bool,
#[serde(default)]
pub strict: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub on_columns: Vec<Expression>,
}
impl Drop for Intersect {
fn drop(&mut self) {
loop {
if let Expression::Intersect(ref mut inner) = self.left {
let next_left = std::mem::replace(&mut inner.left, Expression::Null(Null));
let old_left = std::mem::replace(&mut self.left, next_left);
drop(old_left);
} else {
break;
}
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Except {
pub left: Expression,
pub right: Expression,
pub all: bool,
#[serde(default)]
pub distinct: bool,
pub with: Option<With>,
pub order_by: Option<OrderBy>,
pub limit: Option<Box<Expression>>,
pub offset: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub distribute_by: Option<DistributeBy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sort_by: Option<SortBy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cluster_by: Option<ClusterBy>,
#[serde(default)]
pub by_name: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub side: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(default)]
pub corresponding: bool,
#[serde(default)]
pub strict: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub on_columns: Vec<Expression>,
}
impl Drop for Except {
fn drop(&mut self) {
loop {
if let Expression::Except(ref mut inner) = self.left {
let next_left = std::mem::replace(&mut inner.left, Expression::Null(Null));
let old_left = std::mem::replace(&mut self.left, next_left);
drop(old_left);
} else {
break;
}
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SelectInto {
pub this: Expression,
#[serde(default)]
pub temporary: bool,
#[serde(default)]
pub unlogged: bool,
#[serde(default)]
pub bulk_collect: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Subquery {
pub this: Expression,
pub alias: Option<Identifier>,
pub column_aliases: Vec<Identifier>,
pub order_by: Option<OrderBy>,
pub limit: Option<Limit>,
pub offset: Option<Offset>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub distribute_by: Option<DistributeBy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sort_by: Option<SortBy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cluster_by: Option<ClusterBy>,
#[serde(default)]
pub lateral: bool,
#[serde(default)]
pub modifiers_inside: bool,
#[serde(default)]
pub trailing_comments: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PipeOperator {
pub this: Expression,
pub expression: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Values {
pub expressions: Vec<Tuple>,
pub alias: Option<Identifier>,
pub column_aliases: Vec<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Pivot {
pub this: Expression,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub fields: Vec<Expression>,
#[serde(default)]
pub using: Vec<Expression>,
#[serde(default)]
pub group: Option<Box<Expression>>,
#[serde(default)]
pub unpivot: bool,
#[serde(default)]
pub into: Option<Box<Expression>>,
#[serde(default)]
pub alias: Option<Identifier>,
#[serde(default)]
pub include_nulls: Option<bool>,
#[serde(default)]
pub default_on_null: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub with: Option<With>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Unpivot {
pub this: Expression,
pub value_column: Identifier,
pub name_column: Identifier,
pub columns: Vec<Expression>,
pub alias: Option<Identifier>,
#[serde(default)]
pub value_column_parenthesized: bool,
#[serde(default)]
pub include_nulls: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extra_value_columns: Vec<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PivotAlias {
pub this: Expression,
pub alias: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PreWhere {
pub this: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Stream {
pub this: Expression,
#[serde(skip_serializing_if = "Option::is_none")]
pub on: Option<Expression>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_initial_rows: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UsingData {
pub this: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct XmlNamespace {
pub this: Expression,
#[serde(skip_serializing_if = "Option::is_none")]
pub alias: Option<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RowFormat {
pub delimited: bool,
pub fields_terminated_by: Option<String>,
pub collection_items_terminated_by: Option<String>,
pub map_keys_terminated_by: Option<String>,
pub lines_terminated_by: Option<String>,
pub null_defined_as: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DirectoryInsert {
pub local: bool,
pub path: String,
pub row_format: Option<RowFormat>,
#[serde(default)]
pub stored_as: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Insert {
pub table: TableRef,
pub columns: Vec<Identifier>,
pub values: Vec<Vec<Expression>>,
pub query: Option<Expression>,
pub overwrite: bool,
pub partition: Vec<(Identifier, Option<Expression>)>,
#[serde(default)]
pub directory: Option<DirectoryInsert>,
#[serde(default)]
pub returning: Vec<Expression>,
#[serde(default)]
pub output: Option<OutputClause>,
#[serde(default)]
pub on_conflict: Option<Box<Expression>>,
#[serde(default)]
pub leading_comments: Vec<String>,
#[serde(default)]
pub if_exists: bool,
#[serde(default)]
pub with: Option<With>,
#[serde(default)]
pub ignore: bool,
#[serde(default)]
pub source_alias: Option<Identifier>,
#[serde(default)]
pub alias: Option<Identifier>,
#[serde(default)]
pub alias_explicit_as: bool,
#[serde(default)]
pub default_values: bool,
#[serde(default)]
pub by_name: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub conflict_action: Option<String>,
#[serde(default)]
pub is_replace: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub hint: Option<Hint>,
#[serde(default)]
pub replace_where: Option<Box<Expression>>,
#[serde(default)]
pub source: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub function_target: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub partition_by: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub settings: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OutputClause {
pub columns: Vec<Expression>,
#[serde(default)]
pub into_table: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Update {
pub table: TableRef,
#[serde(default)]
pub hint: Option<Hint>,
#[serde(default)]
pub extra_tables: Vec<TableRef>,
#[serde(default)]
pub table_joins: Vec<Join>,
pub set: Vec<(Identifier, Expression)>,
pub from_clause: Option<From>,
#[serde(default)]
pub from_joins: Vec<Join>,
pub where_clause: Option<Where>,
#[serde(default)]
pub returning: Vec<Expression>,
#[serde(default)]
pub output: Option<OutputClause>,
#[serde(default)]
pub with: Option<With>,
#[serde(default)]
pub leading_comments: Vec<String>,
#[serde(default)]
pub limit: Option<Expression>,
#[serde(default)]
pub order_by: Option<OrderBy>,
#[serde(default)]
pub from_before_set: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Delete {
pub table: TableRef,
#[serde(default)]
pub hint: Option<Hint>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub on_cluster: Option<OnCluster>,
pub alias: Option<Identifier>,
#[serde(default)]
pub alias_explicit_as: bool,
pub using: Vec<TableRef>,
pub where_clause: Option<Where>,
#[serde(default)]
pub output: Option<OutputClause>,
#[serde(default)]
pub leading_comments: Vec<String>,
#[serde(default)]
pub with: Option<With>,
#[serde(default)]
pub limit: Option<Expression>,
#[serde(default)]
pub order_by: Option<OrderBy>,
#[serde(default)]
pub returning: Vec<Expression>,
#[serde(default)]
pub tables: Vec<TableRef>,
#[serde(default)]
pub tables_from_using: bool,
#[serde(default)]
pub joins: Vec<Join>,
#[serde(default)]
pub force_index: Option<String>,
#[serde(default)]
pub no_from: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CopyStmt {
pub this: Expression,
pub kind: bool,
pub files: Vec<Expression>,
#[serde(default)]
pub params: Vec<CopyParameter>,
#[serde(default)]
pub credentials: Option<Box<Credentials>>,
#[serde(default)]
pub is_into: bool,
#[serde(default)]
pub with_wrapped: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CopyParameter {
pub name: String,
pub value: Option<Expression>,
pub values: Vec<Expression>,
#[serde(default)]
pub eq: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Credentials {
pub credentials: Vec<(String, String)>,
pub encryption: Option<String>,
pub storage: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PutStmt {
pub source: String,
#[serde(default)]
pub source_quoted: bool,
pub target: Expression,
#[serde(default)]
pub params: Vec<CopyParameter>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StageReference {
pub name: String,
#[serde(default)]
pub path: Option<String>,
#[serde(default)]
pub file_format: Option<Expression>,
#[serde(default)]
pub pattern: Option<String>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub quoted: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct HistoricalData {
pub this: Box<Expression>,
pub kind: String,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Alias {
pub this: Expression,
pub alias: Identifier,
#[serde(default)]
pub column_aliases: Vec<Identifier>,
#[serde(default)]
pub pre_alias_comments: Vec<String>,
#[serde(default)]
pub trailing_comments: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
impl Alias {
pub fn new(this: Expression, alias: Identifier) -> Self {
Self {
this,
alias,
column_aliases: Vec::new(),
pre_alias_comments: Vec::new(),
trailing_comments: Vec::new(),
inferred_type: None,
}
}
pub fn with_columns(this: Expression, column_aliases: Vec<Identifier>) -> Self {
Self {
this,
alias: Identifier::empty(),
column_aliases,
pre_alias_comments: Vec::new(),
trailing_comments: Vec::new(),
inferred_type: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Cast {
pub this: Expression,
pub to: DataType,
#[serde(default)]
pub trailing_comments: Vec<String>,
#[serde(default)]
pub double_colon_syntax: bool,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub format: Option<Box<Expression>>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub default: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CollationExpr {
pub this: Expression,
pub collation: String,
#[serde(default)]
pub quoted: bool,
#[serde(default)]
pub double_quoted: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Case {
pub operand: Option<Expression>,
pub whens: Vec<(Expression, Expression)>,
pub else_: Option<Expression>,
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub comments: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct BinaryOp {
pub left: Expression,
pub right: Expression,
#[serde(default)]
pub left_comments: Vec<String>,
#[serde(default)]
pub operator_comments: Vec<String>,
#[serde(default)]
pub trailing_comments: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
impl BinaryOp {
pub fn new(left: Expression, right: Expression) -> Self {
Self {
left,
right,
left_comments: Vec::new(),
operator_comments: Vec::new(),
trailing_comments: Vec::new(),
inferred_type: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LikeOp {
pub left: Expression,
pub right: Expression,
#[serde(default)]
pub escape: Option<Expression>,
#[serde(default)]
pub quantifier: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
impl LikeOp {
pub fn new(left: Expression, right: Expression) -> Self {
Self {
left,
right,
escape: None,
quantifier: None,
inferred_type: None,
}
}
pub fn with_escape(left: Expression, right: Expression, escape: Expression) -> Self {
Self {
left,
right,
escape: Some(escape),
quantifier: None,
inferred_type: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UnaryOp {
pub this: Expression,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
impl UnaryOp {
pub fn new(this: Expression) -> Self {
Self {
this,
inferred_type: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct In {
pub this: Expression,
pub expressions: Vec<Expression>,
pub query: Option<Expression>,
pub not: bool,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub global: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub unnest: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub is_field: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Between {
pub this: Expression,
pub low: Expression,
pub high: Expression,
pub not: bool,
#[serde(default)]
pub symmetric: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IsNull {
pub this: Expression,
pub not: bool,
#[serde(default)]
pub postfix_form: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IsTrueFalse {
pub this: Expression,
pub not: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IsJson {
pub this: Expression,
pub json_type: Option<String>,
pub unique_keys: Option<JsonUniqueKeys>,
pub negated: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum JsonUniqueKeys {
With,
Without,
Shorthand,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Exists {
pub this: Expression,
pub not: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Function {
pub name: String,
pub args: Vec<Expression>,
pub distinct: bool,
#[serde(default)]
pub trailing_comments: Vec<String>,
#[serde(default)]
pub use_bracket_syntax: bool,
#[serde(default)]
pub no_parens: bool,
#[serde(default)]
pub quoted: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub span: Option<Span>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
impl Default for Function {
fn default() -> Self {
Self {
name: String::new(),
args: Vec::new(),
distinct: false,
trailing_comments: Vec::new(),
use_bracket_syntax: false,
no_parens: false,
quoted: false,
span: None,
inferred_type: None,
}
}
}
impl Function {
pub fn new(name: impl Into<String>, args: Vec<Expression>) -> Self {
Self {
name: name.into(),
args,
distinct: false,
trailing_comments: Vec::new(),
use_bracket_syntax: false,
no_parens: false,
quoted: false,
span: None,
inferred_type: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AggregateFunction {
pub name: String,
pub args: Vec<Expression>,
pub distinct: bool,
pub filter: Option<Expression>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub order_by: Vec<Ordered>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ignore_nulls: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WindowFunction {
pub this: Expression,
pub over: Over,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub keep: Option<Keep>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Keep {
pub first: bool,
pub order_by: Vec<Ordered>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WithinGroup {
pub this: Expression,
pub order_by: Vec<Ordered>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct From {
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Join {
pub this: Expression,
pub on: Option<Expression>,
pub using: Vec<Identifier>,
pub kind: JoinKind,
pub use_inner_keyword: bool,
pub use_outer_keyword: bool,
pub deferred_condition: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub join_hint: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub match_condition: Option<Expression>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub pivots: Vec<Expression>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub comments: Vec<String>,
#[serde(default)]
pub nesting_group: usize,
#[serde(default)]
pub directed: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum JoinKind {
Inner,
Left,
Right,
Full,
Outer, Cross,
Natural,
NaturalLeft,
NaturalRight,
NaturalFull,
Semi,
Anti,
LeftSemi,
LeftAnti,
RightSemi,
RightAnti,
CrossApply,
OuterApply,
AsOf,
AsOfLeft,
AsOfRight,
Lateral,
LeftLateral,
Straight,
Implicit,
Array,
LeftArray,
Paste,
Positional,
}
impl Default for JoinKind {
fn default() -> Self {
JoinKind::Inner
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JoinedTable {
pub left: Expression,
pub joins: Vec<Join>,
pub lateral_views: Vec<LateralView>,
pub alias: Option<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Where {
pub this: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GroupBy {
pub expressions: Vec<Expression>,
#[serde(default)]
pub all: Option<bool>,
#[serde(default)]
pub totals: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub comments: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Having {
pub this: Expression,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub comments: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OrderBy {
pub expressions: Vec<Ordered>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub siblings: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub comments: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Ordered {
pub this: Expression,
pub desc: bool,
pub nulls_first: Option<bool>,
#[serde(default)]
pub explicit_asc: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub with_fill: Option<Box<WithFill>>,
}
impl Ordered {
pub fn asc(expr: Expression) -> Self {
Self {
this: expr,
desc: false,
nulls_first: None,
explicit_asc: false,
with_fill: None,
}
}
pub fn desc(expr: Expression) -> Self {
Self {
this: expr,
desc: true,
nulls_first: None,
explicit_asc: false,
with_fill: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub struct DistributeBy {
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub struct ClusterBy {
pub expressions: Vec<Ordered>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub struct SortBy {
pub expressions: Vec<Ordered>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub struct LateralView {
pub this: Expression,
pub table_alias: Option<Identifier>,
pub column_aliases: Vec<Identifier>,
pub outer: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub struct Hint {
pub expressions: Vec<HintExpression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub enum HintExpression {
Function { name: String, args: Vec<Expression> },
Identifier(String),
Raw(String),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub enum PseudocolumnType {
Rownum, Rowid, Level, Sysdate, ObjectId, ObjectValue, }
impl PseudocolumnType {
pub fn as_str(&self) -> &'static str {
match self {
PseudocolumnType::Rownum => "ROWNUM",
PseudocolumnType::Rowid => "ROWID",
PseudocolumnType::Level => "LEVEL",
PseudocolumnType::Sysdate => "SYSDATE",
PseudocolumnType::ObjectId => "OBJECT_ID",
PseudocolumnType::ObjectValue => "OBJECT_VALUE",
}
}
pub fn from_str(s: &str) -> Option<Self> {
match s.to_uppercase().as_str() {
"ROWNUM" => Some(PseudocolumnType::Rownum),
"ROWID" => Some(PseudocolumnType::Rowid),
"LEVEL" => Some(PseudocolumnType::Level),
"SYSDATE" => Some(PseudocolumnType::Sysdate),
"OBJECT_ID" => Some(PseudocolumnType::ObjectId),
"OBJECT_VALUE" => Some(PseudocolumnType::ObjectValue),
_ => None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub struct Pseudocolumn {
pub kind: PseudocolumnType,
}
impl Pseudocolumn {
pub fn rownum() -> Self {
Self {
kind: PseudocolumnType::Rownum,
}
}
pub fn rowid() -> Self {
Self {
kind: PseudocolumnType::Rowid,
}
}
pub fn level() -> Self {
Self {
kind: PseudocolumnType::Level,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub struct Connect {
pub start: Option<Expression>,
pub connect: Expression,
pub nocycle: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub struct Prior {
pub this: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub struct ConnectByRoot {
pub this: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub struct MatchRecognize {
pub this: Option<Box<Expression>>,
pub partition_by: Option<Vec<Expression>>,
pub order_by: Option<Vec<Ordered>>,
pub measures: Option<Vec<MatchRecognizeMeasure>>,
pub rows: Option<MatchRecognizeRows>,
pub after: Option<MatchRecognizeAfter>,
pub pattern: Option<String>,
pub define: Option<Vec<(Identifier, Expression)>>,
pub alias: Option<Identifier>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub alias_explicit_as: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub struct MatchRecognizeMeasure {
pub this: Expression,
pub window_frame: Option<MatchRecognizeSemantics>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub enum MatchRecognizeSemantics {
Running,
Final,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub enum MatchRecognizeRows {
OneRowPerMatch,
AllRowsPerMatch,
AllRowsPerMatchShowEmptyMatches,
AllRowsPerMatchOmitEmptyMatches,
AllRowsPerMatchWithUnmatchedRows,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(export))]
pub enum MatchRecognizeAfter {
PastLastRow,
ToNextRow,
ToFirst(Identifier),
ToLast(Identifier),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Limit {
pub this: Expression,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub percent: bool,
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub comments: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Offset {
pub this: Expression,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub rows: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Top {
pub this: Expression,
pub percent: bool,
pub with_ties: bool,
#[serde(default)]
pub parenthesized: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Fetch {
pub direction: String,
pub count: Option<Expression>,
pub percent: bool,
pub rows: bool,
pub with_ties: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Qualify {
pub this: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Sample {
pub method: SampleMethod,
pub size: Expression,
pub seed: Option<Expression>,
#[serde(default)]
pub offset: Option<Expression>,
pub unit_after_size: bool,
#[serde(default)]
pub use_sample_keyword: bool,
#[serde(default)]
pub explicit_method: bool,
#[serde(default)]
pub method_before_size: bool,
#[serde(default)]
pub use_seed_keyword: bool,
pub bucket_numerator: Option<Box<Expression>>,
pub bucket_denominator: Option<Box<Expression>>,
pub bucket_field: Option<Box<Expression>>,
#[serde(default)]
pub is_using_sample: bool,
#[serde(default)]
pub is_percent: bool,
#[serde(default)]
pub suppress_method_output: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum SampleMethod {
Bernoulli,
System,
Block,
Row,
Percent,
Bucket,
Reservoir,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct NamedWindow {
pub name: Identifier,
pub spec: Over,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct With {
pub ctes: Vec<Cte>,
pub recursive: bool,
#[serde(default)]
pub leading_comments: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub search: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Cte {
pub alias: Identifier,
pub this: Expression,
pub columns: Vec<Identifier>,
pub materialized: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub key_expressions: Vec<Identifier>,
#[serde(default)]
pub alias_first: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub comments: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WindowSpec {
pub partition_by: Vec<Expression>,
pub order_by: Vec<Ordered>,
pub frame: Option<WindowFrame>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Over {
pub window_name: Option<Identifier>,
pub partition_by: Vec<Expression>,
pub order_by: Vec<Ordered>,
pub frame: Option<WindowFrame>,
pub alias: Option<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WindowFrame {
pub kind: WindowFrameKind,
pub start: WindowFrameBound,
pub end: Option<WindowFrameBound>,
pub exclude: Option<WindowFrameExclude>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kind_text: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub start_side_text: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub end_side_text: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum WindowFrameKind {
Rows,
Range,
Groups,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum WindowFrameExclude {
CurrentRow,
Group,
Ties,
NoOthers,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum WindowFrameBound {
CurrentRow,
UnboundedPreceding,
UnboundedFollowing,
Preceding(Box<Expression>),
Following(Box<Expression>),
BarePreceding,
BareFollowing,
Value(Box<Expression>),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StructField {
pub name: String,
pub data_type: DataType,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub options: Vec<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub comment: Option<String>,
}
impl StructField {
pub fn new(name: String, data_type: DataType) -> Self {
Self {
name,
data_type,
options: Vec::new(),
comment: None,
}
}
pub fn with_options(name: String, data_type: DataType, options: Vec<Expression>) -> Self {
Self {
name,
data_type,
options,
comment: None,
}
}
pub fn with_options_and_comment(
name: String,
data_type: DataType,
options: Vec<Expression>,
comment: Option<String>,
) -> Self {
Self {
name,
data_type,
options,
comment,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[serde(tag = "data_type", rename_all = "snake_case")]
pub enum DataType {
Boolean,
TinyInt {
length: Option<u32>,
},
SmallInt {
length: Option<u32>,
},
Int {
length: Option<u32>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
integer_spelling: bool,
},
BigInt {
length: Option<u32>,
},
Float {
precision: Option<u32>,
scale: Option<u32>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
real_spelling: bool,
},
Double {
precision: Option<u32>,
scale: Option<u32>,
},
Decimal {
precision: Option<u32>,
scale: Option<u32>,
},
Char {
length: Option<u32>,
},
VarChar {
length: Option<u32>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
parenthesized_length: bool,
},
String {
length: Option<u32>,
},
Text,
TextWithLength {
length: u32,
},
Binary {
length: Option<u32>,
},
VarBinary {
length: Option<u32>,
},
Blob,
Bit {
length: Option<u32>,
},
VarBit {
length: Option<u32>,
},
Date,
Time {
precision: Option<u32>,
#[serde(default)]
timezone: bool,
},
Timestamp {
precision: Option<u32>,
timezone: bool,
},
Interval {
unit: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
to: Option<String>,
},
Json,
JsonB,
Uuid,
Array {
element_type: Box<DataType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
dimension: Option<u32>,
},
List {
element_type: Box<DataType>,
},
Struct {
fields: Vec<StructField>,
nested: bool,
},
Map {
key_type: Box<DataType>,
value_type: Box<DataType>,
},
Enum {
values: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
assignments: Vec<Option<String>>,
},
Set {
values: Vec<String>,
},
Union {
fields: Vec<(String, DataType)>,
},
Vector {
#[serde(default)]
element_type: Option<Box<DataType>>,
dimension: Option<u32>,
},
Object {
fields: Vec<(String, DataType, bool)>,
modifier: Option<String>,
},
Nullable {
inner: Box<DataType>,
},
Custom {
name: String,
},
Geometry {
subtype: Option<String>,
srid: Option<u32>,
},
Geography {
subtype: Option<String>,
srid: Option<u32>,
},
CharacterSet {
name: String,
},
Unknown,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[cfg_attr(feature = "bindings", ts(rename = "SqlArray"))]
pub struct Array {
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Struct {
pub fields: Vec<(Option<String>, Expression)>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Tuple {
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Interval {
pub this: Option<Expression>,
pub unit: Option<IntervalUnitSpec>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum IntervalUnitSpec {
Simple {
unit: IntervalUnit,
use_plural: bool,
},
Span(IntervalSpan),
ExprSpan(IntervalSpanExpr),
Expr(Box<Expression>),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IntervalSpan {
pub this: IntervalUnit,
pub expression: IntervalUnit,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IntervalSpanExpr {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum IntervalUnit {
Year,
Quarter,
Month,
Week,
Day,
Hour,
Minute,
Second,
Millisecond,
Microsecond,
Nanosecond,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Command {
pub this: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ExecuteStatement {
pub this: Expression,
#[serde(default)]
pub parameters: Vec<ExecuteParameter>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub suffix: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ExecuteParameter {
pub name: String,
pub value: Expression,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub positional: bool,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub output: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Kill {
pub this: Expression,
pub kind: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateTask {
pub or_replace: bool,
pub if_not_exists: bool,
pub name: String,
pub properties: String,
pub body: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Raw {
pub sql: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UnaryFunc {
pub this: Expression,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub original_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
impl UnaryFunc {
pub fn new(this: Expression) -> Self {
Self {
this,
original_name: None,
inferred_type: None,
}
}
pub fn with_name(this: Expression, name: String) -> Self {
Self {
this,
original_name: Some(name),
inferred_type: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CharFunc {
pub args: Vec<Expression>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub charset: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub name: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct BinaryFunc {
pub this: Expression,
pub expression: Expression,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub original_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct VarArgFunc {
pub expressions: Vec<Expression>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub original_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ConcatWs {
pub separator: Expression,
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SubstringFunc {
pub this: Expression,
pub start: Expression,
pub length: Option<Expression>,
#[serde(default)]
pub from_for_syntax: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OverlayFunc {
pub this: Expression,
pub replacement: Expression,
pub from: Expression,
pub length: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TrimFunc {
pub this: Expression,
pub characters: Option<Expression>,
pub position: TrimPosition,
#[serde(default)]
pub sql_standard_syntax: bool,
#[serde(default)]
pub position_explicit: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum TrimPosition {
Both,
Leading,
Trailing,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ReplaceFunc {
pub this: Expression,
pub old: Expression,
pub new: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LeftRightFunc {
pub this: Expression,
pub length: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RepeatFunc {
pub this: Expression,
pub times: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PadFunc {
pub this: Expression,
pub length: Expression,
pub fill: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SplitFunc {
pub this: Expression,
pub delimiter: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegexpFunc {
pub this: Expression,
pub pattern: Expression,
pub flags: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegexpReplaceFunc {
pub this: Expression,
pub pattern: Expression,
pub replacement: Expression,
pub flags: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegexpExtractFunc {
pub this: Expression,
pub pattern: Expression,
pub group: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RoundFunc {
pub this: Expression,
pub decimals: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FloorFunc {
pub this: Expression,
pub scale: Option<Expression>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub to: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CeilFunc {
pub this: Expression,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub decimals: Option<Expression>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub to: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LogFunc {
pub this: Expression,
pub base: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CurrentDate;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CurrentTime {
pub precision: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CurrentTimestamp {
pub precision: Option<u32>,
#[serde(default)]
pub sysdate: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CurrentTimestampLTZ {
pub precision: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AtTimeZone {
pub this: Expression,
pub zone: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DateAddFunc {
pub this: Expression,
pub interval: Expression,
pub unit: IntervalUnit,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DateDiffFunc {
pub this: Expression,
pub expression: Expression,
pub unit: Option<IntervalUnit>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DateTruncFunc {
pub this: Expression,
pub unit: DateTimeField,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ExtractFunc {
pub this: Expression,
pub field: DateTimeField,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum DateTimeField {
Year,
Month,
Day,
Hour,
Minute,
Second,
Millisecond,
Microsecond,
DayOfWeek,
DayOfYear,
Week,
WeekWithModifier(String),
Quarter,
Epoch,
Timezone,
TimezoneHour,
TimezoneMinute,
Date,
Time,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ToDateFunc {
pub this: Expression,
pub format: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ToTimestampFunc {
pub this: Expression,
pub format: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IfFunc {
pub condition: Expression,
pub true_value: Expression,
pub false_value: Option<Expression>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub original_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Nvl2Func {
pub this: Expression,
pub true_value: Expression,
pub false_value: Expression,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AggFunc {
pub this: Expression,
pub distinct: bool,
pub filter: Option<Expression>,
pub order_by: Vec<Ordered>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub ignore_nulls: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub having_max: Option<(Box<Expression>, bool)>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub limit: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CountFunc {
pub this: Option<Expression>,
pub star: bool,
pub distinct: bool,
pub filter: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ignore_nulls: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub original_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GroupConcatFunc {
pub this: Expression,
pub separator: Option<Expression>,
pub order_by: Option<Vec<Ordered>>,
pub distinct: bool,
pub filter: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StringAggFunc {
pub this: Expression,
#[serde(default)]
pub separator: Option<Expression>,
#[serde(default)]
pub order_by: Option<Vec<Ordered>>,
#[serde(default)]
pub distinct: bool,
#[serde(default)]
pub filter: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ListAggFunc {
pub this: Expression,
pub separator: Option<Expression>,
pub on_overflow: Option<ListAggOverflow>,
pub order_by: Option<Vec<Ordered>>,
pub distinct: bool,
pub filter: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum ListAggOverflow {
Error,
Truncate {
filler: Option<Expression>,
with_count: bool,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SumIfFunc {
pub this: Expression,
pub condition: Expression,
pub filter: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub inferred_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ApproxPercentileFunc {
pub this: Expression,
pub percentile: Expression,
pub accuracy: Option<Expression>,
pub filter: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PercentileFunc {
pub this: Expression,
pub percentile: Expression,
pub order_by: Option<Vec<Ordered>>,
pub filter: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RowNumber;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Rank {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub order_by: Option<Vec<Ordered>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub args: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DenseRank {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub args: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct NTileFunc {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub num_buckets: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub order_by: Option<Vec<Ordered>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LeadLagFunc {
pub this: Expression,
pub offset: Option<Expression>,
pub default: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ignore_nulls: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ValueFunc {
pub this: Expression,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ignore_nulls: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub order_by: Vec<Ordered>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct NthValueFunc {
pub this: Expression,
pub offset: Expression,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ignore_nulls: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub from_first: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PercentRank {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub order_by: Option<Vec<Ordered>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub args: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CumeDist {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub order_by: Option<Vec<Ordered>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub args: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PositionFunc {
pub substring: Expression,
pub string: Expression,
pub start: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Random;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Rand {
pub seed: Option<Box<Expression>>,
#[serde(default)]
pub lower: Option<Box<Expression>>,
#[serde(default)]
pub upper: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TruncateFunc {
pub this: Expression,
pub decimals: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Pi;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DecodeFunc {
pub this: Expression,
pub search_results: Vec<(Expression, Expression)>,
pub default: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DateFormatFunc {
pub this: Expression,
pub format: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FromUnixtimeFunc {
pub this: Expression,
pub format: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UnixTimestampFunc {
pub this: Option<Expression>,
pub format: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MakeDateFunc {
pub year: Expression,
pub month: Expression,
pub day: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MakeTimestampFunc {
pub year: Expression,
pub month: Expression,
pub day: Expression,
pub hour: Expression,
pub minute: Expression,
pub second: Expression,
pub timezone: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LastDayFunc {
pub this: Expression,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub unit: Option<DateTimeField>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArrayConstructor {
pub expressions: Vec<Expression>,
pub bracket_notation: bool,
pub use_list_keyword: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArraySortFunc {
pub this: Expression,
pub comparator: Option<Expression>,
pub desc: bool,
pub nulls_first: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArrayJoinFunc {
pub this: Expression,
pub separator: Expression,
pub null_replacement: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UnnestFunc {
pub this: Expression,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub expressions: Vec<Expression>,
pub with_ordinality: bool,
pub alias: Option<Identifier>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub offset_alias: Option<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArrayFilterFunc {
pub this: Expression,
pub filter: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArrayTransformFunc {
pub this: Expression,
pub transform: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SequenceFunc {
pub start: Expression,
pub stop: Expression,
pub step: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StructConstructor {
pub fields: Vec<(Option<Identifier>, Expression)>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StructExtractFunc {
pub this: Expression,
pub field: Identifier,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct NamedStructFunc {
pub pairs: Vec<(Expression, Expression)>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MapConstructor {
pub keys: Vec<Expression>,
pub values: Vec<Expression>,
#[serde(default)]
pub curly_brace_syntax: bool,
#[serde(default)]
pub with_map_keyword: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TransformFunc {
pub this: Expression,
pub transform: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FunctionEmits {
pub this: Expression,
pub emits: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JsonExtractFunc {
pub this: Expression,
pub path: Expression,
pub returning: Option<DataType>,
#[serde(default)]
pub arrow_syntax: bool,
#[serde(default)]
pub hash_arrow_syntax: bool,
#[serde(default)]
pub wrapper_option: Option<String>,
#[serde(default)]
pub quotes_option: Option<String>,
#[serde(default)]
pub on_scalar_string: bool,
#[serde(default)]
pub on_error: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JsonPathFunc {
pub this: Expression,
pub paths: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JsonObjectFunc {
pub pairs: Vec<(Expression, Expression)>,
pub null_handling: Option<JsonNullHandling>,
#[serde(default)]
pub with_unique_keys: bool,
#[serde(default)]
pub returning_type: Option<DataType>,
#[serde(default)]
pub format_json: bool,
#[serde(default)]
pub encoding: Option<String>,
#[serde(default)]
pub star: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum JsonNullHandling {
NullOnNull,
AbsentOnNull,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JsonModifyFunc {
pub this: Expression,
pub path_values: Vec<(Expression, Expression)>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JsonArrayAggFunc {
pub this: Expression,
pub order_by: Option<Vec<Ordered>>,
pub null_handling: Option<JsonNullHandling>,
pub filter: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JsonObjectAggFunc {
pub key: Expression,
pub value: Expression,
pub null_handling: Option<JsonNullHandling>,
pub filter: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ConvertFunc {
pub this: Expression,
pub to: DataType,
pub style: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LambdaExpr {
pub parameters: Vec<Identifier>,
pub body: Expression,
#[serde(default)]
pub colon: bool,
#[serde(default)]
pub parameter_types: Vec<Option<DataType>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Parameter {
pub name: Option<String>,
pub index: Option<u32>,
pub style: ParameterStyle,
#[serde(default)]
pub quoted: bool,
#[serde(default)]
pub string_quoted: bool,
#[serde(default)]
pub expression: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum ParameterStyle {
Question, Dollar, DollarBrace, Brace, Colon, At, DoubleAt, DoubleDollar, Percent, }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Placeholder {
pub index: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct NamedArgument {
pub name: Identifier,
pub value: Expression,
pub separator: NamedArgSeparator,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum NamedArgSeparator {
DArrow,
ColonEq,
Eq,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TableArgument {
pub prefix: String,
pub this: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SqlComment {
pub text: String,
pub is_block: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SimilarToExpr {
pub this: Expression,
pub pattern: Expression,
pub escape: Option<Expression>,
pub not: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct QuantifiedExpr {
pub this: Expression,
pub subquery: Expression,
pub op: Option<QuantifiedOp>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum QuantifiedOp {
Eq,
Neq,
Lt,
Lte,
Gt,
Gte,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OverlapsExpr {
#[serde(skip_serializing_if = "Option::is_none")]
pub this: Option<Expression>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expression: Option<Expression>,
#[serde(skip_serializing_if = "Option::is_none")]
pub left_start: Option<Expression>,
#[serde(skip_serializing_if = "Option::is_none")]
pub left_end: Option<Expression>,
#[serde(skip_serializing_if = "Option::is_none")]
pub right_start: Option<Expression>,
#[serde(skip_serializing_if = "Option::is_none")]
pub right_end: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Subscript {
pub this: Expression,
pub index: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DotAccess {
pub this: Expression,
pub field: Identifier,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MethodCall {
pub this: Expression,
pub method: Identifier,
pub args: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArraySlice {
pub this: Expression,
pub start: Option<Expression>,
pub end: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum OnCommit {
PreserveRows,
DeleteRows,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateTable {
pub name: TableRef,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub on_cluster: Option<OnCluster>,
pub columns: Vec<ColumnDef>,
pub constraints: Vec<TableConstraint>,
pub if_not_exists: bool,
pub temporary: bool,
pub or_replace: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub table_modifier: Option<String>,
pub as_select: Option<Expression>,
#[serde(default)]
pub as_select_parenthesized: bool,
#[serde(default)]
pub on_commit: Option<OnCommit>,
#[serde(default)]
pub clone_source: Option<TableRef>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub clone_at_clause: Option<Expression>,
#[serde(default)]
pub is_copy: bool,
#[serde(default)]
pub shallow_clone: bool,
#[serde(default)]
pub leading_comments: Vec<String>,
#[serde(default)]
pub with_properties: Vec<(String, String)>,
#[serde(default)]
pub teradata_post_name_options: Vec<String>,
#[serde(default)]
pub with_data: Option<bool>,
#[serde(default)]
pub with_statistics: Option<bool>,
#[serde(default)]
pub teradata_indexes: Vec<TeradataIndex>,
#[serde(default)]
pub with_cte: Option<With>,
#[serde(default)]
pub properties: Vec<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub partition_of: Option<Expression>,
#[serde(default)]
pub post_table_properties: Vec<Expression>,
#[serde(default)]
pub mysql_table_options: Vec<(String, String)>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub inherits: Vec<TableRef>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub on_property: Option<OnProperty>,
#[serde(default)]
pub copy_grants: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub using_template: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub rollup: Option<RollupProperty>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub uuid: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub with_partition_columns: Vec<ColumnDef>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub with_connection: Option<TableRef>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TeradataIndex {
pub kind: TeradataIndexKind,
pub name: Option<String>,
pub columns: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum TeradataIndexKind {
NoPrimary,
Primary,
PrimaryAmp,
Unique,
UniquePrimary,
Secondary,
}
impl CreateTable {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
on_cluster: None,
columns: Vec::new(),
constraints: Vec::new(),
if_not_exists: false,
temporary: false,
or_replace: false,
table_modifier: None,
as_select: None,
as_select_parenthesized: false,
on_commit: None,
clone_source: None,
clone_at_clause: None,
shallow_clone: false,
is_copy: false,
leading_comments: Vec::new(),
with_properties: Vec::new(),
teradata_post_name_options: Vec::new(),
with_data: None,
with_statistics: None,
teradata_indexes: Vec::new(),
with_cte: None,
properties: Vec::new(),
partition_of: None,
post_table_properties: Vec::new(),
mysql_table_options: Vec::new(),
inherits: Vec::new(),
on_property: None,
copy_grants: false,
using_template: None,
rollup: None,
uuid: None,
with_partition_columns: Vec::new(),
with_connection: None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum SortOrder {
Asc,
Desc,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum ConstraintType {
NotNull,
Null,
PrimaryKey,
Unique,
Default,
AutoIncrement,
Collate,
Comment,
References,
Check,
GeneratedAsIdentity,
Tags,
ComputedColumn,
GeneratedAsRow,
OnUpdate,
Path,
Encode,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ColumnDef {
pub name: Identifier,
pub data_type: DataType,
pub nullable: Option<bool>,
pub default: Option<Expression>,
pub primary_key: bool,
#[serde(default)]
pub primary_key_order: Option<SortOrder>,
pub unique: bool,
#[serde(default)]
pub unique_nulls_not_distinct: bool,
pub auto_increment: bool,
pub comment: Option<String>,
pub constraints: Vec<ColumnConstraint>,
#[serde(default)]
pub constraint_order: Vec<ConstraintType>,
#[serde(default)]
pub format: Option<String>,
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub inline_length: Option<u64>,
#[serde(default)]
pub compress: Option<Vec<Expression>>,
#[serde(default)]
pub character_set: Option<String>,
#[serde(default)]
pub uppercase: bool,
#[serde(default)]
pub casespecific: Option<bool>,
#[serde(default)]
pub auto_increment_start: Option<Box<Expression>>,
#[serde(default)]
pub auto_increment_increment: Option<Box<Expression>>,
#[serde(default)]
pub auto_increment_order: Option<bool>,
#[serde(default)]
pub unsigned: bool,
#[serde(default)]
pub zerofill: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub on_update: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub visible: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub unique_constraint_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub not_null_constraint_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub primary_key_constraint_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub check_constraint_name: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub options: Vec<Expression>,
#[serde(default)]
pub no_type: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub encoding: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub codec: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ephemeral: Option<Option<Box<Expression>>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub materialized_expr: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub alias_expr: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ttl_expr: Option<Box<Expression>>,
#[serde(default)]
pub not_for_replication: bool,
}
impl ColumnDef {
pub fn new(name: impl Into<String>, data_type: DataType) -> Self {
Self {
name: Identifier::new(name),
data_type,
nullable: None,
default: None,
primary_key: false,
primary_key_order: None,
unique: false,
unique_nulls_not_distinct: false,
auto_increment: false,
comment: None,
constraints: Vec::new(),
constraint_order: Vec::new(),
format: None,
title: None,
inline_length: None,
compress: None,
character_set: None,
uppercase: false,
casespecific: None,
auto_increment_start: None,
auto_increment_increment: None,
auto_increment_order: None,
unsigned: false,
zerofill: false,
on_update: None,
visible: None,
unique_constraint_name: None,
not_null_constraint_name: None,
primary_key_constraint_name: None,
check_constraint_name: None,
options: Vec::new(),
no_type: false,
encoding: None,
codec: None,
ephemeral: None,
materialized_expr: None,
alias_expr: None,
ttl_expr: None,
not_for_replication: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum ColumnConstraint {
NotNull,
Null,
Unique,
PrimaryKey,
Default(Expression),
Check(Expression),
References(ForeignKeyRef),
GeneratedAsIdentity(GeneratedAsIdentity),
Collate(Identifier),
Comment(String),
Tags(Tags),
ComputedColumn(ComputedColumn),
GeneratedAsRow(GeneratedAsRow),
Path(Expression),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ComputedColumn {
pub expression: Box<Expression>,
#[serde(default)]
pub persisted: bool,
#[serde(default)]
pub not_null: bool,
#[serde(default)]
pub persistence_kind: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub data_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GeneratedAsRow {
pub start: bool,
#[serde(default)]
pub hidden: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GeneratedAsIdentity {
pub always: bool,
pub on_null: bool,
pub start: Option<Box<Expression>>,
pub increment: Option<Box<Expression>>,
pub minvalue: Option<Box<Expression>>,
pub maxvalue: Option<Box<Expression>>,
pub cycle: Option<bool>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ConstraintModifiers {
pub enforced: Option<bool>,
pub deferrable: Option<bool>,
pub initially_deferred: Option<bool>,
pub norely: bool,
pub rely: bool,
#[serde(default)]
pub using: Option<String>,
#[serde(default)]
pub using_before_columns: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub comment: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub visible: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub engine_attribute: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub with_parser: Option<String>,
#[serde(default)]
pub not_valid: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub clustered: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub on_conflict: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub with_options: Vec<(String, String)>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub on_filegroup: Option<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum TableConstraint {
PrimaryKey {
name: Option<Identifier>,
columns: Vec<Identifier>,
#[serde(default)]
include_columns: Vec<Identifier>,
#[serde(default)]
modifiers: ConstraintModifiers,
#[serde(default)]
has_constraint_keyword: bool,
},
Unique {
name: Option<Identifier>,
columns: Vec<Identifier>,
#[serde(default)]
columns_parenthesized: bool,
#[serde(default)]
modifiers: ConstraintModifiers,
#[serde(default)]
has_constraint_keyword: bool,
#[serde(default)]
nulls_not_distinct: bool,
},
ForeignKey {
name: Option<Identifier>,
columns: Vec<Identifier>,
#[serde(default)]
references: Option<ForeignKeyRef>,
#[serde(default)]
on_delete: Option<ReferentialAction>,
#[serde(default)]
on_update: Option<ReferentialAction>,
#[serde(default)]
modifiers: ConstraintModifiers,
},
Check {
name: Option<Identifier>,
expression: Expression,
#[serde(default)]
modifiers: ConstraintModifiers,
},
Assume {
name: Option<Identifier>,
expression: Expression,
},
Default {
name: Option<Identifier>,
expression: Expression,
column: Identifier,
},
Index {
name: Option<Identifier>,
columns: Vec<Identifier>,
#[serde(default)]
kind: Option<String>,
#[serde(default)]
modifiers: ConstraintModifiers,
#[serde(default)]
use_key_keyword: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
expression: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
index_type: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
granularity: Option<Box<Expression>>,
},
Projection {
name: Identifier,
expression: Expression,
},
Like {
source: TableRef,
options: Vec<(LikeOptionAction, String)>,
},
PeriodForSystemTime {
start_col: Identifier,
end_col: Identifier,
},
Exclude {
name: Option<Identifier>,
#[serde(default)]
using: Option<String>,
elements: Vec<ExcludeElement>,
#[serde(default)]
include_columns: Vec<Identifier>,
#[serde(default)]
where_clause: Option<Box<Expression>>,
#[serde(default)]
with_params: Vec<(String, String)>,
#[serde(default)]
using_index_tablespace: Option<String>,
#[serde(default)]
modifiers: ConstraintModifiers,
},
Tags(Tags),
InitiallyDeferred {
deferred: bool,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ExcludeElement {
pub expression: String,
pub operator: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum LikeOptionAction {
Including,
Excluding,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum MatchType {
Full,
Partial,
Simple,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ForeignKeyRef {
pub table: TableRef,
pub columns: Vec<Identifier>,
pub on_delete: Option<ReferentialAction>,
pub on_update: Option<ReferentialAction>,
#[serde(default)]
pub on_update_first: bool,
#[serde(default)]
pub match_type: Option<MatchType>,
#[serde(default)]
pub match_after_actions: bool,
#[serde(default)]
pub constraint_name: Option<String>,
#[serde(default)]
pub deferrable: Option<bool>,
#[serde(default)]
pub has_foreign_key_keywords: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum ReferentialAction {
Cascade,
SetNull,
SetDefault,
Restrict,
NoAction,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropTable {
pub names: Vec<TableRef>,
pub if_exists: bool,
pub cascade: bool,
#[serde(default)]
pub cascade_constraints: bool,
#[serde(default)]
pub purge: bool,
#[serde(default)]
pub leading_comments: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub object_id_args: Option<String>,
#[serde(default)]
pub sync: bool,
#[serde(default)]
pub iceberg: bool,
#[serde(default)]
pub restrict: bool,
}
impl DropTable {
pub fn new(name: impl Into<String>) -> Self {
Self {
names: vec![TableRef::new(name)],
if_exists: false,
cascade: false,
cascade_constraints: false,
purge: false,
leading_comments: Vec::new(),
object_id_args: None,
sync: false,
iceberg: false,
restrict: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Undrop {
pub kind: String,
pub name: TableRef,
#[serde(default)]
pub if_exists: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AlterTable {
pub name: TableRef,
pub actions: Vec<AlterTableAction>,
#[serde(default)]
pub if_exists: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub algorithm: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lock: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub with_check: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub partition: Option<Vec<(Identifier, Expression)>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub on_cluster: Option<OnCluster>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub table_modifier: Option<String>,
}
impl AlterTable {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
actions: Vec::new(),
if_exists: false,
algorithm: None,
lock: None,
with_check: None,
partition: None,
on_cluster: None,
table_modifier: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum ColumnPosition {
First,
After(Identifier),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum AlterTableAction {
AddColumn {
column: ColumnDef,
if_not_exists: bool,
position: Option<ColumnPosition>,
},
DropColumn {
name: Identifier,
if_exists: bool,
cascade: bool,
},
RenameColumn {
old_name: Identifier,
new_name: Identifier,
if_exists: bool,
},
AlterColumn {
name: Identifier,
action: AlterColumnAction,
#[serde(default)]
use_modify_keyword: bool,
},
RenameTable(TableRef),
AddConstraint(TableConstraint),
DropConstraint {
name: Identifier,
if_exists: bool,
},
DropForeignKey {
name: Identifier,
},
DropPartition {
partitions: Vec<Vec<(Identifier, Expression)>>,
if_exists: bool,
},
AddPartition {
partition: Expression,
if_not_exists: bool,
location: Option<Expression>,
},
Delete {
where_clause: Expression,
},
SwapWith(TableRef),
SetProperty {
properties: Vec<(String, Expression)>,
},
UnsetProperty {
properties: Vec<String>,
},
ClusterBy {
expressions: Vec<Expression>,
},
SetTag {
expressions: Vec<(String, Expression)>,
},
UnsetTag {
names: Vec<String>,
},
SetOptions {
expressions: Vec<Expression>,
},
AlterIndex {
name: Identifier,
visible: bool,
},
SetAttribute {
attribute: String,
},
SetStageFileFormat {
options: Option<Expression>,
},
SetStageCopyOptions {
options: Option<Expression>,
},
AddColumns {
columns: Vec<ColumnDef>,
cascade: bool,
},
DropColumns {
names: Vec<Identifier>,
},
ChangeColumn {
old_name: Identifier,
new_name: Identifier,
#[serde(default, skip_serializing_if = "Option::is_none")]
data_type: Option<DataType>,
comment: Option<String>,
#[serde(default)]
cascade: bool,
},
AlterSortKey {
this: Option<String>,
expressions: Vec<Expression>,
compound: bool,
},
AlterDistStyle {
style: String,
distkey: Option<Identifier>,
},
SetTableProperties {
properties: Vec<(Expression, Expression)>,
},
SetLocation {
location: String,
},
SetFileFormat {
format: String,
},
ReplacePartition {
partition: Expression,
source: Option<Box<Expression>>,
},
Raw {
sql: String,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum AlterColumnAction {
SetDataType {
data_type: DataType,
using: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
collate: Option<String>,
},
SetDefault(Expression),
DropDefault,
SetNotNull,
DropNotNull,
Comment(String),
SetVisible,
SetInvisible,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateIndex {
pub name: Identifier,
pub table: TableRef,
pub columns: Vec<IndexColumn>,
pub unique: bool,
pub if_not_exists: bool,
pub using: Option<String>,
#[serde(default)]
pub clustered: Option<String>,
#[serde(default)]
pub concurrently: bool,
#[serde(default)]
pub where_clause: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub include_columns: Vec<Identifier>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub with_options: Vec<(String, String)>,
#[serde(default)]
pub on_filegroup: Option<String>,
}
impl CreateIndex {
pub fn new(name: impl Into<String>, table: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
table: TableRef::new(table),
columns: Vec::new(),
unique: false,
if_not_exists: false,
using: None,
clustered: None,
concurrently: false,
where_clause: None,
include_columns: Vec::new(),
with_options: Vec::new(),
on_filegroup: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IndexColumn {
pub column: Identifier,
pub desc: bool,
#[serde(default)]
pub asc: bool,
pub nulls_first: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub opclass: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropIndex {
pub name: Identifier,
pub table: Option<TableRef>,
pub if_exists: bool,
#[serde(default)]
pub concurrently: bool,
}
impl DropIndex {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
table: None,
if_exists: false,
concurrently: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ViewColumn {
pub name: Identifier,
pub comment: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub options: Vec<Expression>,
}
impl ViewColumn {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
comment: None,
options: Vec::new(),
}
}
pub fn with_comment(name: impl Into<String>, comment: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
comment: Some(comment.into()),
options: Vec::new(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateView {
pub name: TableRef,
pub columns: Vec<ViewColumn>,
pub query: Expression,
pub or_replace: bool,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub or_alter: bool,
pub if_not_exists: bool,
pub materialized: bool,
pub temporary: bool,
#[serde(default)]
pub secure: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub algorithm: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub definer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub security: Option<FunctionSecurity>,
#[serde(default = "default_true")]
pub security_sql_style: bool,
#[serde(default)]
pub security_after_name: bool,
#[serde(default)]
pub query_parenthesized: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub locking_mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub locking_access: Option<String>,
#[serde(default)]
pub copy_grants: bool,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub comment: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub row_access_policy: Option<String>,
#[serde(default)]
pub tags: Vec<(String, String)>,
#[serde(default)]
pub options: Vec<Expression>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub build: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub refresh: Option<Box<RefreshTriggerProperty>>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub schema: Option<Box<Schema>>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub unique_key: Option<Box<UniqueKeyProperty>>,
#[serde(default)]
pub no_schema_binding: bool,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub auto_refresh: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub on_cluster: Option<OnCluster>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub to_table: Option<TableRef>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub table_properties: Vec<Expression>,
}
impl CreateView {
pub fn new(name: impl Into<String>, query: Expression) -> Self {
Self {
name: TableRef::new(name),
columns: Vec::new(),
query,
or_replace: false,
or_alter: false,
if_not_exists: false,
materialized: false,
temporary: false,
secure: false,
algorithm: None,
definer: None,
security: None,
security_sql_style: true,
security_after_name: false,
query_parenthesized: false,
locking_mode: None,
locking_access: None,
copy_grants: false,
comment: None,
row_access_policy: None,
tags: Vec::new(),
options: Vec::new(),
build: None,
refresh: None,
schema: None,
unique_key: None,
no_schema_binding: false,
auto_refresh: None,
on_cluster: None,
to_table: None,
table_properties: Vec::new(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropView {
pub name: TableRef,
pub if_exists: bool,
pub materialized: bool,
}
impl DropView {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
if_exists: false,
materialized: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Truncate {
#[serde(default)]
pub target: TruncateTarget,
#[serde(default)]
pub if_exists: bool,
pub table: TableRef,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub on_cluster: Option<OnCluster>,
pub cascade: bool,
#[serde(default)]
pub extra_tables: Vec<TruncateTableEntry>,
#[serde(default)]
pub identity: Option<TruncateIdentity>,
#[serde(default)]
pub restrict: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub partition: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TruncateTableEntry {
pub table: TableRef,
#[serde(default)]
pub star: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum TruncateTarget {
Table,
Database,
}
impl Default for TruncateTarget {
fn default() -> Self {
TruncateTarget::Table
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum TruncateIdentity {
Restart,
Continue,
}
impl Truncate {
pub fn new(table: impl Into<String>) -> Self {
Self {
target: TruncateTarget::Table,
if_exists: false,
table: TableRef::new(table),
on_cluster: None,
cascade: false,
extra_tables: Vec::new(),
identity: None,
restrict: false,
partition: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Use {
pub kind: Option<UseKind>,
pub this: Identifier,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum UseKind {
Database,
Schema,
Role,
Warehouse,
Catalog,
SecondaryRoles,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SetStatement {
pub items: Vec<SetItem>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SetItem {
pub name: Expression,
pub value: Expression,
pub kind: Option<String>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub no_equals: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Cache {
pub table: Identifier,
pub lazy: bool,
pub options: Vec<(Expression, Expression)>,
pub query: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Uncache {
pub table: Identifier,
pub if_exists: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LoadData {
pub local: bool,
pub inpath: String,
pub overwrite: bool,
pub table: Expression,
pub partition: Vec<(Identifier, Expression)>,
pub input_format: Option<String>,
pub serde: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Pragma {
pub schema: Option<Identifier>,
pub name: Identifier,
pub value: Option<Expression>,
pub args: Vec<Expression>,
#[serde(default)]
pub use_assignment_syntax: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Privilege {
pub name: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub columns: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GrantPrincipal {
pub name: Identifier,
pub is_role: bool,
#[serde(default)]
pub is_group: bool,
#[serde(default)]
pub is_share: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Grant {
pub privileges: Vec<Privilege>,
pub kind: Option<String>,
pub securable: Identifier,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub function_params: Vec<String>,
pub principals: Vec<GrantPrincipal>,
pub grant_option: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub as_principal: Option<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Revoke {
pub privileges: Vec<Privilege>,
pub kind: Option<String>,
pub securable: Identifier,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub function_params: Vec<String>,
pub principals: Vec<GrantPrincipal>,
pub grant_option: bool,
pub cascade: bool,
#[serde(default)]
pub restrict: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Comment {
pub this: Expression,
pub kind: String,
pub expression: Expression,
pub exists: bool,
pub materialized: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AlterView {
pub name: TableRef,
pub actions: Vec<AlterViewAction>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub algorithm: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub definer: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sql_security: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub with_option: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub columns: Vec<ViewColumn>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum AlterViewAction {
Rename(TableRef),
OwnerTo(Identifier),
SetSchema(Identifier),
SetAuthorization(String),
AlterColumn {
name: Identifier,
action: AlterColumnAction,
},
AsSelect(Box<Expression>),
SetTblproperties(Vec<(String, String)>),
UnsetTblproperties(Vec<String>),
}
impl AlterView {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
actions: Vec::new(),
algorithm: None,
definer: None,
sql_security: None,
with_option: None,
columns: Vec::new(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AlterIndex {
pub name: Identifier,
pub table: Option<TableRef>,
pub actions: Vec<AlterIndexAction>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum AlterIndexAction {
Rename(Identifier),
SetTablespace(Identifier),
Visible(bool),
}
impl AlterIndex {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
table: None,
actions: Vec::new(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateSchema {
pub name: Vec<Identifier>,
pub if_not_exists: bool,
pub authorization: Option<Identifier>,
#[serde(default)]
pub clone_from: Option<Vec<Identifier>>,
#[serde(default)]
pub at_clause: Option<Expression>,
#[serde(default)]
pub properties: Vec<Expression>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub leading_comments: Vec<String>,
}
impl CreateSchema {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: vec![Identifier::new(name)],
if_not_exists: false,
authorization: None,
clone_from: None,
at_clause: None,
properties: Vec::new(),
leading_comments: Vec::new(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropSchema {
pub name: Identifier,
pub if_exists: bool,
pub cascade: bool,
}
impl DropSchema {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
if_exists: false,
cascade: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropNamespace {
pub name: Identifier,
pub if_exists: bool,
pub cascade: bool,
}
impl DropNamespace {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
if_exists: false,
cascade: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateDatabase {
pub name: Identifier,
pub if_not_exists: bool,
pub options: Vec<DatabaseOption>,
#[serde(default)]
pub clone_from: Option<Identifier>,
#[serde(default)]
pub at_clause: Option<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum DatabaseOption {
CharacterSet(String),
Collate(String),
Owner(Identifier),
Template(Identifier),
Encoding(String),
Location(String),
}
impl CreateDatabase {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
if_not_exists: false,
options: Vec::new(),
clone_from: None,
at_clause: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropDatabase {
pub name: Identifier,
pub if_exists: bool,
#[serde(default)]
pub sync: bool,
}
impl DropDatabase {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
if_exists: false,
sync: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateFunction {
pub name: TableRef,
pub parameters: Vec<FunctionParameter>,
pub return_type: Option<DataType>,
pub body: Option<FunctionBody>,
pub or_replace: bool,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub or_alter: bool,
pub if_not_exists: bool,
pub temporary: bool,
pub language: Option<String>,
pub deterministic: Option<bool>,
pub returns_null_on_null_input: Option<bool>,
pub security: Option<FunctionSecurity>,
#[serde(default = "default_true")]
pub has_parens: bool,
#[serde(default)]
pub sql_data_access: Option<SqlDataAccess>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub returns_table_body: Option<String>,
#[serde(default)]
pub language_first: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub set_options: Vec<FunctionSetOption>,
#[serde(default)]
pub strict: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub options: Vec<Expression>,
#[serde(default)]
pub is_table_function: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub property_order: Vec<FunctionPropertyKind>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub using_resources: Vec<FunctionUsingResource>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub environment: Vec<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub handler: Option<String>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub handler_uses_eq: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub runtime_version: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub packages: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub parameter_style: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FunctionSetOption {
pub name: String,
pub value: FunctionSetValue,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum FunctionSetValue {
Value { value: String, use_to: bool },
FromCurrent,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum SqlDataAccess {
NoSql,
ContainsSql,
ReadsSqlData,
ModifiesSqlData,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum FunctionPropertyKind {
Set,
As,
Using,
Language,
Determinism,
NullInput,
Security,
SqlDataAccess,
Options,
Environment,
Handler,
RuntimeVersion,
Packages,
ParameterStyle,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FunctionUsingResource {
pub kind: String,
pub uri: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FunctionParameter {
pub name: Option<Identifier>,
pub data_type: DataType,
pub mode: Option<ParameterMode>,
pub default: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub mode_text: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum ParameterMode {
In,
Out,
InOut,
Variadic,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum FunctionBody {
Block(String),
StringLiteral(String),
Expression(Expression),
External(String),
Return(Expression),
Statements(Vec<Expression>),
DollarQuoted {
content: String,
tag: Option<String>,
},
RawBlock(String),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum FunctionSecurity {
Definer,
Invoker,
None,
}
impl CreateFunction {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
parameters: Vec::new(),
return_type: None,
body: None,
or_replace: false,
or_alter: false,
if_not_exists: false,
temporary: false,
language: None,
deterministic: None,
returns_null_on_null_input: None,
security: None,
has_parens: true,
sql_data_access: None,
returns_table_body: None,
language_first: false,
set_options: Vec::new(),
strict: false,
options: Vec::new(),
is_table_function: false,
property_order: Vec::new(),
using_resources: Vec::new(),
environment: Vec::new(),
handler: None,
handler_uses_eq: false,
runtime_version: None,
packages: None,
parameter_style: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropFunction {
pub name: TableRef,
pub parameters: Option<Vec<DataType>>,
pub if_exists: bool,
pub cascade: bool,
}
impl DropFunction {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
parameters: None,
if_exists: false,
cascade: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateProcedure {
pub name: TableRef,
pub parameters: Vec<FunctionParameter>,
pub body: Option<FunctionBody>,
pub or_replace: bool,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub or_alter: bool,
pub if_not_exists: bool,
pub language: Option<String>,
pub security: Option<FunctionSecurity>,
#[serde(default)]
pub return_type: Option<DataType>,
#[serde(default)]
pub execute_as: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub with_options: Vec<String>,
#[serde(default = "default_true", skip_serializing_if = "is_true")]
pub has_parens: bool,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub use_proc_keyword: bool,
}
impl CreateProcedure {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
parameters: Vec::new(),
body: None,
or_replace: false,
or_alter: false,
if_not_exists: false,
language: None,
security: None,
return_type: None,
execute_as: None,
with_options: Vec::new(),
has_parens: true,
use_proc_keyword: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropProcedure {
pub name: TableRef,
pub parameters: Option<Vec<DataType>>,
pub if_exists: bool,
pub cascade: bool,
}
impl DropProcedure {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
parameters: None,
if_exists: false,
cascade: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum SeqPropKind {
Start,
Increment,
Minvalue,
Maxvalue,
Cache,
NoCache,
Cycle,
NoCycle,
OwnedBy,
Order,
NoOrder,
Comment,
Sharing,
Keep,
NoKeep,
Scale,
NoScale,
Shard,
NoShard,
Session,
Global,
NoCacheWord,
NoCycleWord,
NoMinvalueWord,
NoMaxvalueWord,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateSynonym {
pub name: TableRef,
pub target: TableRef,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateSequence {
pub name: TableRef,
pub if_not_exists: bool,
pub temporary: bool,
#[serde(default)]
pub or_replace: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub as_type: Option<DataType>,
pub increment: Option<i64>,
pub minvalue: Option<SequenceBound>,
pub maxvalue: Option<SequenceBound>,
pub start: Option<i64>,
pub cache: Option<i64>,
pub cycle: bool,
pub owned_by: Option<TableRef>,
#[serde(default)]
pub owned_by_none: bool,
#[serde(default)]
pub order: Option<bool>,
#[serde(default)]
pub comment: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sharing: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scale_modifier: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub shard_modifier: Option<String>,
#[serde(default)]
pub property_order: Vec<SeqPropKind>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum SequenceBound {
Value(i64),
None,
}
impl CreateSequence {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
if_not_exists: false,
temporary: false,
or_replace: false,
as_type: None,
increment: None,
minvalue: None,
maxvalue: None,
start: None,
cache: None,
cycle: false,
owned_by: None,
owned_by_none: false,
order: None,
comment: None,
sharing: None,
scale_modifier: None,
shard_modifier: None,
property_order: Vec::new(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropSequence {
pub name: TableRef,
pub if_exists: bool,
pub cascade: bool,
}
impl DropSequence {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
if_exists: false,
cascade: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AlterSequence {
pub name: TableRef,
pub if_exists: bool,
pub increment: Option<i64>,
pub minvalue: Option<SequenceBound>,
pub maxvalue: Option<SequenceBound>,
pub start: Option<i64>,
pub restart: Option<Option<i64>>,
pub cache: Option<i64>,
pub cycle: Option<bool>,
pub owned_by: Option<Option<TableRef>>,
}
impl AlterSequence {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
if_exists: false,
increment: None,
minvalue: None,
maxvalue: None,
start: None,
restart: None,
cache: None,
cycle: None,
owned_by: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateTrigger {
pub name: Identifier,
pub table: TableRef,
pub timing: TriggerTiming,
pub events: Vec<TriggerEvent>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub for_each: Option<TriggerForEach>,
pub when: Option<Expression>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub when_paren: bool,
pub body: TriggerBody,
pub or_replace: bool,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub or_alter: bool,
pub constraint: bool,
pub deferrable: Option<bool>,
pub initially_deferred: Option<bool>,
pub referencing: Option<TriggerReferencing>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum TriggerTiming {
Before,
After,
InsteadOf,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum TriggerEvent {
Insert,
Update(Option<Vec<Identifier>>),
Delete,
Truncate,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum TriggerForEach {
Row,
Statement,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum TriggerBody {
Execute {
function: TableRef,
args: Vec<Expression>,
},
Block(String),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TriggerReferencing {
pub old_table: Option<Identifier>,
pub new_table: Option<Identifier>,
pub old_row: Option<Identifier>,
pub new_row: Option<Identifier>,
}
impl CreateTrigger {
pub fn new(name: impl Into<String>, table: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
table: TableRef::new(table),
timing: TriggerTiming::Before,
events: Vec::new(),
for_each: Some(TriggerForEach::Row),
when: None,
when_paren: false,
body: TriggerBody::Execute {
function: TableRef::new(""),
args: Vec::new(),
},
or_replace: false,
or_alter: false,
constraint: false,
deferrable: None,
initially_deferred: None,
referencing: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropTrigger {
pub name: Identifier,
pub table: Option<TableRef>,
pub if_exists: bool,
pub cascade: bool,
}
impl DropTrigger {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: Identifier::new(name),
table: None,
if_exists: false,
cascade: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CreateType {
pub name: TableRef,
pub definition: TypeDefinition,
pub if_not_exists: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub enum TypeDefinition {
Enum(Vec<String>),
Composite(Vec<TypeAttribute>),
Range {
subtype: DataType,
subtype_diff: Option<String>,
canonical: Option<String>,
},
Base {
input: String,
output: String,
internallength: Option<i32>,
},
Domain {
base_type: DataType,
default: Option<Expression>,
constraints: Vec<DomainConstraint>,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TypeAttribute {
pub name: Identifier,
pub data_type: DataType,
pub collate: Option<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DomainConstraint {
pub name: Option<Identifier>,
pub check: Expression,
}
impl CreateType {
pub fn new_enum(name: impl Into<String>, values: Vec<String>) -> Self {
Self {
name: TableRef::new(name),
definition: TypeDefinition::Enum(values),
if_not_exists: false,
}
}
pub fn new_composite(name: impl Into<String>, attributes: Vec<TypeAttribute>) -> Self {
Self {
name: TableRef::new(name),
definition: TypeDefinition::Composite(attributes),
if_not_exists: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropType {
pub name: TableRef,
pub if_exists: bool,
pub cascade: bool,
}
impl DropType {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: TableRef::new(name),
if_exists: false,
cascade: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Describe {
pub target: Expression,
pub extended: bool,
pub formatted: bool,
#[serde(default)]
pub kind: Option<String>,
#[serde(default)]
pub properties: Vec<(String, String)>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub style: Option<String>,
#[serde(default)]
pub partition: Option<Box<Expression>>,
#[serde(default)]
pub leading_comments: Vec<String>,
#[serde(default)]
pub as_json: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub params: Vec<String>,
}
impl Describe {
pub fn new(target: Expression) -> Self {
Self {
target,
extended: false,
formatted: false,
kind: None,
properties: Vec::new(),
style: None,
partition: None,
leading_comments: Vec::new(),
as_json: false,
params: Vec::new(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Show {
pub this: String,
#[serde(default)]
pub terse: bool,
#[serde(default)]
pub history: bool,
pub like: Option<Expression>,
pub scope_kind: Option<String>,
pub scope: Option<Expression>,
pub starts_with: Option<Expression>,
pub limit: Option<Box<Limit>>,
pub from: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub where_clause: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub for_target: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub db: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub target: Option<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub mutex: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub privileges: Vec<String>,
}
impl Show {
pub fn new(this: impl Into<String>) -> Self {
Self {
this: this.into(),
terse: false,
history: false,
like: None,
scope_kind: None,
scope: None,
starts_with: None,
limit: None,
from: None,
where_clause: None,
for_target: None,
db: None,
target: None,
mutex: None,
privileges: Vec::new(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Paren {
pub this: Expression,
#[serde(default)]
pub trailing_comments: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Annotated {
pub this: Expression,
pub trailing_comments: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Refresh {
pub this: Box<Expression>,
pub kind: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LockingStatement {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SequenceProperties {
#[serde(default)]
pub increment: Option<Box<Expression>>,
#[serde(default)]
pub minvalue: Option<Box<Expression>>,
#[serde(default)]
pub maxvalue: Option<Box<Expression>>,
#[serde(default)]
pub cache: Option<Box<Expression>>,
#[serde(default)]
pub start: Option<Box<Expression>>,
#[serde(default)]
pub owned: Option<Box<Expression>>,
#[serde(default)]
pub options: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TruncateTable {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub is_database: Option<Box<Expression>>,
#[serde(default)]
pub exists: bool,
#[serde(default)]
pub only: Option<Box<Expression>>,
#[serde(default)]
pub cluster: Option<Box<Expression>>,
#[serde(default)]
pub identity: Option<Box<Expression>>,
#[serde(default)]
pub option: Option<Box<Expression>>,
#[serde(default)]
pub partition: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Clone {
pub this: Box<Expression>,
#[serde(default)]
pub shallow: Option<Box<Expression>>,
#[serde(default)]
pub copy: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Attach {
pub this: Box<Expression>,
#[serde(default)]
pub exists: bool,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Detach {
pub this: Box<Expression>,
#[serde(default)]
pub exists: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Install {
pub this: Box<Expression>,
#[serde(default)]
pub from_: Option<Box<Expression>>,
#[serde(default)]
pub force: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Summarize {
pub this: Box<Expression>,
#[serde(default)]
pub table: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Declare {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub replace: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DeclareItem {
pub this: Box<Expression>,
#[serde(default)]
pub kind: Option<String>,
#[serde(default)]
pub default: Option<Box<Expression>>,
#[serde(default)]
pub has_as: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub additional_names: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Set {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub unset: Option<Box<Expression>>,
#[serde(default)]
pub tag: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Heredoc {
pub this: Box<Expression>,
#[serde(default)]
pub tag: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct QueryBand {
pub this: Box<Expression>,
#[serde(default)]
pub scope: Option<Box<Expression>>,
#[serde(default)]
pub update: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UserDefinedFunction {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub wrapped: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RecursiveWithSearch {
pub kind: String,
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub using: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ProjectionDef {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TableAlias {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub columns: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ByteString {
pub this: Box<Expression>,
#[serde(default)]
pub is_bytes: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct HexStringExpr {
pub this: Box<Expression>,
#[serde(default)]
pub is_integer: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UnicodeString {
pub this: Box<Expression>,
#[serde(default)]
pub escape: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AlterColumn {
pub this: Box<Expression>,
#[serde(default)]
pub dtype: Option<Box<Expression>>,
#[serde(default)]
pub collate: Option<Box<Expression>>,
#[serde(default)]
pub using: Option<Box<Expression>>,
#[serde(default)]
pub default: Option<Box<Expression>>,
#[serde(default)]
pub drop: Option<Box<Expression>>,
#[serde(default)]
pub comment: Option<Box<Expression>>,
#[serde(default)]
pub allow_null: Option<Box<Expression>>,
#[serde(default)]
pub visible: Option<Box<Expression>>,
#[serde(default)]
pub rename_to: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AlterSortKey {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub compound: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AlterSet {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub option: Option<Box<Expression>>,
#[serde(default)]
pub tablespace: Option<Box<Expression>>,
#[serde(default)]
pub access_method: Option<Box<Expression>>,
#[serde(default)]
pub file_format: Option<Box<Expression>>,
#[serde(default)]
pub copy_options: Option<Box<Expression>>,
#[serde(default)]
pub tag: Option<Box<Expression>>,
#[serde(default)]
pub location: Option<Box<Expression>>,
#[serde(default)]
pub serde: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RenameColumn {
pub this: Box<Expression>,
#[serde(default)]
pub to: Option<Box<Expression>>,
#[serde(default)]
pub exists: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Comprehension {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub position: Option<Box<Expression>>,
#[serde(default)]
pub iterator: Option<Box<Expression>>,
#[serde(default)]
pub condition: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MergeTreeTTLAction {
pub this: Box<Expression>,
#[serde(default)]
pub delete: Option<Box<Expression>>,
#[serde(default)]
pub recompress: Option<Box<Expression>>,
#[serde(default)]
pub to_disk: Option<Box<Expression>>,
#[serde(default)]
pub to_volume: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MergeTreeTTL {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub where_: Option<Box<Expression>>,
#[serde(default)]
pub group: Option<Box<Expression>>,
#[serde(default)]
pub aggregates: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IndexConstraintOption {
#[serde(default)]
pub key_block_size: Option<Box<Expression>>,
#[serde(default)]
pub using: Option<Box<Expression>>,
#[serde(default)]
pub parser: Option<Box<Expression>>,
#[serde(default)]
pub comment: Option<Box<Expression>>,
#[serde(default)]
pub visible: Option<Box<Expression>>,
#[serde(default)]
pub engine_attr: Option<Box<Expression>>,
#[serde(default)]
pub secondary_engine_attr: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PeriodForSystemTimeConstraint {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CaseSpecificColumnConstraint {
#[serde(default)]
pub not_: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CharacterSetColumnConstraint {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CheckColumnConstraint {
pub this: Box<Expression>,
#[serde(default)]
pub enforced: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AssumeColumnConstraint {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CompressColumnConstraint {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DateFormatColumnConstraint {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct EphemeralColumnConstraint {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WithOperator {
pub this: Box<Expression>,
pub op: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GeneratedAsIdentityColumnConstraint {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub on_null: Option<Box<Expression>>,
#[serde(default)]
pub start: Option<Box<Expression>>,
#[serde(default)]
pub increment: Option<Box<Expression>>,
#[serde(default)]
pub minvalue: Option<Box<Expression>>,
#[serde(default)]
pub maxvalue: Option<Box<Expression>>,
#[serde(default)]
pub cycle: Option<Box<Expression>>,
#[serde(default)]
pub order: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AutoIncrementColumnConstraint;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CommentColumnConstraint;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GeneratedAsRowColumnConstraint {
#[serde(default)]
pub start: Option<Box<Expression>>,
#[serde(default)]
pub hidden: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IndexColumnConstraint {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub kind: Option<String>,
#[serde(default)]
pub index_type: Option<Box<Expression>>,
#[serde(default)]
pub options: Vec<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub granularity: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MaskingPolicyColumnConstraint {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct NotNullColumnConstraint {
#[serde(default)]
pub allow_null: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DefaultColumnConstraint {
pub this: Box<Expression>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub for_column: Option<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PrimaryKeyColumnConstraint {
#[serde(default)]
pub desc: Option<Box<Expression>>,
#[serde(default)]
pub options: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UniqueColumnConstraint {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub index_type: Option<Box<Expression>>,
#[serde(default)]
pub on_conflict: Option<Box<Expression>>,
#[serde(default)]
pub nulls: Option<Box<Expression>>,
#[serde(default)]
pub options: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WatermarkColumnConstraint {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ComputedColumnConstraint {
pub this: Box<Expression>,
#[serde(default)]
pub persisted: Option<Box<Expression>>,
#[serde(default)]
pub not_null: Option<Box<Expression>>,
#[serde(default)]
pub data_type: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct InOutColumnConstraint {
#[serde(default)]
pub input_: Option<Box<Expression>>,
#[serde(default)]
pub output: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PathColumnConstraint {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Constraint {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Export {
pub this: Box<Expression>,
#[serde(default)]
pub connection: Option<Box<Expression>>,
#[serde(default)]
pub options: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Filter {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Changes {
#[serde(default)]
pub information: Option<Box<Expression>>,
#[serde(default)]
pub at_before: Option<Box<Expression>>,
#[serde(default)]
pub end: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Directory {
pub this: Box<Expression>,
#[serde(default)]
pub local: Option<Box<Expression>>,
#[serde(default)]
pub row_format: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ForeignKey {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub reference: Option<Box<Expression>>,
#[serde(default)]
pub delete: Option<Box<Expression>>,
#[serde(default)]
pub update: Option<Box<Expression>>,
#[serde(default)]
pub options: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ColumnPrefix {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PrimaryKey {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub options: Vec<Expression>,
#[serde(default)]
pub include: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IntoClause {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub temporary: bool,
#[serde(default)]
pub unlogged: Option<Box<Expression>>,
#[serde(default)]
pub bulk_collect: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JoinHint {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Opclass {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Index {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub table: Option<Box<Expression>>,
#[serde(default)]
pub unique: bool,
#[serde(default)]
pub primary: Option<Box<Expression>>,
#[serde(default)]
pub amp: Option<Box<Expression>>,
#[serde(default)]
pub params: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IndexParameters {
#[serde(default)]
pub using: Option<Box<Expression>>,
#[serde(default)]
pub include: Option<Box<Expression>>,
#[serde(default)]
pub columns: Vec<Expression>,
#[serde(default)]
pub with_storage: Option<Box<Expression>>,
#[serde(default)]
pub partition_by: Option<Box<Expression>>,
#[serde(default)]
pub tablespace: Option<Box<Expression>>,
#[serde(default)]
pub where_: Option<Box<Expression>>,
#[serde(default)]
pub on: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ConditionalInsert {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub else_: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MultitableInserts {
#[serde(default)]
pub expressions: Vec<Expression>,
pub kind: String,
#[serde(default)]
pub source: Option<Box<Expression>>,
#[serde(default)]
pub leading_comments: Vec<String>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub overwrite: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OnConflict {
#[serde(default)]
pub duplicate: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub action: Option<Box<Expression>>,
#[serde(default)]
pub conflict_keys: Option<Box<Expression>>,
#[serde(default)]
pub index_predicate: Option<Box<Expression>>,
#[serde(default)]
pub constraint: Option<Box<Expression>>,
#[serde(default)]
pub where_: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OnCondition {
#[serde(default)]
pub error: Option<Box<Expression>>,
#[serde(default)]
pub empty: Option<Box<Expression>>,
#[serde(default)]
pub null: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Returning {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub into: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Introducer {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PartitionRange {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Group {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub grouping_sets: Option<Box<Expression>>,
#[serde(default)]
pub cube: Option<Box<Expression>>,
#[serde(default)]
pub rollup: Option<Box<Expression>>,
#[serde(default)]
pub totals: Option<Box<Expression>>,
#[serde(default)]
pub all: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Cube {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Rollup {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GroupingSets {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LimitOptions {
#[serde(default)]
pub percent: Option<Box<Expression>>,
#[serde(default)]
pub rows: Option<Box<Expression>>,
#[serde(default)]
pub with_ties: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Lateral {
pub this: Box<Expression>,
#[serde(default)]
pub view: Option<Box<Expression>>,
#[serde(default)]
pub outer: Option<Box<Expression>>,
#[serde(default)]
pub alias: Option<String>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub alias_quoted: bool,
#[serde(default)]
pub cross_apply: Option<Box<Expression>>,
#[serde(default)]
pub ordinality: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub column_aliases: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TableFromRows {
pub this: Box<Expression>,
#[serde(default)]
pub alias: Option<String>,
#[serde(default)]
pub joins: Vec<Expression>,
#[serde(default)]
pub pivots: Option<Box<Expression>>,
#[serde(default)]
pub sample: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RowsFrom {
pub expressions: Vec<Expression>,
#[serde(default)]
pub ordinality: bool,
#[serde(default)]
pub alias: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WithFill {
#[serde(default)]
pub from_: Option<Box<Expression>>,
#[serde(default)]
pub to: Option<Box<Expression>>,
#[serde(default)]
pub step: Option<Box<Expression>>,
#[serde(default)]
pub staleness: Option<Box<Expression>>,
#[serde(default)]
pub interpolate: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Property {
pub this: Box<Expression>,
#[serde(default)]
pub value: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GrantPrivilege {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AllowedValuesProperty {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AlgorithmProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AutoIncrementProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AutoRefreshProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct BackupProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct BuildProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct BlockCompressionProperty {
#[serde(default)]
pub autotemp: Option<Box<Expression>>,
#[serde(default)]
pub always: Option<Box<Expression>>,
#[serde(default)]
pub default: Option<Box<Expression>>,
#[serde(default)]
pub manual: Option<Box<Expression>>,
#[serde(default)]
pub never: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CharacterSetProperty {
pub this: Box<Expression>,
#[serde(default)]
pub default: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ChecksumProperty {
#[serde(default)]
pub on: Option<Box<Expression>>,
#[serde(default)]
pub default: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CollateProperty {
pub this: Box<Expression>,
#[serde(default)]
pub default: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DataBlocksizeProperty {
#[serde(default)]
pub size: Option<i64>,
#[serde(default)]
pub units: Option<Box<Expression>>,
#[serde(default)]
pub minimum: Option<Box<Expression>>,
#[serde(default)]
pub maximum: Option<Box<Expression>>,
#[serde(default)]
pub default: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DataDeletionProperty {
pub on: Box<Expression>,
#[serde(default)]
pub filter_column: Option<Box<Expression>>,
#[serde(default)]
pub retention_period: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DefinerProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DistKeyProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DistributedByProperty {
#[serde(default)]
pub expressions: Vec<Expression>,
pub kind: String,
#[serde(default)]
pub buckets: Option<Box<Expression>>,
#[serde(default)]
pub order: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DistStyleProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DuplicateKeyProperty {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct EngineProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ToTableProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ExecuteAsProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ExternalProperty {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FallbackProperty {
#[serde(default)]
pub no: Option<Box<Expression>>,
#[serde(default)]
pub protection: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FileFormatProperty {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub hive_format: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CredentialsProperty {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FreespaceProperty {
pub this: Box<Expression>,
#[serde(default)]
pub percent: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct InheritsProperty {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct InputModelProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OutputModelProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IsolatedLoadingProperty {
#[serde(default)]
pub no: Option<Box<Expression>>,
#[serde(default)]
pub concurrent: Option<Box<Expression>>,
#[serde(default)]
pub target: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JournalProperty {
#[serde(default)]
pub no: Option<Box<Expression>>,
#[serde(default)]
pub dual: Option<Box<Expression>>,
#[serde(default)]
pub before: Option<Box<Expression>>,
#[serde(default)]
pub local: Option<Box<Expression>>,
#[serde(default)]
pub after: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LanguageProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct EnviromentProperty {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ClusteredByProperty {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub sorted_by: Option<Box<Expression>>,
#[serde(default)]
pub buckets: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DictProperty {
pub this: Box<Expression>,
pub kind: String,
#[serde(default)]
pub settings: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DictRange {
pub this: Box<Expression>,
#[serde(default)]
pub min: Option<Box<Expression>>,
#[serde(default)]
pub max: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OnCluster {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LikeProperty {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LocationProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LockProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LockingProperty {
#[serde(default)]
pub this: Option<Box<Expression>>,
pub kind: String,
#[serde(default)]
pub for_or_in: Option<Box<Expression>>,
#[serde(default)]
pub lock_type: Option<Box<Expression>>,
#[serde(default)]
pub override_: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct LogProperty {
#[serde(default)]
pub no: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MaterializedProperty {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MergeBlockRatioProperty {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub no: Option<Box<Expression>>,
#[serde(default)]
pub default: Option<Box<Expression>>,
#[serde(default)]
pub percent: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OnProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OnCommitProperty {
#[serde(default)]
pub delete: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PartitionedByProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PartitionByProperty {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PartitionedByBucket {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ClusterByColumnsProperty {
#[serde(default)]
pub columns: Vec<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PartitionByTruncate {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PartitionByRangeProperty {
#[serde(default)]
pub partition_expressions: Option<Box<Expression>>,
#[serde(default)]
pub create_expressions: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PartitionByRangePropertyDynamic {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub start: Option<Box<Expression>>,
#[serde(default)]
pub use_start_end: bool,
#[serde(default)]
pub end: Option<Box<Expression>>,
#[serde(default)]
pub every: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PartitionByListProperty {
#[serde(default)]
pub partition_expressions: Option<Box<Expression>>,
#[serde(default)]
pub create_expressions: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PartitionList {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Partition {
pub expressions: Vec<Expression>,
#[serde(default)]
pub subpartition: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RefreshTriggerProperty {
pub method: String,
#[serde(default)]
pub kind: Option<String>,
#[serde(default)]
pub every: Option<Box<Expression>>,
#[serde(default)]
pub unit: Option<String>,
#[serde(default)]
pub starts: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UniqueKeyProperty {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RollupProperty {
pub expressions: Vec<RollupIndex>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RollupIndex {
pub name: Identifier,
pub expressions: Vec<Identifier>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PartitionBoundSpec {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub from_expressions: Option<Box<Expression>>,
#[serde(default)]
pub to_expressions: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PartitionedOfProperty {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RemoteWithConnectionModelProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ReturnsProperty {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub is_table: Option<Box<Expression>>,
#[serde(default)]
pub table: Option<Box<Expression>>,
#[serde(default)]
pub null: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RowFormatProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RowFormatDelimitedProperty {
#[serde(default)]
pub fields: Option<Box<Expression>>,
#[serde(default)]
pub escaped: Option<Box<Expression>>,
#[serde(default)]
pub collection_items: Option<Box<Expression>>,
#[serde(default)]
pub map_keys: Option<Box<Expression>>,
#[serde(default)]
pub lines: Option<Box<Expression>>,
#[serde(default)]
pub null: Option<Box<Expression>>,
#[serde(default)]
pub serde: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RowFormatSerdeProperty {
pub this: Box<Expression>,
#[serde(default)]
pub serde_properties: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct QueryTransform {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub command_script: Option<Box<Expression>>,
#[serde(default)]
pub schema: Option<Box<Expression>>,
#[serde(default)]
pub row_format_before: Option<Box<Expression>>,
#[serde(default)]
pub record_writer: Option<Box<Expression>>,
#[serde(default)]
pub row_format_after: Option<Box<Expression>>,
#[serde(default)]
pub record_reader: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SampleProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SecurityProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SchemaCommentProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SemanticView {
pub this: Box<Expression>,
#[serde(default)]
pub metrics: Option<Box<Expression>>,
#[serde(default)]
pub dimensions: Option<Box<Expression>>,
#[serde(default)]
pub facts: Option<Box<Expression>>,
#[serde(default)]
pub where_: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SerdeProperties {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub with_: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SetProperty {
#[serde(default)]
pub multi: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SharingProperty {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SetConfigProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SettingsProperty {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SortKeyProperty {
pub this: Box<Expression>,
#[serde(default)]
pub compound: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SqlReadWriteProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SqlSecurityProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StabilityProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StorageHandlerProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TemporaryProperty {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Tags {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TransformModelProperty {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TransientProperty {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UsingTemplateProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ViewAttributeProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct VolatileProperty {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WithDataProperty {
#[serde(default)]
pub no: Option<Box<Expression>>,
#[serde(default)]
pub statistics: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WithJournalTableProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WithSchemaBindingProperty {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WithSystemVersioningProperty {
#[serde(default)]
pub on: Option<Box<Expression>>,
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub data_consistency: Option<Box<Expression>>,
#[serde(default)]
pub retention_period: Option<Box<Expression>>,
#[serde(default)]
pub with_: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WithProcedureOptions {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct EncodeProperty {
pub this: Box<Expression>,
#[serde(default)]
pub properties: Vec<Expression>,
#[serde(default)]
pub key: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IncludeProperty {
pub this: Box<Expression>,
#[serde(default)]
pub alias: Option<String>,
#[serde(default)]
pub column_def: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Properties {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OptionEntry {
pub key: Identifier,
pub value: Expression,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OptionsProperty {
#[serde(default)]
pub entries: Vec<OptionEntry>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct InputOutputFormat {
#[serde(default)]
pub input_format: Option<Box<Expression>>,
#[serde(default)]
pub output_format: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Reference {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub options: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct QueryOption {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WithTableHint {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IndexTableHint {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub target: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Get {
pub this: Box<Expression>,
#[serde(default)]
pub target: Option<Box<Expression>>,
#[serde(default)]
pub properties: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SetOperation {
#[serde(default)]
pub with_: Option<Box<Expression>>,
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub distinct: bool,
#[serde(default)]
pub by_name: Option<Box<Expression>>,
#[serde(default)]
pub side: Option<Box<Expression>>,
#[serde(default)]
pub kind: Option<String>,
#[serde(default)]
pub on: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Var {
pub this: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Variadic {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Version {
pub this: Box<Expression>,
pub kind: String,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Schema {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Lock {
#[serde(default)]
pub update: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub wait: Option<Box<Expression>>,
#[serde(default)]
pub key: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TableSample {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub this: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sample: Option<Box<Sample>>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub method: Option<String>,
#[serde(default)]
pub bucket_numerator: Option<Box<Expression>>,
#[serde(default)]
pub bucket_denominator: Option<Box<Expression>>,
#[serde(default)]
pub bucket_field: Option<Box<Expression>>,
#[serde(default)]
pub percent: Option<Box<Expression>>,
#[serde(default)]
pub rows: Option<Box<Expression>>,
#[serde(default)]
pub size: Option<i64>,
#[serde(default)]
pub seed: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Tag {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub prefix: Option<Box<Expression>>,
#[serde(default)]
pub postfix: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UnpivotColumns {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SessionParameter {
pub this: Box<Expression>,
#[serde(default)]
pub kind: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PseudoType {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ObjectIdentifier {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Transaction {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub modes: Option<Box<Expression>>,
#[serde(default)]
pub mark: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Commit {
#[serde(default)]
pub chain: Option<Box<Expression>>,
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub durability: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Rollback {
#[serde(default)]
pub savepoint: Option<Box<Expression>>,
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AlterSession {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub unset: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Analyze {
#[serde(default)]
pub kind: Option<String>,
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub options: Vec<Expression>,
#[serde(default)]
pub mode: Option<Box<Expression>>,
#[serde(default)]
pub partition: Option<Box<Expression>>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub properties: Vec<Expression>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub columns: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AnalyzeStatistics {
pub kind: String,
#[serde(default)]
pub option: Option<Box<Expression>>,
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AnalyzeHistogram {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub update_options: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AnalyzeSample {
pub kind: String,
#[serde(default)]
pub sample: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AnalyzeListChainedRows {
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AnalyzeDelete {
#[serde(default)]
pub kind: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AnalyzeWith {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AnalyzeValidate {
pub kind: String,
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AddPartition {
pub this: Box<Expression>,
#[serde(default)]
pub exists: bool,
#[serde(default)]
pub location: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AttachOption {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DropPartition {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub exists: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ReplacePartition {
pub expression: Box<Expression>,
#[serde(default)]
pub source: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DPipe {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Operator {
pub this: Box<Expression>,
#[serde(default)]
pub operator: Option<Box<Expression>>,
pub expression: Box<Expression>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub comments: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PivotAny {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Aliases {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AtIndex {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FromTimeZone {
pub this: Box<Expression>,
#[serde(default)]
pub zone: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FormatPhrase {
pub this: Box<Expression>,
pub format: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ForIn {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimeUnit {
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct IntervalOp {
#[serde(default)]
pub unit: Option<String>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct HavingMax {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub max: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CosineDistance {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DotProduct {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct EuclideanDistance {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ManhattanDistance {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JarowinklerSimilarity {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Booland {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Boolor {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ParameterizedAgg {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub params: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArgMax {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub count: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArgMin {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub count: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ApproxTopK {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub counters: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ApproxTopKAccumulate {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ApproxTopKCombine {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ApproxTopKEstimate {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ApproxTopSum {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub count: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ApproxQuantiles {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Minhash {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FarmFingerprint {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Float64 {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Transform {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Translate {
pub this: Box<Expression>,
#[serde(default)]
pub from_: Option<Box<Expression>>,
#[serde(default)]
pub to: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Grouping {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GroupingId {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Anonymous {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AnonymousAggFunc {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CombinedAggFunc {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CombinedParameterizedAgg {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub params: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct HashAgg {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Hll {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Apply {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ToBoolean {
pub this: Box<Expression>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct List {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ToMap {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Pad {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub fill_pattern: Option<Box<Expression>>,
#[serde(default)]
pub is_left: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ToChar {
pub this: Box<Expression>,
#[serde(default)]
pub format: Option<String>,
#[serde(default)]
pub nlsparam: Option<Box<Expression>>,
#[serde(default)]
pub is_numeric: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StringFunc {
pub this: Box<Expression>,
#[serde(default)]
pub zone: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ToNumber {
pub this: Box<Expression>,
#[serde(default)]
pub format: Option<Box<Expression>>,
#[serde(default)]
pub nlsparam: Option<Box<Expression>>,
#[serde(default)]
pub precision: Option<Box<Expression>>,
#[serde(default)]
pub scale: Option<Box<Expression>>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
#[serde(default)]
pub safe_name: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ToDouble {
pub this: Box<Expression>,
#[serde(default)]
pub format: Option<String>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ToDecfloat {
pub this: Box<Expression>,
#[serde(default)]
pub format: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TryToDecfloat {
pub this: Box<Expression>,
#[serde(default)]
pub format: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ToFile {
pub this: Box<Expression>,
#[serde(default)]
pub path: Option<Box<Expression>>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Columns {
pub this: Box<Expression>,
#[serde(default)]
pub unpack: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ConvertToCharset {
pub this: Box<Expression>,
#[serde(default)]
pub dest: Option<Box<Expression>>,
#[serde(default)]
pub source: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ConvertTimezone {
#[serde(default)]
pub source_tz: Option<Box<Expression>>,
#[serde(default)]
pub target_tz: Option<Box<Expression>>,
#[serde(default)]
pub timestamp: Option<Box<Expression>>,
#[serde(default)]
pub options: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GenerateSeries {
#[serde(default)]
pub start: Option<Box<Expression>>,
#[serde(default)]
pub end: Option<Box<Expression>>,
#[serde(default)]
pub step: Option<Box<Expression>>,
#[serde(default)]
pub is_end_exclusive: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AIAgg {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct AIClassify {
pub this: Box<Expression>,
#[serde(default)]
pub categories: Option<Box<Expression>>,
#[serde(default)]
pub config: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArrayAll {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArrayAny {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArrayConstructCompact {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StPoint {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub null: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StDistance {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub use_spheroid: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StringToArray {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub null: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ArraySum {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ObjectAgg {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CastToStrType {
pub this: Box<Expression>,
#[serde(default)]
pub to: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CheckJson {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CheckXml {
pub this: Box<Expression>,
#[serde(default)]
pub disable_auto_convert: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TranslateCharacters {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub with_error: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CurrentSchemas {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CurrentDatetime {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Localtime {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Localtimestamp {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Systimestamp {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CurrentSchema {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CurrentUser {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SessionUser;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONPathRoot;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UtcTime {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UtcTimestamp {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimestampFunc {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub zone: Option<Box<Expression>>,
#[serde(default)]
pub with_tz: Option<bool>,
#[serde(default)]
pub safe: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DateBin {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
#[serde(default)]
pub zone: Option<Box<Expression>>,
#[serde(default)]
pub origin: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Datetime {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DatetimeAdd {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DatetimeSub {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DatetimeDiff {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DatetimeTrunc {
pub this: Box<Expression>,
pub unit: String,
#[serde(default)]
pub zone: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Dayname {
pub this: Box<Expression>,
#[serde(default)]
pub abbreviated: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MakeInterval {
#[serde(default)]
pub year: Option<Box<Expression>>,
#[serde(default)]
pub month: Option<Box<Expression>>,
#[serde(default)]
pub week: Option<Box<Expression>>,
#[serde(default)]
pub day: Option<Box<Expression>>,
#[serde(default)]
pub hour: Option<Box<Expression>>,
#[serde(default)]
pub minute: Option<Box<Expression>>,
#[serde(default)]
pub second: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct PreviousDay {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Elt {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimestampAdd {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimestampSub {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimestampDiff {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimeSlice {
pub this: Box<Expression>,
pub expression: Box<Expression>,
pub unit: String,
#[serde(default)]
pub kind: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimeAdd {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimeSub {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimeDiff {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimeTrunc {
pub this: Box<Expression>,
pub unit: String,
#[serde(default)]
pub zone: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DateFromParts {
#[serde(default)]
pub year: Option<Box<Expression>>,
#[serde(default)]
pub month: Option<Box<Expression>>,
#[serde(default)]
pub day: Option<Box<Expression>>,
#[serde(default)]
pub allow_overflow: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimeFromParts {
#[serde(default)]
pub hour: Option<Box<Expression>>,
#[serde(default)]
pub min: Option<Box<Expression>>,
#[serde(default)]
pub sec: Option<Box<Expression>>,
#[serde(default)]
pub nano: Option<Box<Expression>>,
#[serde(default)]
pub fractions: Option<Box<Expression>>,
#[serde(default)]
pub precision: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DecodeCase {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Decrypt {
pub this: Box<Expression>,
#[serde(default)]
pub passphrase: Option<Box<Expression>>,
#[serde(default)]
pub aad: Option<Box<Expression>>,
#[serde(default)]
pub encryption_method: Option<Box<Expression>>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DecryptRaw {
pub this: Box<Expression>,
#[serde(default)]
pub key: Option<Box<Expression>>,
#[serde(default)]
pub iv: Option<Box<Expression>>,
#[serde(default)]
pub aad: Option<Box<Expression>>,
#[serde(default)]
pub encryption_method: Option<Box<Expression>>,
#[serde(default)]
pub aead: Option<Box<Expression>>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Encode {
pub this: Box<Expression>,
#[serde(default)]
pub charset: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Encrypt {
pub this: Box<Expression>,
#[serde(default)]
pub passphrase: Option<Box<Expression>>,
#[serde(default)]
pub aad: Option<Box<Expression>>,
#[serde(default)]
pub encryption_method: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct EncryptRaw {
pub this: Box<Expression>,
#[serde(default)]
pub key: Option<Box<Expression>>,
#[serde(default)]
pub iv: Option<Box<Expression>>,
#[serde(default)]
pub aad: Option<Box<Expression>>,
#[serde(default)]
pub encryption_method: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct EqualNull {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ToBinary {
pub this: Box<Expression>,
#[serde(default)]
pub format: Option<String>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Base64DecodeBinary {
pub this: Box<Expression>,
#[serde(default)]
pub alphabet: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Base64DecodeString {
pub this: Box<Expression>,
#[serde(default)]
pub alphabet: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Base64Encode {
pub this: Box<Expression>,
#[serde(default)]
pub max_line_length: Option<Box<Expression>>,
#[serde(default)]
pub alphabet: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TryBase64DecodeBinary {
pub this: Box<Expression>,
#[serde(default)]
pub alphabet: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TryBase64DecodeString {
pub this: Box<Expression>,
#[serde(default)]
pub alphabet: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GapFill {
pub this: Box<Expression>,
#[serde(default)]
pub ts_column: Option<Box<Expression>>,
#[serde(default)]
pub bucket_width: Option<Box<Expression>>,
#[serde(default)]
pub partitioning_columns: Option<Box<Expression>>,
#[serde(default)]
pub value_columns: Option<Box<Expression>>,
#[serde(default)]
pub origin: Option<Box<Expression>>,
#[serde(default)]
pub ignore_nulls: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GenerateDateArray {
#[serde(default)]
pub start: Option<Box<Expression>>,
#[serde(default)]
pub end: Option<Box<Expression>>,
#[serde(default)]
pub step: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GenerateTimestampArray {
#[serde(default)]
pub start: Option<Box<Expression>>,
#[serde(default)]
pub end: Option<Box<Expression>>,
#[serde(default)]
pub step: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GetExtract {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Getbit {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub zero_is_msb: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OverflowTruncateBehavior {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub with_count: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct HexEncode {
pub this: Box<Expression>,
#[serde(default)]
pub case: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Compress {
pub this: Box<Expression>,
#[serde(default)]
pub method: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DecompressBinary {
pub this: Box<Expression>,
pub method: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct DecompressString {
pub this: Box<Expression>,
pub method: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Xor {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Nullif {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSON {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub with_: Option<Box<Expression>>,
#[serde(default)]
pub unique: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONPath {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub escape: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONPathFilter {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONPathKey {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONPathRecursive {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONPathScript {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONPathSlice {
#[serde(default)]
pub start: Option<Box<Expression>>,
#[serde(default)]
pub end: Option<Box<Expression>>,
#[serde(default)]
pub step: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONPathSelector {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONPathSubscript {
pub this: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONPathUnion {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Format {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONKeys {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONKeyValue {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONKeysAtDepth {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub mode: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONObject {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub null_handling: Option<Box<Expression>>,
#[serde(default)]
pub unique_keys: Option<Box<Expression>>,
#[serde(default)]
pub return_type: Option<Box<Expression>>,
#[serde(default)]
pub encoding: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONObjectAgg {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub null_handling: Option<Box<Expression>>,
#[serde(default)]
pub unique_keys: Option<Box<Expression>>,
#[serde(default)]
pub return_type: Option<Box<Expression>>,
#[serde(default)]
pub encoding: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONBObjectAgg {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONArray {
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub null_handling: Option<Box<Expression>>,
#[serde(default)]
pub return_type: Option<Box<Expression>>,
#[serde(default)]
pub strict: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONArrayAgg {
pub this: Box<Expression>,
#[serde(default)]
pub order: Option<Box<Expression>>,
#[serde(default)]
pub null_handling: Option<Box<Expression>>,
#[serde(default)]
pub return_type: Option<Box<Expression>>,
#[serde(default)]
pub strict: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONExists {
pub this: Box<Expression>,
#[serde(default)]
pub path: Option<Box<Expression>>,
#[serde(default)]
pub passing: Option<Box<Expression>>,
#[serde(default)]
pub on_condition: Option<Box<Expression>>,
#[serde(default)]
pub from_dcolonqmark: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONColumnDef {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub kind: Option<String>,
#[serde(default)]
pub path: Option<Box<Expression>>,
#[serde(default)]
pub nested_schema: Option<Box<Expression>>,
#[serde(default)]
pub ordinality: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONSchema {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONSet {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONStripNulls {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub include_arrays: Option<Box<Expression>>,
#[serde(default)]
pub remove_empty: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONValue {
pub this: Box<Expression>,
#[serde(default)]
pub path: Option<Box<Expression>>,
#[serde(default)]
pub returning: Option<Box<Expression>>,
#[serde(default)]
pub on_condition: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONValueArray {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONRemove {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONTable {
pub this: Box<Expression>,
#[serde(default)]
pub schema: Option<Box<Expression>>,
#[serde(default)]
pub path: Option<Box<Expression>>,
#[serde(default)]
pub error_handling: Option<Box<Expression>>,
#[serde(default)]
pub empty_handling: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONType {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ObjectInsert {
pub this: Box<Expression>,
#[serde(default)]
pub key: Option<Box<Expression>>,
#[serde(default)]
pub value: Option<Box<Expression>>,
#[serde(default)]
pub update_flag: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OpenJSONColumnDef {
pub this: Box<Expression>,
pub kind: String,
#[serde(default)]
pub path: Option<Box<Expression>>,
#[serde(default)]
pub as_json: Option<Box<Expression>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub data_type: Option<DataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct OpenJSON {
pub this: Box<Expression>,
#[serde(default)]
pub path: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONBExists {
pub this: Box<Expression>,
#[serde(default)]
pub path: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONCast {
pub this: Box<Expression>,
pub to: DataType,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONExtract {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub only_json_types: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub variant_extract: Option<Box<Expression>>,
#[serde(default)]
pub json_query: Option<Box<Expression>>,
#[serde(default)]
pub option: Option<Box<Expression>>,
#[serde(default)]
pub quote: Option<Box<Expression>>,
#[serde(default)]
pub on_condition: Option<Box<Expression>>,
#[serde(default)]
pub requires_json: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONExtractQuote {
#[serde(default)]
pub option: Option<Box<Expression>>,
#[serde(default)]
pub scalar: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONExtractArray {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONExtractScalar {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub only_json_types: Option<Box<Expression>>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub json_type: Option<Box<Expression>>,
#[serde(default)]
pub scalar_only: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONBExtractScalar {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub json_type: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONFormat {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub options: Vec<Expression>,
#[serde(default)]
pub is_json: Option<Box<Expression>>,
#[serde(default)]
pub to_json: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONArrayAppend {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONArrayContains {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub json_type: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct JSONArrayInsert {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ParseJSON {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ParseUrl {
pub this: Box<Expression>,
#[serde(default)]
pub part_to_extract: Option<Box<Expression>>,
#[serde(default)]
pub key: Option<Box<Expression>>,
#[serde(default)]
pub permissive: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ParseIp {
pub this: Box<Expression>,
#[serde(default)]
pub type_: Option<Box<Expression>>,
#[serde(default)]
pub permissive: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ParseTime {
pub this: Box<Expression>,
pub format: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ParseDatetime {
pub this: Box<Expression>,
#[serde(default)]
pub format: Option<String>,
#[serde(default)]
pub zone: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Map {
#[serde(default)]
pub keys: Vec<Expression>,
#[serde(default)]
pub values: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MapCat {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MapDelete {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MapInsert {
pub this: Box<Expression>,
#[serde(default)]
pub key: Option<Box<Expression>>,
#[serde(default)]
pub value: Option<Box<Expression>>,
#[serde(default)]
pub update_flag: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MapPick {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ScopeResolution {
#[serde(default)]
pub this: Option<Box<Expression>>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Slice {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub step: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct VarMap {
#[serde(default)]
pub keys: Vec<Expression>,
#[serde(default)]
pub values: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MatchAgainst {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub modifier: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MD5Digest {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Monthname {
pub this: Box<Expression>,
#[serde(default)]
pub abbreviated: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Ntile {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Normalize {
pub this: Box<Expression>,
#[serde(default)]
pub form: Option<Box<Expression>>,
#[serde(default)]
pub is_casefold: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Normal {
pub this: Box<Expression>,
#[serde(default)]
pub stddev: Option<Box<Expression>>,
#[serde(default)]
pub gen: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Predict {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub params_struct: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MLTranslate {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub params_struct: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FeaturesAtTime {
pub this: Box<Expression>,
#[serde(default)]
pub time: Option<Box<Expression>>,
#[serde(default)]
pub num_rows: Option<Box<Expression>>,
#[serde(default)]
pub ignore_feature_nulls: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct GenerateEmbedding {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub params_struct: Option<Box<Expression>>,
#[serde(default)]
pub is_text: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct MLForecast {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
#[serde(default)]
pub params_struct: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ModelAttribute {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct VectorSearch {
pub this: Box<Expression>,
#[serde(default)]
pub column_to_search: Option<Box<Expression>>,
#[serde(default)]
pub query_table: Option<Box<Expression>>,
#[serde(default)]
pub query_column_to_search: Option<Box<Expression>>,
#[serde(default)]
pub top_k: Option<Box<Expression>>,
#[serde(default)]
pub distance_type: Option<Box<Expression>>,
#[serde(default)]
pub options: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Quantile {
pub this: Box<Expression>,
#[serde(default)]
pub quantile: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ApproxQuantile {
pub this: Box<Expression>,
#[serde(default)]
pub quantile: Option<Box<Expression>>,
#[serde(default)]
pub accuracy: Option<Box<Expression>>,
#[serde(default)]
pub weight: Option<Box<Expression>>,
#[serde(default)]
pub error_tolerance: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ApproxPercentileEstimate {
pub this: Box<Expression>,
#[serde(default)]
pub percentile: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Randn {
#[serde(default)]
pub this: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Randstr {
pub this: Box<Expression>,
#[serde(default)]
pub generator: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RangeN {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub each: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RangeBucket {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ReadCSV {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct ReadParquet {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Reduce {
pub this: Box<Expression>,
#[serde(default)]
pub initial: Option<Box<Expression>>,
#[serde(default)]
pub merge: Option<Box<Expression>>,
#[serde(default)]
pub finish: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegexpExtractAll {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub group: Option<Box<Expression>>,
#[serde(default)]
pub parameters: Option<Box<Expression>>,
#[serde(default)]
pub position: Option<Box<Expression>>,
#[serde(default)]
pub occurrence: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegexpILike {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub flag: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegexpFullMatch {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub options: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegexpInstr {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub position: Option<Box<Expression>>,
#[serde(default)]
pub occurrence: Option<Box<Expression>>,
#[serde(default)]
pub option: Option<Box<Expression>>,
#[serde(default)]
pub parameters: Option<Box<Expression>>,
#[serde(default)]
pub group: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegexpSplit {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub limit: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegexpCount {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub position: Option<Box<Expression>>,
#[serde(default)]
pub parameters: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegrValx {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegrValy {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegrAvgy {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegrAvgx {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegrCount {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegrIntercept {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegrR2 {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegrSxx {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegrSxy {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegrSyy {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct RegrSlope {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SafeAdd {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SafeDivide {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SafeMultiply {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SafeSubtract {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SHA2 {
pub this: Box<Expression>,
#[serde(default)]
pub length: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SHA2Digest {
pub this: Box<Expression>,
#[serde(default)]
pub length: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SortArray {
pub this: Box<Expression>,
#[serde(default)]
pub asc: Option<Box<Expression>>,
#[serde(default)]
pub nulls_first: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SplitPart {
pub this: Box<Expression>,
#[serde(default)]
pub delimiter: Option<Box<Expression>>,
#[serde(default)]
pub part_index: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SubstringIndex {
pub this: Box<Expression>,
#[serde(default)]
pub delimiter: Option<Box<Expression>>,
#[serde(default)]
pub count: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StandardHash {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StrPosition {
pub this: Box<Expression>,
#[serde(default)]
pub substr: Option<Box<Expression>>,
#[serde(default)]
pub position: Option<Box<Expression>>,
#[serde(default)]
pub occurrence: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Search {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub json_scope: Option<Box<Expression>>,
#[serde(default)]
pub analyzer: Option<Box<Expression>>,
#[serde(default)]
pub analyzer_options: Option<Box<Expression>>,
#[serde(default)]
pub search_mode: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct SearchIp {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StrToDate {
pub this: Box<Expression>,
#[serde(default)]
pub format: Option<String>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StrToTime {
pub this: Box<Expression>,
pub format: String,
#[serde(default)]
pub zone: Option<Box<Expression>>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
#[serde(default)]
pub target_type: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StrToUnix {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub format: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct StrToMap {
pub this: Box<Expression>,
#[serde(default)]
pub pair_delim: Option<Box<Expression>>,
#[serde(default)]
pub key_value_delim: Option<Box<Expression>>,
#[serde(default)]
pub duplicate_resolution_callback: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct NumberToStr {
pub this: Box<Expression>,
pub format: String,
#[serde(default)]
pub culture: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct FromBase {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Stuff {
pub this: Box<Expression>,
#[serde(default)]
pub start: Option<Box<Expression>>,
#[serde(default)]
pub length: Option<i64>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimeToStr {
pub this: Box<Expression>,
pub format: String,
#[serde(default)]
pub culture: Option<Box<Expression>>,
#[serde(default)]
pub zone: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimeStrToTime {
pub this: Box<Expression>,
#[serde(default)]
pub zone: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TsOrDsAdd {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
#[serde(default)]
pub return_type: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TsOrDsDiff {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub unit: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TsOrDsToDate {
pub this: Box<Expression>,
#[serde(default)]
pub format: Option<String>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TsOrDsToTime {
pub this: Box<Expression>,
#[serde(default)]
pub format: Option<String>,
#[serde(default)]
pub safe: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Unhex {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Uniform {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub gen: Option<Box<Expression>>,
#[serde(default)]
pub seed: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UnixToStr {
pub this: Box<Expression>,
#[serde(default)]
pub format: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct UnixToTime {
pub this: Box<Expression>,
#[serde(default)]
pub scale: Option<i64>,
#[serde(default)]
pub zone: Option<Box<Expression>>,
#[serde(default)]
pub hours: Option<Box<Expression>>,
#[serde(default)]
pub minutes: Option<Box<Expression>>,
#[serde(default)]
pub format: Option<String>,
#[serde(default)]
pub target_type: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Uuid {
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub is_string: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimestampFromParts {
#[serde(default)]
pub zone: Option<Box<Expression>>,
#[serde(default)]
pub milli: Option<Box<Expression>>,
#[serde(default)]
pub this: Option<Box<Expression>>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct TimestampTzFromParts {
#[serde(default)]
pub zone: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Corr {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub null_on_zero_variance: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct WidthBucket {
pub this: Box<Expression>,
#[serde(default)]
pub min_value: Option<Box<Expression>>,
#[serde(default)]
pub max_value: Option<Box<Expression>>,
#[serde(default)]
pub num_buckets: Option<Box<Expression>>,
#[serde(default)]
pub threshold: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CovarSamp {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct CovarPop {
pub this: Box<Expression>,
pub expression: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Week {
pub this: Box<Expression>,
#[serde(default)]
pub mode: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct XMLElement {
pub this: Box<Expression>,
#[serde(default)]
pub expressions: Vec<Expression>,
#[serde(default)]
pub evalname: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct XMLGet {
pub this: Box<Expression>,
pub expression: Box<Expression>,
#[serde(default)]
pub instance: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct XMLTable {
pub this: Box<Expression>,
#[serde(default)]
pub namespaces: Option<Box<Expression>>,
#[serde(default)]
pub passing: Option<Box<Expression>>,
#[serde(default)]
pub columns: Vec<Expression>,
#[serde(default)]
pub by_ref: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct XMLKeyValueOption {
pub this: Box<Expression>,
#[serde(default)]
pub expression: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Zipf {
pub this: Box<Expression>,
#[serde(default)]
pub elementcount: Option<Box<Expression>>,
#[serde(default)]
pub gen: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Merge {
pub this: Box<Expression>,
pub using: Box<Expression>,
#[serde(default)]
pub on: Option<Box<Expression>>,
#[serde(default)]
pub using_cond: Option<Box<Expression>>,
#[serde(default)]
pub whens: Option<Box<Expression>>,
#[serde(default)]
pub with_: Option<Box<Expression>>,
#[serde(default)]
pub returning: Option<Box<Expression>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct When {
#[serde(default)]
pub matched: Option<Box<Expression>>,
#[serde(default)]
pub source: Option<Box<Expression>>,
#[serde(default)]
pub condition: Option<Box<Expression>>,
pub then: Box<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct Whens {
#[serde(default)]
pub expressions: Vec<Expression>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "bindings", derive(TS))]
pub struct NextValueFor {
pub this: Box<Expression>,
#[serde(default)]
pub order: Option<Box<Expression>>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[cfg(feature = "bindings")]
fn export_typescript_types() {
Expression::export_all(&ts_rs::Config::default())
.expect("Failed to export Expression types");
}
#[test]
fn test_simple_select_builder() {
let select = Select::new()
.column(Expression::star())
.from(Expression::Table(Box::new(TableRef::new("users"))));
assert_eq!(select.expressions.len(), 1);
assert!(select.from.is_some());
}
#[test]
fn test_expression_alias() {
let expr = Expression::column("id").alias("user_id");
match expr {
Expression::Alias(a) => {
assert_eq!(a.alias.name, "user_id");
}
_ => panic!("Expected Alias"),
}
}
#[test]
fn test_literal_creation() {
let num = Expression::number(42);
let str = Expression::string("hello");
match num {
Expression::Literal(lit) if matches!(lit.as_ref(), Literal::Number(_)) => {
let Literal::Number(n) = lit.as_ref() else {
unreachable!()
};
assert_eq!(n, "42")
}
_ => panic!("Expected Number"),
}
match str {
Expression::Literal(lit) if matches!(lit.as_ref(), Literal::String(_)) => {
let Literal::String(s) = lit.as_ref() else {
unreachable!()
};
assert_eq!(s, "hello")
}
_ => panic!("Expected String"),
}
}
#[test]
fn test_expression_sql() {
let expr = crate::parse_one("SELECT 1 + 2", crate::DialectType::Generic).unwrap();
assert_eq!(expr.sql(), "SELECT 1 + 2");
}
#[test]
fn test_expression_sql_for() {
let expr = crate::parse_one("SELECT IF(x > 0, 1, 0)", crate::DialectType::Generic).unwrap();
let sql = expr.sql_for(crate::DialectType::Generic);
assert!(sql.contains("CASE WHEN"), "Expected CASE WHEN in: {}", sql);
}
}