use super::{AccountName, Ident, Literal, ObjectName};
use crate::vocab::Meta;
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 enum ReplicationStatement {
ChangeSource {
options: ThinVec<ChangeReplicationSourceOption>,
channel: Option<Literal>,
meta: Meta,
},
ChangeFilter {
rules: ThinVec<ReplicationFilterRule>,
channel: Option<Literal>,
meta: Meta,
},
StartReplica {
threads: ThinVec<ReplicaThreadOption>,
until: ThinVec<ReplicaUntilCondition>,
user: Option<Literal>,
password: Option<Literal>,
default_auth: Option<Literal>,
plugin_dir: Option<Literal>,
channel: Option<Literal>,
meta: Meta,
},
StopReplica {
threads: ThinVec<ReplicaThreadOption>,
channel: Option<Literal>,
meta: Meta,
},
StartGroupReplication {
options: ThinVec<GroupReplicationOption>,
meta: Meta,
},
StopGroupReplication {
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 ChangeReplicationSourceOption {
pub name: SourceOption,
pub value: ChangeReplicationSourceOptionValue,
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 SourceOption {
SourceBind,
SourceHost,
SourceUser,
SourcePassword,
SourcePort,
SourceConnectRetry,
SourceRetryCount,
SourceDelay,
SourceHeartbeatPeriod,
SourceLogFile,
SourceLogPos,
SourceAutoPosition,
RelayLogFile,
RelayLogPos,
SourceSsl,
SourceSslCa,
SourceSslCapath,
SourceSslCert,
SourceSslCipher,
SourceSslKey,
SourceSslVerifyServerCert,
SourceSslCrl,
SourceSslCrlpath,
SourceTlsVersion,
SourceTlsCiphersuites,
SourcePublicKeyPath,
GetSourcePublicKey,
NetworkNamespace,
IgnoreServerIds,
SourceCompressionAlgorithms,
SourceZstdCompressionLevel,
PrivilegeChecksUser,
RequireRowFormat,
RequireTablePrimaryKeyCheck,
SourceConnectionAutoFailover,
AssignGtidsToAnonymousTransactions,
GtidOnly,
}
impl SourceOption {
pub fn keyword(self) -> &'static str {
match self {
Self::SourceBind => "SOURCE_BIND",
Self::SourceHost => "SOURCE_HOST",
Self::SourceUser => "SOURCE_USER",
Self::SourcePassword => "SOURCE_PASSWORD",
Self::SourcePort => "SOURCE_PORT",
Self::SourceConnectRetry => "SOURCE_CONNECT_RETRY",
Self::SourceRetryCount => "SOURCE_RETRY_COUNT",
Self::SourceDelay => "SOURCE_DELAY",
Self::SourceHeartbeatPeriod => "SOURCE_HEARTBEAT_PERIOD",
Self::SourceLogFile => "SOURCE_LOG_FILE",
Self::SourceLogPos => "SOURCE_LOG_POS",
Self::SourceAutoPosition => "SOURCE_AUTO_POSITION",
Self::RelayLogFile => "RELAY_LOG_FILE",
Self::RelayLogPos => "RELAY_LOG_POS",
Self::SourceSsl => "SOURCE_SSL",
Self::SourceSslCa => "SOURCE_SSL_CA",
Self::SourceSslCapath => "SOURCE_SSL_CAPATH",
Self::SourceSslCert => "SOURCE_SSL_CERT",
Self::SourceSslCipher => "SOURCE_SSL_CIPHER",
Self::SourceSslKey => "SOURCE_SSL_KEY",
Self::SourceSslVerifyServerCert => "SOURCE_SSL_VERIFY_SERVER_CERT",
Self::SourceSslCrl => "SOURCE_SSL_CRL",
Self::SourceSslCrlpath => "SOURCE_SSL_CRLPATH",
Self::SourceTlsVersion => "SOURCE_TLS_VERSION",
Self::SourceTlsCiphersuites => "SOURCE_TLS_CIPHERSUITES",
Self::SourcePublicKeyPath => "SOURCE_PUBLIC_KEY_PATH",
Self::GetSourcePublicKey => "GET_SOURCE_PUBLIC_KEY",
Self::NetworkNamespace => "NETWORK_NAMESPACE",
Self::IgnoreServerIds => "IGNORE_SERVER_IDS",
Self::SourceCompressionAlgorithms => "SOURCE_COMPRESSION_ALGORITHMS",
Self::SourceZstdCompressionLevel => "SOURCE_ZSTD_COMPRESSION_LEVEL",
Self::PrivilegeChecksUser => "PRIVILEGE_CHECKS_USER",
Self::RequireRowFormat => "REQUIRE_ROW_FORMAT",
Self::RequireTablePrimaryKeyCheck => "REQUIRE_TABLE_PRIMARY_KEY_CHECK",
Self::SourceConnectionAutoFailover => "SOURCE_CONNECTION_AUTO_FAILOVER",
Self::AssignGtidsToAnonymousTransactions => "ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS",
Self::GtidOnly => "GTID_ONLY",
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ChangeReplicationSourceOptionValue {
String {
value: Literal,
meta: Meta,
},
Number {
value: Literal,
meta: Meta,
},
NullableString {
value: Option<Literal>,
meta: Meta,
},
User {
account: Option<AccountName>,
meta: Meta,
},
ServerIds {
ids: ThinVec<Literal>,
meta: Meta,
},
PrimaryKeyCheck {
check: RequirePrimaryKeyCheck,
meta: Meta,
},
AssignGtids {
kind: AssignGtidsKind,
uuid: Option<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 RequirePrimaryKeyCheck {
On,
Off,
Stream,
Generate,
}
#[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 AssignGtidsKind {
Off,
Local,
Uuid,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ReplicationFilterRule {
DoDb {
databases: ThinVec<Ident>,
meta: Meta,
},
IgnoreDb {
databases: ThinVec<Ident>,
meta: Meta,
},
DoTable {
tables: ThinVec<ObjectName>,
meta: Meta,
},
IgnoreTable {
tables: ThinVec<ObjectName>,
meta: Meta,
},
WildDoTable {
patterns: ThinVec<Literal>,
meta: Meta,
},
WildIgnoreTable {
patterns: ThinVec<Literal>,
meta: Meta,
},
RewriteDb {
pairs: ThinVec<RewriteDbPair>,
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 RewriteDbPair {
pub from: Ident,
pub to: 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 ReplicaThreadOption {
Sql {
meta: Meta,
},
Io {
keyword: IoThreadKeyword,
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 IoThreadKeyword {
Io,
Relay,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
#[cfg_attr(feature = "serde-deserialize", derive(serde::Deserialize))]
pub enum ReplicaUntilCondition {
SourceLogFile {
value: Literal,
meta: Meta,
},
SourceLogPos {
value: Literal,
meta: Meta,
},
RelayLogFile {
value: Literal,
meta: Meta,
},
RelayLogPos {
value: Literal,
meta: Meta,
},
SqlBeforeGtids {
value: Literal,
meta: Meta,
},
SqlAfterGtids {
value: Literal,
meta: Meta,
},
SqlAfterMtsGaps {
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 GroupReplicationOption {
User {
value: Literal,
meta: Meta,
},
Password {
value: Literal,
meta: Meta,
},
DefaultAuth {
value: Literal,
meta: Meta,
},
}