mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-12-23 11:12:51 +00:00
Add snowflake dynamic table parsing (#2083)
This commit is contained in:
parent
eabde4b41e
commit
c439ee9419
9 changed files with 112 additions and 17 deletions
|
|
@ -365,6 +365,18 @@ pub enum AlterTableOperation {
|
|||
DropClusteringKey,
|
||||
SuspendRecluster,
|
||||
ResumeRecluster,
|
||||
/// `REFRESH`
|
||||
///
|
||||
/// Note: this is Snowflake specific for dynamic tables <https://docs.snowflake.com/en/sql-reference/sql/alter-table>
|
||||
Refresh,
|
||||
/// `SUSPEND`
|
||||
///
|
||||
/// Note: this is Snowflake specific for dynamic tables <https://docs.snowflake.com/en/sql-reference/sql/alter-table>
|
||||
Suspend,
|
||||
/// `RESUME`
|
||||
///
|
||||
/// Note: this is Snowflake specific for dynamic tables <https://docs.snowflake.com/en/sql-reference/sql/alter-table>
|
||||
Resume,
|
||||
/// `ALGORITHM [=] { DEFAULT | INSTANT | INPLACE | COPY }`
|
||||
///
|
||||
/// [MySQL]-specific table alter algorithm.
|
||||
|
|
@ -845,6 +857,15 @@ impl fmt::Display for AlterTableOperation {
|
|||
write!(f, "RESUME RECLUSTER")?;
|
||||
Ok(())
|
||||
}
|
||||
AlterTableOperation::Refresh => {
|
||||
write!(f, "REFRESH")
|
||||
}
|
||||
AlterTableOperation::Suspend => {
|
||||
write!(f, "SUSPEND")
|
||||
}
|
||||
AlterTableOperation::Resume => {
|
||||
write!(f, "RESUME")
|
||||
}
|
||||
AlterTableOperation::AutoIncrement { equals, value } => {
|
||||
write!(
|
||||
f,
|
||||
|
|
@ -3532,6 +3553,20 @@ impl Spanned for DropExtension {
|
|||
}
|
||||
}
|
||||
|
||||
/// Table type for ALTER TABLE statements.
|
||||
/// Used to distinguish between regular tables, Iceberg tables, and Dynamic tables.
|
||||
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
|
||||
pub enum AlterTableType {
|
||||
/// Iceberg table type
|
||||
/// <https://docs.snowflake.com/en/sql-reference/sql/alter-iceberg-table>
|
||||
Iceberg,
|
||||
/// Dynamic table type
|
||||
/// <https://docs.snowflake.com/en/sql-reference/sql/alter-table>
|
||||
Dynamic,
|
||||
}
|
||||
|
||||
/// ALTER TABLE statement
|
||||
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||
|
|
@ -3548,19 +3583,18 @@ pub struct AlterTable {
|
|||
/// For example: `ALTER TABLE table_name ON CLUSTER cluster_name ADD COLUMN c UInt32`
|
||||
/// [ClickHouse](https://clickhouse.com/docs/en/sql-reference/statements/alter/update)
|
||||
pub on_cluster: Option<Ident>,
|
||||
/// Snowflake "ICEBERG" clause for Iceberg tables
|
||||
/// <https://docs.snowflake.com/en/sql-reference/sql/alter-iceberg-table>
|
||||
pub iceberg: bool,
|
||||
/// Table type: None for regular tables, Some(AlterTableType) for Iceberg or Dynamic tables
|
||||
pub table_type: Option<AlterTableType>,
|
||||
/// Token that represents the end of the statement (semicolon or EOF)
|
||||
pub end_token: AttachedToken,
|
||||
}
|
||||
|
||||
impl fmt::Display for AlterTable {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
if self.iceberg {
|
||||
write!(f, "ALTER ICEBERG TABLE ")?;
|
||||
} else {
|
||||
write!(f, "ALTER TABLE ")?;
|
||||
match &self.table_type {
|
||||
Some(AlterTableType::Iceberg) => write!(f, "ALTER ICEBERG TABLE ")?,
|
||||
Some(AlterTableType::Dynamic) => write!(f, "ALTER DYNAMIC TABLE ")?,
|
||||
None => write!(f, "ALTER TABLE ")?,
|
||||
}
|
||||
|
||||
if self.if_exists {
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ pub use self::dcl::{
|
|||
pub use self::ddl::{
|
||||
AlterColumnOperation, AlterConnectorOwner, AlterIndexOperation, AlterPolicyOperation,
|
||||
AlterSchema, AlterSchemaOperation, AlterTable, AlterTableAlgorithm, AlterTableLock,
|
||||
AlterTableOperation, AlterType, AlterTypeAddValue, AlterTypeAddValuePosition,
|
||||
AlterTableOperation, AlterTableType, AlterType, AlterTypeAddValue, AlterTypeAddValuePosition,
|
||||
AlterTypeOperation, AlterTypeRename, AlterTypeRenameValue, ClusteredBy, ColumnDef,
|
||||
ColumnOption, ColumnOptionDef, ColumnOptions, ColumnPolicy, ColumnPolicyProperty,
|
||||
ConstraintCharacteristics, CreateConnector, CreateDomain, CreateExtension, CreateFunction,
|
||||
|
|
|
|||
|
|
@ -1108,6 +1108,9 @@ impl Spanned for AlterTableOperation {
|
|||
AlterTableOperation::DropClusteringKey => Span::empty(),
|
||||
AlterTableOperation::SuspendRecluster => Span::empty(),
|
||||
AlterTableOperation::ResumeRecluster => Span::empty(),
|
||||
AlterTableOperation::Refresh => Span::empty(),
|
||||
AlterTableOperation::Suspend => Span::empty(),
|
||||
AlterTableOperation::Resume => Span::empty(),
|
||||
AlterTableOperation::Algorithm { .. } => Span::empty(),
|
||||
AlterTableOperation::AutoIncrement { value, .. } => value.span(),
|
||||
AlterTableOperation::Lock { .. } => Span::empty(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue