Skip to content

Commit b441abd

Browse files
yoavcloudVedin
authored andcommitted
Add support for Snowflake account privileges (apache#1666)
1 parent 86786d8 commit b441abd

File tree

5 files changed

+651
-71
lines changed

5 files changed

+651
-71
lines changed

src/ast/mod.rs

+266-8
Original file line numberDiff line numberDiff line change
@@ -5633,29 +5633,107 @@ impl fmt::Display for FetchDirection {
56335633
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
56345634
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
56355635
pub enum Action {
5636+
AddSearchOptimization,
5637+
Apply {
5638+
apply_type: ActionApplyType,
5639+
},
5640+
ApplyBudget,
5641+
AttachListing,
5642+
AttachPolicy,
5643+
Audit,
5644+
BindServiceEndpoint,
56365645
Connect,
5637-
Create,
5646+
Create {
5647+
obj_type: Option<ActionCreateObjectType>,
5648+
},
56385649
Delete,
5639-
Execute,
5640-
Insert { columns: Option<Vec<Ident>> },
5641-
References { columns: Option<Vec<Ident>> },
5642-
Select { columns: Option<Vec<Ident>> },
5650+
EvolveSchema,
5651+
Execute {
5652+
obj_type: Option<ActionExecuteObjectType>,
5653+
},
5654+
Failover,
5655+
ImportedPrivileges,
5656+
ImportShare,
5657+
Insert {
5658+
columns: Option<Vec<Ident>>,
5659+
},
5660+
Manage {
5661+
manage_type: ActionManageType,
5662+
},
5663+
ManageReleases,
5664+
ManageVersions,
5665+
Modify {
5666+
modify_type: ActionModifyType,
5667+
},
5668+
Monitor {
5669+
monitor_type: ActionMonitorType,
5670+
},
5671+
Operate,
5672+
OverrideShareRestrictions,
5673+
Ownership,
5674+
PurchaseDataExchangeListing,
5675+
Read,
5676+
ReadSession,
5677+
References {
5678+
columns: Option<Vec<Ident>>,
5679+
},
5680+
Replicate,
5681+
ResolveAll,
5682+
Select {
5683+
columns: Option<Vec<Ident>>,
5684+
},
56435685
Temporary,
56445686
Trigger,
56455687
Truncate,
5646-
Update { columns: Option<Vec<Ident>> },
5688+
Update {
5689+
columns: Option<Vec<Ident>>,
5690+
},
56475691
Usage,
56485692
}
56495693

56505694
impl fmt::Display for Action {
56515695
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
56525696
match self {
5697+
Action::AddSearchOptimization => f.write_str("ADD SEARCH OPTIMIZATION")?,
5698+
Action::Apply { apply_type } => write!(f, "APPLY {apply_type}")?,
5699+
Action::ApplyBudget => f.write_str("APPLY BUDGET")?,
5700+
Action::AttachListing => f.write_str("ATTACH LISTING")?,
5701+
Action::AttachPolicy => f.write_str("ATTACH POLICY")?,
5702+
Action::Audit => f.write_str("AUDIT")?,
5703+
Action::BindServiceEndpoint => f.write_str("BIND SERVICE ENDPOINT")?,
56535704
Action::Connect => f.write_str("CONNECT")?,
5654-
Action::Create => f.write_str("CREATE")?,
5705+
Action::Create { obj_type } => {
5706+
f.write_str("CREATE")?;
5707+
if let Some(obj_type) = obj_type {
5708+
write!(f, " {obj_type}")?
5709+
}
5710+
}
56555711
Action::Delete => f.write_str("DELETE")?,
5656-
Action::Execute => f.write_str("EXECUTE")?,
5712+
Action::EvolveSchema => f.write_str("EVOLVE SCHEMA")?,
5713+
Action::Execute { obj_type } => {
5714+
f.write_str("EXECUTE")?;
5715+
if let Some(obj_type) = obj_type {
5716+
write!(f, " {obj_type}")?
5717+
}
5718+
}
5719+
Action::Failover => f.write_str("FAILOVER")?,
5720+
Action::ImportedPrivileges => f.write_str("IMPORTED PRIVILEGES")?,
5721+
Action::ImportShare => f.write_str("IMPORT SHARE")?,
56575722
Action::Insert { .. } => f.write_str("INSERT")?,
5723+
Action::Manage { manage_type } => write!(f, "MANAGE {manage_type}")?,
5724+
Action::ManageReleases => f.write_str("MANAGE RELEASES")?,
5725+
Action::ManageVersions => f.write_str("MANAGE VERSIONS")?,
5726+
Action::Modify { modify_type } => write!(f, "MODIFY {modify_type}")?,
5727+
Action::Monitor { monitor_type } => write!(f, "MONITOR {monitor_type}")?,
5728+
Action::Operate => f.write_str("OPERATE")?,
5729+
Action::OverrideShareRestrictions => f.write_str("OVERRIDE SHARE RESTRICTIONS")?,
5730+
Action::Ownership => f.write_str("OWNERSHIP")?,
5731+
Action::PurchaseDataExchangeListing => f.write_str("PURCHASE DATA EXCHANGE LISTING")?,
5732+
Action::Read => f.write_str("READ")?,
5733+
Action::ReadSession => f.write_str("READ SESSION")?,
56585734
Action::References { .. } => f.write_str("REFERENCES")?,
5735+
Action::Replicate => f.write_str("REPLICATE")?,
5736+
Action::ResolveAll => f.write_str("RESOLVE ALL")?,
56595737
Action::Select { .. } => f.write_str("SELECT")?,
56605738
Action::Temporary => f.write_str("TEMPORARY")?,
56615739
Action::Trigger => f.write_str("TRIGGER")?,
@@ -5678,6 +5756,186 @@ impl fmt::Display for Action {
56785756
}
56795757
}
56805758

5759+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5760+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5761+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5762+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5763+
/// under `globalPrivileges` in the `CREATE` privilege.
5764+
pub enum ActionCreateObjectType {
5765+
Account,
5766+
Application,
5767+
ApplicationPackage,
5768+
ComputePool,
5769+
DataExchangeListing,
5770+
Database,
5771+
ExternalVolume,
5772+
FailoverGroup,
5773+
Integration,
5774+
NetworkPolicy,
5775+
OrganiationListing,
5776+
ReplicationGroup,
5777+
Role,
5778+
Share,
5779+
User,
5780+
Warehouse,
5781+
}
5782+
5783+
impl fmt::Display for ActionCreateObjectType {
5784+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5785+
match self {
5786+
ActionCreateObjectType::Account => write!(f, "ACCOUNT"),
5787+
ActionCreateObjectType::Application => write!(f, "APPLICATION"),
5788+
ActionCreateObjectType::ApplicationPackage => write!(f, "APPLICATION PACKAGE"),
5789+
ActionCreateObjectType::ComputePool => write!(f, "COMPUTE POOL"),
5790+
ActionCreateObjectType::DataExchangeListing => write!(f, "DATA EXCHANGE LISTING"),
5791+
ActionCreateObjectType::Database => write!(f, "DATABASE"),
5792+
ActionCreateObjectType::ExternalVolume => write!(f, "EXTERNAL VOLUME"),
5793+
ActionCreateObjectType::FailoverGroup => write!(f, "FAILOVER GROUP"),
5794+
ActionCreateObjectType::Integration => write!(f, "INTEGRATION"),
5795+
ActionCreateObjectType::NetworkPolicy => write!(f, "NETWORK POLICY"),
5796+
ActionCreateObjectType::OrganiationListing => write!(f, "ORGANIZATION LISTING"),
5797+
ActionCreateObjectType::ReplicationGroup => write!(f, "REPLICATION GROUP"),
5798+
ActionCreateObjectType::Role => write!(f, "ROLE"),
5799+
ActionCreateObjectType::Share => write!(f, "SHARE"),
5800+
ActionCreateObjectType::User => write!(f, "USER"),
5801+
ActionCreateObjectType::Warehouse => write!(f, "WAREHOUSE"),
5802+
}
5803+
}
5804+
}
5805+
5806+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5807+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5808+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5809+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5810+
/// under `globalPrivileges` in the `APPLY` privilege.
5811+
pub enum ActionApplyType {
5812+
AggregationPolicy,
5813+
AuthenticationPolicy,
5814+
JoinPolicy,
5815+
MaskingPolicy,
5816+
PackagesPolicy,
5817+
PasswordPolicy,
5818+
ProjectionPolicy,
5819+
RowAccessPolicy,
5820+
SessionPolicy,
5821+
Tag,
5822+
}
5823+
5824+
impl fmt::Display for ActionApplyType {
5825+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5826+
match self {
5827+
ActionApplyType::AggregationPolicy => write!(f, "AGGREGATION POLICY"),
5828+
ActionApplyType::AuthenticationPolicy => write!(f, "AUTHENTICATION POLICY"),
5829+
ActionApplyType::JoinPolicy => write!(f, "JOIN POLICY"),
5830+
ActionApplyType::MaskingPolicy => write!(f, "MASKING POLICY"),
5831+
ActionApplyType::PackagesPolicy => write!(f, "PACKAGES POLICY"),
5832+
ActionApplyType::PasswordPolicy => write!(f, "PASSWORD POLICY"),
5833+
ActionApplyType::ProjectionPolicy => write!(f, "PROJECTION POLICY"),
5834+
ActionApplyType::RowAccessPolicy => write!(f, "ROW ACCESS POLICY"),
5835+
ActionApplyType::SessionPolicy => write!(f, "SESSION POLICY"),
5836+
ActionApplyType::Tag => write!(f, "TAG"),
5837+
}
5838+
}
5839+
}
5840+
5841+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5842+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5843+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5844+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5845+
/// under `globalPrivileges` in the `EXECUTE` privilege.
5846+
pub enum ActionExecuteObjectType {
5847+
Alert,
5848+
DataMetricFunction,
5849+
ManagedAlert,
5850+
ManagedTask,
5851+
Task,
5852+
}
5853+
5854+
impl fmt::Display for ActionExecuteObjectType {
5855+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5856+
match self {
5857+
ActionExecuteObjectType::Alert => write!(f, "ALERT"),
5858+
ActionExecuteObjectType::DataMetricFunction => write!(f, "DATA METRIC FUNCTION"),
5859+
ActionExecuteObjectType::ManagedAlert => write!(f, "MANAGED ALERT"),
5860+
ActionExecuteObjectType::ManagedTask => write!(f, "MANAGED TASK"),
5861+
ActionExecuteObjectType::Task => write!(f, "TASK"),
5862+
}
5863+
}
5864+
}
5865+
5866+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5867+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5868+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5869+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5870+
/// under `globalPrivileges` in the `MANAGE` privilege.
5871+
pub enum ActionManageType {
5872+
AccountSupportCases,
5873+
EventSharing,
5874+
Grants,
5875+
ListingAutoFulfillment,
5876+
OrganizationSupportCases,
5877+
UserSupportCases,
5878+
Warehouses,
5879+
}
5880+
5881+
impl fmt::Display for ActionManageType {
5882+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5883+
match self {
5884+
ActionManageType::AccountSupportCases => write!(f, "ACCOUNT SUPPORT CASES"),
5885+
ActionManageType::EventSharing => write!(f, "EVENT SHARING"),
5886+
ActionManageType::Grants => write!(f, "GRANTS"),
5887+
ActionManageType::ListingAutoFulfillment => write!(f, "LISTING AUTO FULFILLMENT"),
5888+
ActionManageType::OrganizationSupportCases => write!(f, "ORGANIZATION SUPPORT CASES"),
5889+
ActionManageType::UserSupportCases => write!(f, "USER SUPPORT CASES"),
5890+
ActionManageType::Warehouses => write!(f, "WAREHOUSES"),
5891+
}
5892+
}
5893+
}
5894+
5895+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5896+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5897+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5898+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5899+
/// under `globalPrivileges` in the `MODIFY` privilege.
5900+
pub enum ActionModifyType {
5901+
LogLevel,
5902+
TraceLevel,
5903+
SessionLogLevel,
5904+
SessionTraceLevel,
5905+
}
5906+
5907+
impl fmt::Display for ActionModifyType {
5908+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5909+
match self {
5910+
ActionModifyType::LogLevel => write!(f, "LOG LEVEL"),
5911+
ActionModifyType::TraceLevel => write!(f, "TRACE LEVEL"),
5912+
ActionModifyType::SessionLogLevel => write!(f, "SESSION LOG LEVEL"),
5913+
ActionModifyType::SessionTraceLevel => write!(f, "SESSION TRACE LEVEL"),
5914+
}
5915+
}
5916+
}
5917+
5918+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
5919+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
5920+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
5921+
/// See <https://docs.snowflake.com/en/sql-reference/sql/grant-privilege>
5922+
/// under `globalPrivileges` in the `MONITOR` privilege.
5923+
pub enum ActionMonitorType {
5924+
Execution,
5925+
Security,
5926+
Usage,
5927+
}
5928+
5929+
impl fmt::Display for ActionMonitorType {
5930+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
5931+
match self {
5932+
ActionMonitorType::Execution => write!(f, "EXECUTION"),
5933+
ActionMonitorType::Security => write!(f, "SECURITY"),
5934+
ActionMonitorType::Usage => write!(f, "USAGE"),
5935+
}
5936+
}
5937+
}
5938+
56815939
/// The principal that receives the privileges
56825940
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
56835941
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]

0 commit comments

Comments
 (0)