@@ -653,8 +653,16 @@ def create_table(
653
653
if temp :
654
654
create_stmt += " TEMPORARY"
655
655
656
- ident = self ._quote (name )
657
- create_stmt += f" TABLE { ident } "
656
+ if database is None :
657
+ ident = sg .table (name , quoted = True )
658
+ catalog = db = database
659
+ else :
660
+ db = sg .parse_one (database , into = sg .exp .Table , read = self .name )
661
+ catalog = db .db
662
+ db = db .name
663
+ ident = sg .table (name , db = db , catalog = catalog , quoted = True )
664
+
665
+ create_stmt += f" TABLE { ident .sql (self .name )} "
658
666
659
667
if schema is not None :
660
668
schema_sql = ", " .join (
@@ -682,16 +690,22 @@ def create_table(
682
690
with self .begin () as con :
683
691
con .exec_driver_sql (create_stmt )
684
692
685
- return self .table (name , schema = database )
693
+ return self .table (name , schema = db , database = catalog )
686
694
687
695
def drop_table (
688
- self , name : str , database : str | None = None , force : bool = False
696
+ self ,
697
+ name : str ,
698
+ database : str | None = None ,
699
+ schema : str | None = None ,
700
+ force : bool = False ,
689
701
) -> None :
690
- name = self ._quote (name )
691
- # TODO: handle database quoting
692
- if database is not None :
693
- name = f"{ database } .{ name } "
694
- drop_stmt = "DROP TABLE" + (" IF EXISTS" * force ) + f" { name } "
702
+ """Drop a table from Snowflake."""
703
+ drop_stmt = sg .exp .Drop (
704
+ kind = "TABLE" ,
705
+ this = sg .table (name , db = schema , catalog = database , quoted = True ),
706
+ exists = force ,
707
+ ).sql (self .name )
708
+
695
709
with self .begin () as con :
696
710
con .exec_driver_sql (drop_stmt )
697
711
0 commit comments