@@ -28,7 +28,7 @@ use super::super::dml::CreateTable;
2828use crate :: ast:: {
2929 ClusteredBy , ColumnDef , CommentDef , Expr , FileFormat , HiveDistributionStyle , HiveFormat , Ident ,
3030 ObjectName , OnCommit , OneOrManyWithParens , Query , RowAccessPolicy , SqlOption , Statement ,
31- TableConstraint , TableEngine , Tag , WrappedCollection ,
31+ StorageSerializationPolicy , TableConstraint , TableEngine , Tag , WrappedCollection ,
3232} ;
3333use crate :: parser:: ParserError ;
3434
@@ -71,6 +71,7 @@ pub struct CreateTableBuilder {
7171 pub if_not_exists : bool ,
7272 pub transient : bool ,
7373 pub volatile : bool ,
74+ pub iceberg : bool ,
7475 pub name : ObjectName ,
7576 pub columns : Vec < ColumnDef > ,
7677 pub constraints : Vec < TableConstraint > ,
@@ -107,6 +108,11 @@ pub struct CreateTableBuilder {
107108 pub with_aggregation_policy : Option < ObjectName > ,
108109 pub with_row_access_policy : Option < RowAccessPolicy > ,
109110 pub with_tags : Option < Vec < Tag > > ,
111+ pub base_location : Option < String > ,
112+ pub external_volume : Option < String > ,
113+ pub catalog : Option < String > ,
114+ pub catalog_sync : Option < String > ,
115+ pub storage_serialization_policy : Option < StorageSerializationPolicy > ,
110116}
111117
112118impl CreateTableBuilder {
@@ -119,6 +125,7 @@ impl CreateTableBuilder {
119125 if_not_exists : false ,
120126 transient : false ,
121127 volatile : false ,
128+ iceberg : false ,
122129 name,
123130 columns : vec ! [ ] ,
124131 constraints : vec ! [ ] ,
@@ -155,6 +162,11 @@ impl CreateTableBuilder {
155162 with_aggregation_policy : None ,
156163 with_row_access_policy : None ,
157164 with_tags : None ,
165+ base_location : None ,
166+ external_volume : None ,
167+ catalog : None ,
168+ catalog_sync : None ,
169+ storage_serialization_policy : None ,
158170 }
159171 }
160172 pub fn or_replace ( mut self , or_replace : bool ) -> Self {
@@ -192,6 +204,11 @@ impl CreateTableBuilder {
192204 self
193205 }
194206
207+ pub fn iceberg ( mut self , iceberg : bool ) -> Self {
208+ self . iceberg = iceberg;
209+ self
210+ }
211+
195212 pub fn columns ( mut self , columns : Vec < ColumnDef > ) -> Self {
196213 self . columns = columns;
197214 self
@@ -371,6 +388,34 @@ impl CreateTableBuilder {
371388 self
372389 }
373390
391+ pub fn base_location ( mut self , base_location : Option < String > ) -> Self {
392+ self . base_location = base_location;
393+ self
394+ }
395+
396+ pub fn external_volume ( mut self , external_volume : Option < String > ) -> Self {
397+ self . external_volume = external_volume;
398+ self
399+ }
400+
401+ pub fn catalog ( mut self , catalog : Option < String > ) -> Self {
402+ self . catalog = catalog;
403+ self
404+ }
405+
406+ pub fn catalog_sync ( mut self , catalog_sync : Option < String > ) -> Self {
407+ self . catalog_sync = catalog_sync;
408+ self
409+ }
410+
411+ pub fn storage_serialization_policy (
412+ mut self ,
413+ storage_serialization_policy : Option < StorageSerializationPolicy > ,
414+ ) -> Self {
415+ self . storage_serialization_policy = storage_serialization_policy;
416+ self
417+ }
418+
374419 pub fn build ( self ) -> Statement {
375420 Statement :: CreateTable ( CreateTable {
376421 or_replace : self . or_replace ,
@@ -380,6 +425,7 @@ impl CreateTableBuilder {
380425 if_not_exists : self . if_not_exists ,
381426 transient : self . transient ,
382427 volatile : self . volatile ,
428+ iceberg : self . iceberg ,
383429 name : self . name ,
384430 columns : self . columns ,
385431 constraints : self . constraints ,
@@ -416,6 +462,11 @@ impl CreateTableBuilder {
416462 with_aggregation_policy : self . with_aggregation_policy ,
417463 with_row_access_policy : self . with_row_access_policy ,
418464 with_tags : self . with_tags ,
465+ base_location : self . base_location ,
466+ external_volume : self . external_volume ,
467+ catalog : self . catalog ,
468+ catalog_sync : self . catalog_sync ,
469+ storage_serialization_policy : self . storage_serialization_policy ,
419470 } )
420471 }
421472}
@@ -435,6 +486,7 @@ impl TryFrom<Statement> for CreateTableBuilder {
435486 if_not_exists,
436487 transient,
437488 volatile,
489+ iceberg,
438490 name,
439491 columns,
440492 constraints,
@@ -471,6 +523,11 @@ impl TryFrom<Statement> for CreateTableBuilder {
471523 with_aggregation_policy,
472524 with_row_access_policy,
473525 with_tags,
526+ base_location,
527+ external_volume,
528+ catalog,
529+ catalog_sync,
530+ storage_serialization_policy,
474531 } ) => Ok ( Self {
475532 or_replace,
476533 temporary,
@@ -505,6 +562,7 @@ impl TryFrom<Statement> for CreateTableBuilder {
505562 clustered_by,
506563 options,
507564 strict,
565+ iceberg,
508566 copy_grants,
509567 enable_schema_evolution,
510568 change_tracking,
@@ -515,6 +573,11 @@ impl TryFrom<Statement> for CreateTableBuilder {
515573 with_row_access_policy,
516574 with_tags,
517575 volatile,
576+ base_location,
577+ external_volume,
578+ catalog,
579+ catalog_sync,
580+ storage_serialization_policy,
518581 } ) ,
519582 _ => Err ( ParserError :: ParserError ( format ! (
520583 "Expected create table statement, but received: {stmt}"
0 commit comments