databend_common_ast/ast/statements/
principal.rs1use std::fmt::Display;
16use std::fmt::Formatter;
17
18use derive_visitor::Drive;
19use derive_visitor::DriveMut;
20
21use crate::ast::Identifier;
22use crate::ast::quote::QuotedString;
23
24#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
25pub struct ShareNameIdent {
26 pub tenant: Identifier,
27 pub share: Identifier,
28}
29
30impl Display for ShareNameIdent {
31 fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
32 write!(f, "{}.{}", self.tenant, self.share)
33 }
34}
35
36#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
37pub struct UserIdentity {
38 pub username: String,
39 pub hostname: String,
40}
41
42impl Display for UserIdentity {
43 fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
44 write!(
45 f,
46 "{}@{}",
47 QuotedString(&self.username, '\''),
48 QuotedString(&self.hostname, '\''),
49 )
50 }
51}
52
53#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
54pub enum PrincipalIdentity {
55 User(UserIdentity),
56 Role(String),
57}
58
59impl Display for PrincipalIdentity {
60 fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
61 match self {
62 PrincipalIdentity::User(u) => write!(f, " USER {u}"),
63 PrincipalIdentity::Role(r) => write!(f, " ROLE '{r}'"),
64 }
65 }
66}
67
68#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
69pub enum CreateOption {
70 Create,
71 CreateIfNotExists,
72 CreateOrReplace,
73}
74
75#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
76pub enum AuthType {
77 NoPassword,
78 Sha256Password,
79 DoubleSha1Password,
80 JWT,
81}
82
83impl Display for AuthType {
84 fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
85 write!(f, "{}", match self {
86 AuthType::NoPassword => "no_password",
87 AuthType::Sha256Password => "sha256_password",
88 AuthType::DoubleSha1Password => "double_sha1_password",
89 AuthType::JWT => "jwt",
90 })
91 }
92}
93
94#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
95pub enum CatalogType {
96 Default,
97 Hive,
98 Iceberg,
99}
100
101impl Display for CatalogType {
102 fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
103 match self {
104 CatalogType::Default => write!(f, "DEFAULT"),
105 CatalogType::Hive => write!(f, "HIVE"),
106 CatalogType::Iceberg => write!(f, "ICEBERG"),
107 }
108 }
109}
110
111#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
112pub enum UserPrivilegeType {
113 Usage,
115 Select,
117 Insert,
119 Update,
121 Delete,
123 Create,
125 Drop,
127 Alter,
129 Super,
131 CreateUser,
133 CreateRole,
135 Grant,
137 CreateStage,
139 DropRole,
141 DropUser,
143 CreateMaskingPolicy,
145 ApplyMaskingPolicy,
147 CreateRowAccessPolicy,
149 ApplyRowAccessPolicy,
151 Ownership,
153 Read,
155 Write,
157 CreateDatabase,
159 CreateWarehouse,
161 AccessConnection,
163 CreateConnection,
165 AccessSequence,
167 CreateSequence,
169 AccessProcedure,
171 CreateProcedure,
173 Set,
175}
176
177impl Display for UserPrivilegeType {
178 fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
179 write!(f, "{}", match self {
180 UserPrivilegeType::Usage => "USAGE",
181 UserPrivilegeType::Create => "CREATE",
182 UserPrivilegeType::Update => "UPDATE",
183 UserPrivilegeType::Select => "SELECT",
184 UserPrivilegeType::Insert => "INSERT",
185 UserPrivilegeType::Delete => "DELETE",
186 UserPrivilegeType::Drop => "DROP",
187 UserPrivilegeType::Alter => "ALTER",
188 UserPrivilegeType::Super => "SUPER",
189 UserPrivilegeType::CreateUser => "CREATE USER",
190 UserPrivilegeType::DropUser => "DROP USER",
191 UserPrivilegeType::CreateRole => "CREATE ROLE",
192 UserPrivilegeType::DropRole => "DROP ROLE",
193 UserPrivilegeType::CreateStage => "CREATE STAGE",
194 UserPrivilegeType::Grant => "GRANT",
195 UserPrivilegeType::Set => "SET",
196 UserPrivilegeType::CreateMaskingPolicy => "CREATE MASKING POLICY",
197 UserPrivilegeType::ApplyMaskingPolicy => "APPLY MASKING POLICY",
198 UserPrivilegeType::CreateRowAccessPolicy => "CREATE ROW ACCESS POLICY",
199 UserPrivilegeType::ApplyRowAccessPolicy => "APPLY ROW ACCESS POLICY",
200 UserPrivilegeType::Ownership => "OWNERSHIP",
201 UserPrivilegeType::Read => "Read",
202 UserPrivilegeType::Write => "Write",
203 UserPrivilegeType::CreateDatabase => "CREATE DATABASE",
204 UserPrivilegeType::CreateWarehouse => "CREATE WAREHOUSE",
205 UserPrivilegeType::CreateConnection => "CREATE CONNECTION",
206 UserPrivilegeType::AccessConnection => "ACCESS CONNECTION",
207 UserPrivilegeType::CreateSequence => "CREATE SEQUENCE",
208 UserPrivilegeType::AccessSequence => "ACCESS SEQUENCE",
209 UserPrivilegeType::CreateProcedure => "CREATE PROCEDURE",
210 UserPrivilegeType::AccessProcedure => "ACCESS PROCEDURE",
211 })
212 }
213}
214
215#[derive(Debug, Clone, PartialEq, Eq, Drive, DriveMut)]
216pub enum ShareGrantObjectPrivilege {
217 Usage,
219 ReferenceUsage,
221 Select,
223}
224
225impl Display for ShareGrantObjectPrivilege {
226 fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
227 match *self {
228 ShareGrantObjectPrivilege::Usage => write!(f, "USAGE"),
229 ShareGrantObjectPrivilege::ReferenceUsage => write!(f, "REFERENCE_USAGE"),
230 ShareGrantObjectPrivilege::Select => write!(f, "SELECT"),
231 }
232 }
233}