Skip to content

Commit e30755f

Browse files
committed
Add support for Snowflake account privileges
1 parent 5da702f commit e30755f

File tree

5 files changed

+651
-71
lines changed

5 files changed

+651
-71
lines changed

src/ast/mod.rs

Lines changed: 266 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5453,29 +5453,107 @@ impl fmt::Display for FetchDirection {
54535453
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
54545454
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
54555455
pub enum Action {
5456+
AddSearchOptimization,
5457+
Apply {
5458+
apply_type: ActionApplyType,
5459+
},
5460+
ApplyBudget,
5461+
AttachListing,
5462+
AttachPolicy,
5463+
Audit,
5464+
BindServiceEndpoint,
54565465
Connect,
5457-
Create,
5466+
Create {
5467+
obj_type: Option<ActionCreateObjectType>,
5468+
},
54585469
Delete,
5459-
Execute,
5460-
Insert { columns: Option<Vec<Ident>> },
5461-
References { columns: Option<Vec<Ident>> },
5462-
Select { columns: Option<Vec<Ident>> },
5470+
EvolveSchema,
5471+
Execute {
5472+
obj_type: Option<ActionExecuteObjectType>,
5473+
},
5474+
Failover,
5475+
ImportedPrivileges,
5476+
ImportShare,
5477+
Insert {
5478+
columns: Option<Vec<Ident>>,
5479+
},
5480+
Manage {
5481+
manage_type: ActionManageType,
5482+
},
5483+
ManageReleases,
5484+
ManageVersions,
5485+
Modify {
5486+
modify_type: ActionModifyType,
5487+
},
5488+
Monitor {
5489+
monitor_type: ActionMonitorType,
5490+
},
5491+
Operate,
5492+
OverrideShareRestrictions,
5493+
Ownership,
5494+
PurchaseDataExchangeListing,
5495+
Read,
5496+
ReadSession,
5497+
References {
5498+
columns: Option<Vec<Ident>>,
5499+
},
5500+
Replicate,
5501+
ResolveAll,
5502+
Select {
5503+
columns: Option<Vec<Ident>>,
5504+
},
54635505
Temporary,
54645506
Trigger,
54655507
Truncate,
5466-
Update { columns: Option<Vec<Ident>> },
5508+
Update {
5509+
columns: Option<Vec<Ident>>,
5510+
},
54675511
Usage,
54685512
}
54695513

54705514
impl fmt::Display for Action {
54715515
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
54725516
match self {
5517+
Action::AddSearchOptimization => f.write_str("ADD SEARCH OPTIMIZATION")?,
5518+
Action::Apply { apply_type } => write!(f, "APPLY {apply_type}")?,
5519+
Action::ApplyBudget => f.write_str("APPLY BUDGET")?,
5520+
Action::AttachListing => f.write_str("ATTACH LISTING")?,
5521+
Action::AttachPolicy => f.write_str("ATTACH POLICY")?,
5522+
Action::Audit => f.write_str("AUDIT")?,
5523+
Action::BindServiceEndpoint => f.write_str("BIND SERVICE ENDPOINT")?,
54735524
Action::Connect => f.write_str("CONNECT")?,
5474-
Action::Create => f.write_str("CREATE")?,
5525+
Action::Create { obj_type } => {
5526+
f.write_str("CREATE")?;
5527+
if let Some(obj_type) = obj_type {
5528+
write!(f, " {obj_type}")?
5529+
}
5530+
}
54755531
Action::Delete => f.write_str("DELETE")?,
5476-
Action::Execute => f.write_str("EXECUTE")?,
5532+
Action::EvolveSchema => f.write_str("EVOLVE SCHEMA")?,
5533+
Action::Execute { obj_type } => {
5534+
f.write_str("EXECUTE")?;
5535+
if let Some(obj_type) = obj_type {
5536+
write!(f, " {obj_type}")?
5537+
}
5538+
}
5539+
Action::Failover => f.write_str("FAILOVER")?,
5540+
Action::ImportedPrivileges => f.write_str("IMPORTED PRIVILEGES")?,
5541+
Action::ImportShare => f.write_str("IMPORT SHARE")?,
54775542
Action::Insert { .. } => f.write_str("INSERT")?,
5543+
Action::Manage { manage_type } => write!(f, "MANAGE {manage_type}")?,
5544+
Action::ManageReleases => f.write_str("MANAGE RELEASES")?,
5545+
Action::ManageVersions => f.write_str("MANAGE VERSIONS")?,
5546+
Action::Modify { modify_type } => write!(f, "MODIFY {modify_type}")?,
5547+
Action::Monitor { monitor_type } => write!(f, "MONITOR {monitor_type}")?,
5548+
Action::Operate => f.write_str("OPERATE")?,
5549+
Action::OverrideShareRestrictions => f.write_str("OVERRIDE SHARE RESTRICTIONS")?,
5550+
Action::Ownership => f.write_str("OWNERSHIP")?,
5551+
Action::PurchaseDataExchangeListing => f.write_str("PURCHASE DATA EXCHANGE LISTING")?,
5552+
Action::Read => f.write_str("READ")?,
5553+
Action::ReadSession => f.write_str("READ SESSION")?,
54785554
Action::References { .. } => f.write_str("REFERENCES")?,
5555+
Action::Replicate => f.write_str("REPLICATE")?,
5556+
Action::ResolveAll => f.write_str("RESOLVE ALL")?,
54795557
Action::Select { .. } => f.write_str("SELECT")?,
54805558
Action::Temporary => f.write_str("TEMPORARY")?,
54815559
Action::Trigger => f.write_str("TRIGGER")?,
@@ -5498,6 +5576,186 @@ impl fmt::Display for Action {
54985576
}
54995577
}
55005578

5579+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5580+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5581+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5582+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5583+
/// under `globalPrivileges` in the `CREATE` privilege.
5584+
pub enum ActionCreateObjectType {
5585+
Account,
5586+
Application,
5587+
ApplicationPackage,
5588+
ComputePool,
5589+
DataExchangeListing,
5590+
Database,
5591+
ExternalVolume,
5592+
FailoverGroup,
5593+
Integration,
5594+
NetworkPolicy,
5595+
OrganiationListing,
5596+
ReplicationGroup,
5597+
Role,
5598+
Share,
5599+
User,
5600+
Warehouse,
5601+
}
5602+
5603+
impl fmt::Display for ActionCreateObjectType {
5604+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5605+
match self {
5606+
ActionCreateObjectType::Account => write!(f, "ACCOUNT"),
5607+
ActionCreateObjectType::Application => write!(f, "APPLICATION"),
5608+
ActionCreateObjectType::ApplicationPackage => write!(f, "APPLICATION PACKAGE"),
5609+
ActionCreateObjectType::ComputePool => write!(f, "COMPUTE POOL"),
5610+
ActionCreateObjectType::DataExchangeListing => write!(f, "DATA EXCHANGE LISTING"),
5611+
ActionCreateObjectType::Database => write!(f, "DATABASE"),
5612+
ActionCreateObjectType::ExternalVolume => write!(f, "EXTERNAL VOLUME"),
5613+
ActionCreateObjectType::FailoverGroup => write!(f, "FAILOVER GROUP"),
5614+
ActionCreateObjectType::Integration => write!(f, "INTEGRATION"),
5615+
ActionCreateObjectType::NetworkPolicy => write!(f, "NETWORK POLICY"),
5616+
ActionCreateObjectType::OrganiationListing => write!(f, "ORGANIZATION LISTING"),
5617+
ActionCreateObjectType::ReplicationGroup => write!(f, "REPLICATION GROUP"),
5618+
ActionCreateObjectType::Role => write!(f, "ROLE"),
5619+
ActionCreateObjectType::Share => write!(f, "SHARE"),
5620+
ActionCreateObjectType::User => write!(f, "USER"),
5621+
ActionCreateObjectType::Warehouse => write!(f, "WAREHOUSE"),
5622+
}
5623+
}
5624+
}
5625+
5626+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5627+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5628+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5629+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5630+
/// under `globalPrivileges` in the `APPLY` privilege.
5631+
pub enum ActionApplyType {
5632+
AggregationPolicy,
5633+
AuthenticationPolicy,
5634+
JoinPolicy,
5635+
MaskingPolicy,
5636+
PackagesPolicy,
5637+
PasswordPolicy,
5638+
ProjectionPolicy,
5639+
RowAccessPolicy,
5640+
SessionPolicy,
5641+
Tag,
5642+
}
5643+
5644+
impl fmt::Display for ActionApplyType {
5645+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5646+
match self {
5647+
ActionApplyType::AggregationPolicy => write!(f, "AGGREGATION POLICY"),
5648+
ActionApplyType::AuthenticationPolicy => write!(f, "AUTHENTICATION POLICY"),
5649+
ActionApplyType::JoinPolicy => write!(f, "JOIN POLICY"),
5650+
ActionApplyType::MaskingPolicy => write!(f, "MASKING POLICY"),
5651+
ActionApplyType::PackagesPolicy => write!(f, "PACKAGES POLICY"),
5652+
ActionApplyType::PasswordPolicy => write!(f, "PASSWORD POLICY"),
5653+
ActionApplyType::ProjectionPolicy => write!(f, "PROJECTION POLICY"),
5654+
ActionApplyType::RowAccessPolicy => write!(f, "ROW ACCESS POLICY"),
5655+
ActionApplyType::SessionPolicy => write!(f, "SESSION POLICY"),
5656+
ActionApplyType::Tag => write!(f, "TAG"),
5657+
}
5658+
}
5659+
}
5660+
5661+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5662+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5663+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5664+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5665+
/// under `globalPrivileges` in the `EXECUTE` privilege.
5666+
pub enum ActionExecuteObjectType {
5667+
Alert,
5668+
DataMetricFunction,
5669+
ManagedAlert,
5670+
ManagedTask,
5671+
Task,
5672+
}
5673+
5674+
impl fmt::Display for ActionExecuteObjectType {
5675+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5676+
match self {
5677+
ActionExecuteObjectType::Alert => write!(f, "ALERT"),
5678+
ActionExecuteObjectType::DataMetricFunction => write!(f, "DATA METRIC FUNCTION"),
5679+
ActionExecuteObjectType::ManagedAlert => write!(f, "MANAGED ALERT"),
5680+
ActionExecuteObjectType::ManagedTask => write!(f, "MANAGED TASK"),
5681+
ActionExecuteObjectType::Task => write!(f, "TASK"),
5682+
}
5683+
}
5684+
}
5685+
5686+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5687+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5688+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5689+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5690+
/// under `globalPrivileges` in the `MANAGE` privilege.
5691+
pub enum ActionManageType {
5692+
AccountSupportCases,
5693+
EventSharing,
5694+
Grants,
5695+
ListingAutoFulfillment,
5696+
OrganizationSupportCases,
5697+
UserSupportCases,
5698+
Warehouses,
5699+
}
5700+
5701+
impl fmt::Display for ActionManageType {
5702+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5703+
match self {
5704+
ActionManageType::AccountSupportCases => write!(f, "ACCOUNT SUPPORT CASES"),
5705+
ActionManageType::EventSharing => write!(f, "EVENT SHARING"),
5706+
ActionManageType::Grants => write!(f, "GRANTS"),
5707+
ActionManageType::ListingAutoFulfillment => write!(f, "LISTING AUTO FULFILLMENT"),
5708+
ActionManageType::OrganizationSupportCases => write!(f, "ORGANIZATION SUPPORT CASES"),
5709+
ActionManageType::UserSupportCases => write!(f, "USER SUPPORT CASES"),
5710+
ActionManageType::Warehouses => write!(f, "WAREHOUSES"),
5711+
}
5712+
}
5713+
}
5714+
5715+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5716+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5717+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5718+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5719+
/// under `globalPrivileges` in the `MODIFY` privilege.
5720+
pub enum ActionModifyType {
5721+
LogLevel,
5722+
TraceLevel,
5723+
SessionLogLevel,
5724+
SessionTraceLevel,
5725+
}
5726+
5727+
impl fmt::Display for ActionModifyType {
5728+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5729+
match self {
5730+
ActionModifyType::LogLevel => write!(f, "LOG LEVEL"),
5731+
ActionModifyType::TraceLevel => write!(f, "TRACE LEVEL"),
5732+
ActionModifyType::SessionLogLevel => write!(f, "SESSION LOG LEVEL"),
5733+
ActionModifyType::SessionTraceLevel => write!(f, "SESSION TRACE LEVEL"),
5734+
}
5735+
}
5736+
}
5737+
5738+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5739+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5740+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5741+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5742+
/// under `globalPrivileges` in the `MONITOR` privilege.
5743+
pub enum ActionMonitorType {
5744+
Execution,
5745+
Security,
5746+
Usage,
5747+
}
5748+
5749+
impl fmt::Display for ActionMonitorType {
5750+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5751+
match self {
5752+
ActionMonitorType::Execution => write!(f, "EXECUTION"),
5753+
ActionMonitorType::Security => write!(f, "SECURITY"),
5754+
ActionMonitorType::Usage => write!(f, "USAGE"),
5755+
}
5756+
}
5757+
}
5758+
55015759
/// The principal that receives the privileges
55025760
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
55035761
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]

0 commit comments

Comments
 (0)