use super::{
DataType, ExecuteStatement, Expr, Extension, Ident, IntervalFields, LanguageName, Literal,
NamedOperatorSpelling, NoExt, ObjectName, Query, RoutineObjectKind, RoutineSignature,
Statement,
};
use crate::vocab::{Meta, Symbol};
use thin_vec::ThinVec;
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateTable<X: Extension = NoExt> {
pub or_replace: bool,
pub temporary: Option<TemporaryTableKind>,
pub unlogged: bool,
pub if_not_exists: bool,
pub name: ObjectName,
pub body: CreateTableBody<X>,
pub inherits: ThinVec<ObjectName>,
pub partition_by: Option<Box<PartitionSpec<X>>>,
pub access_method: Option<Box<Ident>>,
pub options: ThinVec<CreateTableOption<X>>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TemporaryTableKind {
Temp,
Temporary,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum CreateTableBody<X: Extension = NoExt> {
Definition {
elements: ThinVec<TableElement<X>>,
meta: Meta,
},
AsQuery {
columns: ThinVec<Ident>,
query: Box<Query<X>>,
with_data: Option<bool>,
meta: Meta,
},
AsExecute {
columns: ThinVec<Ident>,
execute: Box<ExecuteStatement<X>>,
with_data: Option<bool>,
meta: Meta,
},
PartitionOf {
parent: ObjectName,
elements: ThinVec<TableElement<X>>,
bound: Box<PartitionBound<X>>,
meta: Meta,
},
OfType {
type_name: ObjectName,
elements: ThinVec<TableElement<X>>,
meta: Meta,
},
LikeSource {
source: ObjectName,
parenthesized: bool,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct PartitionSpec<X: Extension = NoExt> {
pub strategy: PartitionStrategy,
pub columns: ThinVec<PartitionElem<X>>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum PartitionStrategy {
List,
Range,
Hash,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct PartitionElem<X: Extension = NoExt> {
pub expr: Expr<X>,
pub parenthesized: bool,
pub collation: Option<ObjectName>,
pub opclass: Option<ObjectName>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum PartitionBound<X: Extension = NoExt> {
List {
values: ThinVec<Expr<X>>,
meta: Meta,
},
Range {
from: ThinVec<Expr<X>>,
to: ThinVec<Expr<X>>,
meta: Meta,
},
Hash {
modulus: Literal,
remainder: Literal,
meta: Meta,
},
Default {
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TableElement<X: Extension = NoExt> {
Column {
column: ColumnDef<X>,
meta: Meta,
},
Constraint {
constraint: TableConstraintDef<X>,
meta: Meta,
},
Like {
source: ObjectName,
options: ThinVec<TableLikeOption>,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct TableLikeOption {
pub action: TableLikeAction,
pub feature: TableLikeFeature,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TableLikeAction {
Including,
Excluding,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TableLikeFeature {
Comments,
Compression,
Constraints,
Defaults,
Generated,
Identity,
Indexes,
Statistics,
Storage,
All,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ColumnDef<X: Extension = NoExt> {
pub name: Ident,
pub data_type: Option<DataType<X>>,
pub storage: Option<Box<Ident>>,
pub compression: Option<Box<Ident>>,
pub constraints: ThinVec<ColumnConstraint<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ColumnConstraint<X: Extension = NoExt> {
pub name: Option<Ident>,
pub option: ColumnOption<X>,
pub conflict: Option<ConflictResolution>,
pub characteristics: Option<Box<ConstraintCharacteristics>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ConstraintCharacteristics {
pub deferrable: Option<bool>,
pub initially_deferred: Option<bool>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ColumnOption<X: Extension = NoExt> {
Null {
meta: Meta,
},
NotNull {
meta: Meta,
},
Default {
expr: Box<Expr<X>>,
meta: Meta,
},
Generated {
generated: Box<GeneratedColumn<X>>,
meta: Meta,
},
Identity {
identity: Box<IdentityColumn<X>>,
meta: Meta,
},
PrimaryKey {
ascending: Option<bool>,
index_tablespace: Option<Box<Ident>>,
meta: Meta,
},
Unique {
nulls_not_distinct: Option<bool>,
index_tablespace: Option<Box<Ident>>,
meta: Meta,
},
AutoIncrement {
spelling: AutoIncrementSpelling,
meta: Meta,
},
Collate {
collation: Box<ObjectName>,
meta: Meta,
},
Check {
expr: Box<Expr<X>>,
no_inherit: bool,
meta: Meta,
},
References {
reference: Box<ForeignKeyRef>,
meta: Meta,
},
Bare {
meta: Meta,
},
Other {
ext: X,
meta: Meta,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum AutoIncrementSpelling {
Underscored,
Joined,
}
use super::ConflictResolution;
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ForeignKeyRef {
pub table: ObjectName,
pub columns: ThinVec<Ident>,
pub match_type: Option<ForeignKeyMatch>,
pub on_delete: Option<Box<ReferentialAction>>,
pub on_update: Option<Box<ReferentialAction>>,
pub update_before_delete: bool,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ForeignKeyMatch {
Full,
Partial,
Simple,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ReferentialAction {
NoAction {
meta: Meta,
},
Restrict {
meta: Meta,
},
Cascade {
meta: Meta,
},
SetNull {
columns: ThinVec<Ident>,
meta: Meta,
},
SetDefault {
columns: ThinVec<Ident>,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct GeneratedColumn<X: Extension = NoExt> {
pub expr: Expr<X>,
pub storage: Option<GeneratedColumnStorage>,
pub spelling: GeneratedColumnSpelling,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum GeneratedColumnStorage {
Stored,
Virtual,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum GeneratedColumnSpelling {
GeneratedAlways,
Shorthand,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct IdentityColumn<X: Extension = NoExt> {
pub generation: IdentityGeneration,
pub options: ThinVec<IdentityOption<X>>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum IdentityGeneration {
Always,
ByDefault,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum IdentityOption<X: Extension = NoExt> {
StartWith {
expr: Expr<X>,
meta: Meta,
},
IncrementBy {
expr: Expr<X>,
meta: Meta,
},
MinValue {
value: Option<Expr<X>>,
meta: Meta,
},
MaxValue {
value: Option<Expr<X>>,
meta: Meta,
},
Cache {
expr: Expr<X>,
meta: Meta,
},
Cycle {
cycle: bool,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct TableConstraintDef<X: Extension = NoExt> {
pub name: Option<Ident>,
pub constraint: TableConstraint<X>,
pub no_inherit: bool,
pub not_valid: bool,
pub characteristics: Option<Box<ConstraintCharacteristics>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TableConstraint<X: Extension = NoExt> {
PrimaryKey {
columns: ThinVec<IndexColumn<X>>,
include: ThinVec<Ident>,
meta: Meta,
},
Unique {
columns: ThinVec<IndexColumn<X>>,
nulls_not_distinct: Option<bool>,
include: ThinVec<Ident>,
meta: Meta,
},
Check {
expr: Box<Expr<X>>,
meta: Meta,
},
Exclude {
exclude: Box<ExcludeConstraint<X>>,
meta: Meta,
},
ForeignKey {
columns: ThinVec<Ident>,
references: Box<ForeignKeyRef>,
meta: Meta,
},
Bare {
meta: Meta,
},
Other {
ext: X,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ExcludeConstraint<X: Extension = NoExt> {
pub method: Option<Ident>,
pub elements: ThinVec<ExcludeElement<X>>,
pub include: ThinVec<Ident>,
pub with_params: ThinVec<TableStorageParameter<X>>,
pub index_tablespace: Option<Ident>,
pub predicate: Option<Box<Expr<X>>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ExcludeElement<X: Extension = NoExt> {
pub expr: Expr<X>,
pub parenthesized: bool,
pub collation: Option<ObjectName>,
pub opclass: Option<ObjectName>,
pub opclass_params: ThinVec<TableStorageParameter<X>>,
pub asc: Option<bool>,
pub nulls_first: Option<bool>,
pub operator: ExcludeOperator,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ExcludeOperator {
pub schema: ObjectName,
pub op: Symbol,
pub spelling: NamedOperatorSpelling,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateTableOption<X: Extension = NoExt> {
pub kind: CreateTableOptionKind<X>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum CreateTableOptionKind<X: Extension = NoExt> {
ColocateWith {
table: ObjectName,
columns: ThinVec<Ident>,
meta: Meta,
},
InColocationGroup {
group: Ident,
columns: ThinVec<Ident>,
meta: Meta,
},
With {
params: ThinVec<TableStorageParameter<X>>,
meta: Meta,
},
OnCommit {
action: OnCommitAction,
meta: Meta,
},
Tablespace {
tablespace: Ident,
meta: Meta,
},
KeyValue {
option: Box<TableOption>,
meta: Meta,
},
WithoutRowid {
meta: Meta,
},
Strict {
meta: Meta,
},
WithoutOids {
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct TableOption {
pub name: Ident,
pub value: TableOptionValue,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TableOptionValue {
Word {
word: Ident,
meta: Meta,
},
String {
value: Literal,
meta: Meta,
},
Number {
value: Literal,
meta: Meta,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum OnCommitAction {
PreserveRows,
DeleteRows,
Drop,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct TableStorageParameter<X: Extension = NoExt> {
pub name: ObjectName,
pub value: Option<Expr<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterTable<X: Extension = NoExt> {
pub if_exists: bool,
pub name: ObjectName,
pub actions: ThinVec<AlterTableAction<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterColumnTarget {
pub parts: ThinVec<Ident>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum AlterTableAction<X: Extension = NoExt> {
SetColocationGroup {
group: Ident,
meta: Meta,
},
DropColocationGroup {
meta: Meta,
},
AddColumn {
if_not_exists: bool,
column_keyword: bool,
target: Option<AlterColumnTarget>,
column: ColumnDef<X>,
meta: Meta,
},
DropColumn {
if_exists: bool,
column_keyword: bool,
name: AlterColumnTarget,
behavior: Option<DropBehavior>,
meta: Meta,
},
AlterColumn {
column_keyword: bool,
name: Ident,
change: AlterColumnAction<X>,
meta: Meta,
},
AddConstraint {
constraint: TableConstraintDef<X>,
meta: Meta,
},
DropConstraint {
if_exists: bool,
name: Ident,
behavior: Option<DropBehavior>,
meta: Meta,
},
DropPrimaryKey {
behavior: Option<DropBehavior>,
meta: Meta,
},
SetOptions {
params: ThinVec<TableStorageParameter<X>>,
meta: Meta,
},
RenameColumn {
column_keyword: bool,
name: AlterColumnTarget,
new_name: Ident,
meta: Meta,
},
RenameConstraint {
name: Ident,
new_name: Ident,
meta: Meta,
},
RenameTable {
new_name: Ident,
meta: Meta,
},
AttachPartition {
partition: ObjectName,
bound: Box<PartitionBound<X>>,
meta: Meta,
},
DetachPartition {
partition: ObjectName,
mode: Option<DetachPartitionMode>,
meta: Meta,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum DetachPartitionMode {
Concurrently,
Finalize,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum AlterColumnAction<X: Extension = NoExt> {
SetDefault {
expr: Box<Expr<X>>,
meta: Meta,
},
DropDefault {
meta: Meta,
},
SetNotNull {
meta: Meta,
},
DropNotNull {
meta: Meta,
},
AddIdentity {
identity: Box<IdentityColumn<X>>,
meta: Meta,
},
SetDataType {
set_data: bool,
data_type: DataType<X>,
using: Option<Box<Expr<X>>>,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropStatement {
pub object_kind: DropObjectKind,
pub if_exists: bool,
pub names: ThinVec<ObjectName>,
pub behavior: Option<DropBehavior>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum DropObjectKind {
Table,
View,
MaterializedView,
Index,
Schema,
Type,
Sequence,
Macro,
MacroTable,
Trigger,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum DropBehavior {
Cascade,
Restrict,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropTransform<X: Extension = NoExt> {
pub object: ObjectReference<X>,
pub if_exists: bool,
pub behavior: Option<DropBehavior>,
pub meta: Meta,
}
#[non_exhaustive]
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum CommentTarget<X: Extension = NoExt> {
Table,
Column,
Database,
View,
MaterializedView,
Index,
Constraint,
Procedure {
arg_types: Option<ThinVec<DataType<X>>>,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CommentOnStatement<X: Extension = NoExt> {
pub if_exists: bool,
pub target: CommentTarget<X>,
pub name: ObjectName,
pub constraint_table: Option<ObjectName>,
pub comment: Option<Literal>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateSchema<X: Extension = NoExt> {
pub if_not_exists: bool,
pub name: Option<ObjectName>,
pub authorization: Option<Ident>,
pub elements: ThinVec<Statement<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateView<X: Extension = NoExt> {
pub or_replace: bool,
pub options: ViewOptions,
pub materialized: bool,
pub recursive: bool,
pub temporary: Option<TemporaryTableKind>,
pub if_not_exists: bool,
pub name: ObjectName,
pub columns: ThinVec<Ident>,
pub to: Option<ObjectName>,
pub query: Box<Query<X>>,
pub check_option: Option<ViewCheckOption>,
pub with_data: Option<bool>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct RefreshMaterializedView {
pub concurrently: bool,
pub name: ObjectName,
pub with_data: Option<bool>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ColocationPartitionKind {
Hash,
Range,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateColocationGroup {
pub if_not_exists: bool,
pub name: Ident,
pub partition: ColocationPartitionKind,
pub columns: ThinVec<Ident>,
pub shards: Literal,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropColocationGroup {
pub if_exists: bool,
pub name: Ident,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ViewCheckOption {
Unspecified,
Cascaded,
Local,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ViewAlgorithm {
Undefined,
Merge,
TempTable,
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ViewOptions {
pub algorithm: Option<ViewAlgorithm>,
pub definer: Option<Box<Definer>>,
pub sql_security: Option<SqlSecurityContext>,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterView<X: Extension = NoExt> {
pub options: ViewOptions,
pub name: ObjectName,
pub columns: ThinVec<Ident>,
pub query: Box<Query<X>>,
pub check_option: Option<ViewCheckOption>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateSecret<X: Extension = NoExt> {
pub persistent: bool,
pub name: ObjectName,
pub options: ThinVec<SecretOption<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct SecretOption<X: Extension = NoExt> {
pub name: Ident,
pub value: Expr<X>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropSecretStmt {
pub persistence: SecretPersistence,
pub if_exists: bool,
pub name: Ident,
pub storage: Option<Ident>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum SecretPersistence {
Default,
Temporary,
Persistent,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateVirtualTable {
pub if_not_exists: bool,
pub name: ObjectName,
pub module: Ident,
pub args: Option<ThinVec<ModuleArg>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ModuleArg {
pub text: Symbol,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateIndex<X: Extension = NoExt> {
pub unique: bool,
pub concurrently: bool,
pub if_not_exists: bool,
pub name: Option<Ident>,
pub table: ObjectName,
pub using: Option<Ident>,
pub columns: ThinVec<IndexColumn<X>>,
pub with_params: ThinVec<TableStorageParameter<X>>,
pub predicate: Option<Box<Expr<X>>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct IndexColumn<X: Extension = NoExt> {
pub expr: Expr<X>,
pub asc: Option<bool>,
pub nulls_first: Option<bool>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateTrigger<X: Extension = NoExt> {
pub temporary: Option<TemporaryTableKind>,
pub if_not_exists: bool,
pub name: ObjectName,
pub timing: Option<TriggerTiming>,
pub event: TriggerEvent,
pub table: ObjectName,
pub for_each_row: bool,
pub when: Option<Expr<X>>,
pub body: ThinVec<Statement<X>>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TriggerTiming {
Before,
After,
InsteadOf,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TriggerEvent {
Delete {
meta: Meta,
},
Insert {
meta: Meta,
},
Update {
columns: ThinVec<Ident>,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateStoredTrigger<X: Extension = NoExt> {
pub definer: Option<Box<Definer>>,
pub if_not_exists: bool,
pub name: ObjectName,
pub timing: TriggerTiming,
pub event: TriggerEvent,
pub table: ObjectName,
pub ordering: Option<TriggerOrder>,
pub body: Box<Statement<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TriggerOrder {
Follows {
anchor: Ident,
meta: Meta,
},
Precedes {
anchor: Ident,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateDatabase {
pub if_not_exists: bool,
pub name: ObjectName,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateFunction<X: Extension = NoExt> {
pub or_replace: bool,
pub definer: Option<Box<Definer>>,
pub if_not_exists: bool,
pub name: ObjectName,
pub params: ThinVec<FunctionParam<X>>,
pub returns: Option<DataType<X>>,
pub options: ThinVec<FunctionOption<X>>,
pub body: Option<Box<FunctionBody<X>>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct FunctionParam<X: Extension = NoExt> {
pub mode: Option<FunctionParamMode>,
pub name: Option<Ident>,
pub data_type: DataType<X>,
pub default: Option<Box<FunctionParamDefault<X>>>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum FunctionParamMode {
In,
Out,
InOut,
Variadic,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct FunctionParamDefault<X: Extension = NoExt> {
pub spelling: FunctionParamDefaultSpelling,
pub value: Expr<X>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum FunctionParamDefaultSpelling {
Default,
Equals,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum FunctionOption<X: Extension = NoExt> {
Language {
name: LanguageName,
meta: Meta,
},
As {
body: FunctionBody<X>,
meta: Meta,
},
NullBehavior {
behavior: FunctionNullBehavior,
meta: Meta,
},
Deterministic {
not: bool,
meta: Meta,
},
DataAccess {
access: SqlDataAccess,
meta: Meta,
},
SqlSecurity {
context: SqlSecurityContext,
meta: Meta,
},
Comment {
comment: Literal,
meta: Meta,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum SqlDataAccess {
ContainsSql,
NoSql,
ReadsSqlData,
ModifiesSqlData,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum SqlSecurityContext {
Definer,
Invoker,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum FunctionBody<X: Extension = NoExt> {
Definition {
definition: Literal,
meta: Meta,
},
Return {
expr: Box<Expr<X>>,
meta: Meta,
},
Block {
body: Box<Statement<X>>,
meta: Meta,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum FunctionNullBehavior {
CalledOnNull,
ReturnsNullOnNull,
Strict,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum Definer {
Account {
user: Ident,
host: Option<Ident>,
meta: Meta,
},
CurrentUser {
parens: bool,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateProcedure<X: Extension = NoExt> {
pub definer: Option<Box<Definer>>,
pub if_not_exists: bool,
pub name: ObjectName,
pub params: ThinVec<FunctionParam<X>>,
pub characteristics: ThinVec<FunctionOption<X>>,
pub body: Box<Statement<X>>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum RoutineKind {
Procedure,
Function,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterRoutine<X: Extension = NoExt> {
pub kind: RoutineKind,
pub name: ObjectName,
pub characteristics: ThinVec<FunctionOption<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum EventSchedule<X: Extension = NoExt> {
At {
at: Box<Expr<X>>,
meta: Meta,
},
Every {
value: Box<Expr<X>>,
unit: IntervalFields,
starts: Option<Box<Expr<X>>>,
ends: Option<Box<Expr<X>>>,
meta: Meta,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum EventOnCompletion {
Preserve,
NotPreserve,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum EventStatus {
Enable,
Disable,
DisableOnReplica(ReplicaSpelling),
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ReplicaSpelling {
Slave,
Replica,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateEvent<X: Extension = NoExt> {
pub definer: Option<Box<Definer>>,
pub if_not_exists: bool,
pub name: ObjectName,
pub schedule: EventSchedule<X>,
pub on_completion: Option<EventOnCompletion>,
pub status: Option<EventStatus>,
pub comment: Option<Literal>,
pub body: Box<Statement<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterEvent<X: Extension = NoExt> {
pub definer: Option<Box<Definer>>,
pub name: ObjectName,
pub schedule: Option<EventSchedule<X>>,
pub on_completion: Option<EventOnCompletion>,
pub rename_to: Option<ObjectName>,
pub status: Option<EventStatus>,
pub comment: Option<Literal>,
pub body: Option<Box<Statement<X>>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropEvent {
pub if_exists: bool,
pub name: ObjectName,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropDatabase {
pub spelling: DatabaseKeyword,
pub if_exists: bool,
pub name: Ident,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum DatabaseKeyword {
Database,
Schema,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropIndexOnTable {
pub name: Ident,
pub table: ObjectName,
pub options: ThinVec<IndexLockAlgorithmOption>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum IndexLockAlgorithmOption {
Algorithm {
equals: bool,
value: IndexAlgorithm,
},
Lock {
equals: bool,
value: IndexLock,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum IndexAlgorithm {
Default,
Inplace,
Instant,
Copy,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum IndexLock {
Default,
None,
Shared,
Exclusive,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateMacro<X: Extension = NoExt> {
pub or_replace: bool,
pub temporary: Option<TemporaryTableKind>,
pub spelling: MacroSpelling,
pub if_not_exists: bool,
pub name: ObjectName,
pub params: ThinVec<MacroParam<X>>,
pub body: MacroBody<X>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum MacroSpelling {
Macro,
Function,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct MacroParam<X: Extension = NoExt> {
pub name: Ident,
pub default: Option<Expr<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum MacroBody<X: Extension = NoExt> {
Scalar {
expr: Box<Expr<X>>,
meta: Meta,
},
Table {
query: Box<Query<X>>,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateType<X: Extension = NoExt> {
pub or_replace: bool,
pub temporary: Option<TemporaryTableKind>,
pub if_not_exists: bool,
pub name: ObjectName,
pub definition: CreateTypeDefinition<X>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum CreateTypeDefinition<X: Extension = NoExt> {
Enum {
labels: ThinVec<Literal>,
meta: Meta,
},
EnumFromQuery {
query: Box<Query<X>>,
meta: Meta,
},
Alias {
data_type: DataType<X>,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateSequence<X: Extension = NoExt> {
pub temporary: Option<TemporaryTableKind>,
pub if_not_exists: bool,
pub name: ObjectName,
pub options: ThinVec<IdentityOption<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateExtension {
pub if_not_exists: bool,
pub name: Ident,
pub with: bool,
pub options: ThinVec<CreateExtensionOption>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum CreateExtensionOption {
Schema {
name: Ident,
meta: Meta,
},
Version {
version: ExtensionVersion,
meta: Meta,
},
Cascade {
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ExtensionVersion {
Word {
word: Ident,
meta: Meta,
},
String {
value: Literal,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterExtension<X: Extension = NoExt> {
pub name: Ident,
pub action: AlterExtensionAction<X>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum AlterExtensionAction<X: Extension = NoExt> {
Update {
version: Option<ExtensionVersion>,
meta: Meta,
},
Change {
add: bool,
member: ObjectReference<X>,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterDatabase {
pub if_exists: bool,
pub name: Ident,
pub action: AlterDatabaseAction,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum AlterDatabaseAction {
SetAlias {
new_name: Ident,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterSequence<X: Extension = NoExt> {
pub if_exists: bool,
pub name: ObjectName,
pub options: ThinVec<AlterSequenceOption<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum AlterSequenceOption<X: Extension = NoExt> {
Common {
option: IdentityOption<X>,
meta: Meta,
},
Restart {
value: Option<Expr<X>>,
meta: Meta,
},
As {
data_type: DataType<X>,
meta: Meta,
},
OwnedBy {
owner: Option<ObjectName>,
meta: Meta,
},
SequenceName {
name: ObjectName,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterObjectSchema {
pub object_type: SchemaRelocationObject,
pub if_exists: bool,
pub name: ObjectName,
pub new_schema: Ident,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum SchemaRelocationObject {
Table,
View,
Sequence,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ObjectReference<X: Extension = NoExt> {
Named {
kind: ObjectRefKind,
name: ObjectName,
meta: Meta,
},
Routine {
kind: RoutineObjectKind,
signature: RoutineSignature<X>,
meta: Meta,
},
Aggregate {
name: ObjectName,
args: AggregateArgs<X>,
meta: Meta,
},
Operator {
schema: ObjectName,
op: Symbol,
args: OperatorArgs<X>,
meta: Meta,
},
OperatorClass {
family: bool,
name: ObjectName,
access_method: Ident,
meta: Meta,
},
Cast {
from: DataType<X>,
to: DataType<X>,
meta: Meta,
},
Type {
domain: bool,
name: DataType<X>,
meta: Meta,
},
Transform {
type_name: DataType<X>,
language: Ident,
meta: Meta,
},
Trigger {
name: Ident,
table: ObjectName,
meta: Meta,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ObjectRefKind {
Table,
Sequence,
View,
MaterializedView,
Index,
ForeignTable,
Collation,
Conversion,
Statistics,
TextSearchParser,
TextSearchDictionary,
TextSearchTemplate,
TextSearchConfiguration,
AccessMethod,
EventTrigger,
Extension,
ForeignDataWrapper,
Language,
Publication,
Schema,
Server,
Database,
Role,
Tablespace,
}
impl ObjectRefKind {
pub fn schema_qualifiable(self) -> bool {
matches!(
self,
Self::Table
| Self::Sequence
| Self::View
| Self::MaterializedView
| Self::Index
| Self::ForeignTable
| Self::Collation
| Self::Conversion
| Self::Statistics
| Self::TextSearchParser
| Self::TextSearchDictionary
| Self::TextSearchTemplate
| Self::TextSearchConfiguration
)
}
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum AggregateArgs<X: Extension = NoExt> {
Star {
meta: Meta,
},
Types {
direct: ThinVec<DataType<X>>,
order_by: Option<ThinVec<DataType<X>>>,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct OperatorArgs<X: Extension = NoExt> {
pub left: Option<DataType<X>>,
pub right: Option<DataType<X>>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterObjectDepends<X: Extension = NoExt> {
pub object: ObjectReference<X>,
pub no: bool,
pub extension: Ident,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateServer {
pub name: Ident,
pub wrapper: Ident,
pub options: ThinVec<ServerOption>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterServer {
pub name: Ident,
pub options: ThinVec<ServerOption>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropServer {
pub if_exists: bool,
pub name: Ident,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ServerOption {
pub kind: ServerOptionKind,
pub value: Literal,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ServerOptionKind {
Host,
Database,
User,
Password,
Socket,
Owner,
Port,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterInstance {
pub action: AlterInstanceAction,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum AlterInstanceAction {
RotateInnodbMasterKey {
meta: Meta,
},
RotateBinlogMasterKey {
meta: Meta,
},
ReloadTls {
channel: Option<Ident>,
no_rollback_on_error: bool,
meta: Meta,
},
ReloadKeyring {
meta: Meta,
},
EnableInnodbRedoLog {
meta: Meta,
},
DisableInnodbRedoLog {
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateSpatialReferenceSystem {
pub or_replace: bool,
pub if_not_exists: bool,
pub srid: Literal,
pub attributes: ThinVec<SrsAttribute>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum SrsAttribute {
Name {
value: Literal,
meta: Meta,
},
Definition {
value: Literal,
meta: Meta,
},
Organization {
organization: Literal,
identifier: Literal,
meta: Meta,
},
Description {
value: Literal,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropSpatialReferenceSystem {
pub if_exists: bool,
pub srid: Literal,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateResourceGroup {
pub name: Ident,
pub type_equals: bool,
pub group_type: ResourceGroupType,
pub vcpu: Option<ResourceGroupVcpu>,
pub thread_priority: Option<ResourceGroupThreadPriority>,
pub state: Option<ResourceGroupState>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterResourceGroup {
pub name: Ident,
pub vcpu: Option<ResourceGroupVcpu>,
pub thread_priority: Option<ResourceGroupThreadPriority>,
pub state: Option<ResourceGroupState>,
pub force: bool,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropResourceGroup {
pub name: Ident,
pub force: bool,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ResourceGroupType {
System,
User,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ResourceGroupState {
Enable,
Disable,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ResourceGroupVcpu {
pub equals: bool,
pub ranges: ThinVec<VcpuRange>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct VcpuRange {
pub start: Literal,
pub end: Option<Literal>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct ResourceGroupThreadPriority {
pub equals: bool,
pub negative: bool,
pub value: Literal,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterDatabaseOptions {
pub spelling: DatabaseKeyword,
pub name: Option<Ident>,
pub options: ThinVec<AlterDatabaseOption>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum AlterDatabaseOption {
CharacterSet {
default: bool,
keyword: CharsetKeyword,
equals: bool,
charset: Ident,
meta: Meta,
},
Collate {
default: bool,
equals: bool,
collation: Ident,
meta: Meta,
},
Encryption {
default: bool,
equals: bool,
value: Literal,
meta: Meta,
},
ReadOnly {
equals: bool,
value: ReadOnlyValue,
meta: Meta,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum CharsetKeyword {
CharacterSet,
Charset,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ReadOnlyValue {
Default,
Off,
On,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum SizeUnit {
Kilo,
Mega,
Giga,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct SizeLiteral {
pub unit: Option<SizeUnit>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TablespaceSizeOption {
InitialSize,
AutoextendSize,
MaxSize,
ExtentSize,
UndoBufferSize,
RedoBufferSize,
FileBlockSize,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum TablespaceOption {
Size {
kind: TablespaceSizeOption,
equals: bool,
size: SizeLiteral,
meta: Meta,
},
Nodegroup {
equals: bool,
value: Literal,
meta: Meta,
},
Engine {
storage: bool,
equals: bool,
name: Ident,
meta: Meta,
},
Wait {
negated: bool,
meta: Meta,
},
Comment {
equals: bool,
value: Literal,
meta: Meta,
},
Encryption {
equals: bool,
value: Literal,
meta: Meta,
},
EngineAttribute {
equals: bool,
value: Literal,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateTablespace {
pub undo: bool,
pub name: Ident,
pub datafile: Option<Literal>,
pub use_logfile_group: Option<Ident>,
pub options: ThinVec<TablespaceOption>,
pub meta: Meta,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum UndoTablespaceState {
Active,
Inactive,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterTablespace {
pub name: Ident,
pub action: AlterTablespaceAction,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum AlterTablespaceAction {
AddDatafile {
datafile: Literal,
options: ThinVec<TablespaceOption>,
meta: Meta,
},
DropDatafile {
datafile: Literal,
options: ThinVec<TablespaceOption>,
meta: Meta,
},
Rename {
new_name: Ident,
meta: Meta,
},
Options {
options: ThinVec<TablespaceOption>,
meta: Meta,
},
SetState {
state: UndoTablespaceState,
options: ThinVec<TablespaceOption>,
meta: Meta,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropTablespace {
pub undo: bool,
pub name: Ident,
pub options: ThinVec<TablespaceOption>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct CreateLogfileGroup {
pub name: Ident,
pub undofile: Literal,
pub options: ThinVec<TablespaceOption>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct AlterLogfileGroup {
pub name: Ident,
pub undofile: Literal,
pub options: ThinVec<TablespaceOption>,
pub meta: Meta,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub struct DropLogfileGroup {
pub name: Ident,
pub options: ThinVec<TablespaceOption>,
pub meta: Meta,
}