use std::fmt::Display;
use std::fmt::Formatter;
use derive_visitor::Drive;
use derive_visitor::DriveMut;
use crate::ast::Identifier;
use crate::ast::quote::QuotedString;
#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
pub struct ShareNameIdent {
pub tenant: Identifier,
pub share: Identifier,
}
impl Display for ShareNameIdent {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
write!(f, "{}.{}", self.tenant, self.share)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
pub struct UserIdentity {
pub username: String,
pub hostname: String,
}
impl Display for UserIdentity {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
write!(
f,
"{}@{}",
QuotedString(&self.username, '\''),
QuotedString(&self.hostname, '\''),
)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
pub enum PrincipalIdentity {
User(UserIdentity),
Role(String),
}
impl Display for PrincipalIdentity {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
match self {
PrincipalIdentity::User(u) => write!(f, " USER {u}"),
PrincipalIdentity::Role(r) => write!(f, " ROLE '{r}'"),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
pub enum CreateOption {
Create,
CreateIfNotExists,
CreateOrReplace,
}
#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
pub enum AuthType {
NoPassword,
Sha256Password,
DoubleSha1Password,
JWT,
}
impl Display for AuthType {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
write!(f, "{}", match self {
AuthType::NoPassword => "no_password",
AuthType::Sha256Password => "sha256_password",
AuthType::DoubleSha1Password => "double_sha1_password",
AuthType::JWT => "jwt",
})
}
}
#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
pub enum CatalogType {
Default,
Hive,
Iceberg,
}
impl Display for CatalogType {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
match self {
CatalogType::Default => write!(f, "DEFAULT"),
CatalogType::Hive => write!(f, "HIVE"),
CatalogType::Iceberg => write!(f, "ICEBERG"),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
pub enum UserPrivilegeType {
Usage,
Select,
Insert,
Update,
Delete,
Create,
Drop,
Alter,
Super,
CreateUser,
CreateRole,
Grant,
CreateStage,
DropRole,
DropUser,
CreateMaskingPolicy,
ApplyMaskingPolicy,
CreateRowAccessPolicy,
ApplyRowAccessPolicy,
Ownership,
Read,
Write,
CreateDatabase,
CreateWarehouse,
AccessConnection,
CreateConnection,
AccessSequence,
CreateSequence,
AccessProcedure,
CreateProcedure,
Set,
}
impl Display for UserPrivilegeType {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
write!(f, "{}", match self {
UserPrivilegeType::Usage => "USAGE",
UserPrivilegeType::Create => "CREATE",
UserPrivilegeType::Update => "UPDATE",
UserPrivilegeType::Select => "SELECT",
UserPrivilegeType::Insert => "INSERT",
UserPrivilegeType::Delete => "DELETE",
UserPrivilegeType::Drop => "DROP",
UserPrivilegeType::Alter => "ALTER",
UserPrivilegeType::Super => "SUPER",
UserPrivilegeType::CreateUser => "CREATE USER",
UserPrivilegeType::DropUser => "DROP USER",
UserPrivilegeType::CreateRole => "CREATE ROLE",
UserPrivilegeType::DropRole => "DROP ROLE",
UserPrivilegeType::CreateStage => "CREATE STAGE",
UserPrivilegeType::Grant => "GRANT",
UserPrivilegeType::Set => "SET",
UserPrivilegeType::CreateMaskingPolicy => "CREATE MASKING POLICY",
UserPrivilegeType::ApplyMaskingPolicy => "APPLY MASKING POLICY",
UserPrivilegeType::CreateRowAccessPolicy => "CREATE ROW ACCESS POLICY",
UserPrivilegeType::ApplyRowAccessPolicy => "APPLY ROW ACCESS POLICY",
UserPrivilegeType::Ownership => "OWNERSHIP",
UserPrivilegeType::Read => "Read",
UserPrivilegeType::Write => "Write",
UserPrivilegeType::CreateDatabase => "CREATE DATABASE",
UserPrivilegeType::CreateWarehouse => "CREATE WAREHOUSE",
UserPrivilegeType::CreateConnection => "CREATE CONNECTION",
UserPrivilegeType::AccessConnection => "ACCESS CONNECTION",
UserPrivilegeType::CreateSequence => "CREATE SEQUENCE",
UserPrivilegeType::AccessSequence => "ACCESS SEQUENCE",
UserPrivilegeType::CreateProcedure => "CREATE PROCEDURE",
UserPrivilegeType::AccessProcedure => "ACCESS PROCEDURE",
})
}
}
#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
pub enum ShareGrantObjectPrivilege {
Usage,
ReferenceUsage,
Select,
}
impl Display for ShareGrantObjectPrivilege {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
match *self {
ShareGrantObjectPrivilege::Usage => write!(f, "USAGE"),
ShareGrantObjectPrivilege::ReferenceUsage => write!(f, "REFERENCE_USAGE"),
ShareGrantObjectPrivilege::Select => write!(f, "SELECT"),
}
}
}