@@ -551,47 +551,48 @@ def _get_temp_view_definition(
551
551
yield f"CREATE OR REPLACE TEMPORARY VIEW { name } AS { definition } "
552
552
553
553
def create_database (self , name : str , force : bool = False ) -> None :
554
- current_database = self .current_database
555
- current_schema = self .current_schema
556
- name = self ._quote (name )
557
- if_not_exists = "IF NOT EXISTS " * force
554
+ create_stmt = sg .exp .Create (
555
+ kind = "DATABASE" , this = sg .to_identifier (name , quoted = True ), exists = force
556
+ ).sql (self .name )
557
+ current_ident = sg .table (
558
+ self .current_schema , db = self .current_database , quoted = True
559
+ ).sql (self .name )
558
560
with self .begin () as con :
559
- con .exec_driver_sql (f"CREATE DATABASE { if_not_exists } { name } " )
561
+ con .exec_driver_sql (create_stmt )
560
562
# Snowflake automatically switches to the new database after creating
561
563
# it per
562
564
# https://docs.snowflake.com/en/sql-reference/sql/create-database#general-usage-notes
563
565
# so we switch back to the original database and schema
564
- con .exec_driver_sql (
565
- f"USE SCHEMA { self ._quote (current_database )} .{ self ._quote (current_schema )} "
566
- )
566
+ con .exec_driver_sql (f"USE SCHEMA { current_ident } " )
567
567
568
568
def drop_database (self , name : str , force : bool = False ) -> None :
569
569
current_database = self .current_database
570
570
if name == current_database :
571
571
raise com .UnsupportedOperationError (
572
572
"Dropping the current database is not supported because its behavior is undefined"
573
573
)
574
- name = self ._quote (name )
575
- if_exists = "IF EXISTS " * force
574
+ drop_stmt = sg .exp .Drop (
575
+ kind = "DATABASE" , this = sg .to_identifier (name , quoted = True ), exists = force
576
+ ).sql (self .name )
576
577
with self .begin () as con :
577
- con .exec_driver_sql (f"DROP DATABASE { if_exists } { name } " )
578
+ con .exec_driver_sql (drop_stmt )
578
579
579
580
def create_schema (
580
581
self , name : str , database : str | None = None , force : bool = False
581
582
) -> None :
582
- name = "." .join (map (self ._quote , filter (None , [database , name ])))
583
- if_not_exists = "IF NOT EXISTS " * force
584
- current_database = self .current_database
585
- current_schema = self .current_schema
583
+ create_stmt = sg .exp .Create (
584
+ kind = "SCHEMA" , this = sg .table (name , db = database , quoted = True ), exists = force
585
+ ).sql (self .name )
586
+ current_ident = sg .table (
587
+ self .current_schema , db = self .current_database , quoted = True
588
+ ).sql (self .name )
586
589
with self .begin () as con :
587
- con .exec_driver_sql (f"CREATE SCHEMA { if_not_exists } { name } " )
590
+ con .exec_driver_sql (create_stmt )
588
591
# Snowflake automatically switches to the new schema after creating
589
592
# it per
590
593
# https://docs.snowflake.com/en/sql-reference/sql/create-schema#usage-notes
591
594
# so we switch back to the original schema
592
- con .exec_driver_sql (
593
- f"USE SCHEMA { self ._quote (current_database )} .{ self ._quote (current_schema )} "
594
- )
595
+ con .exec_driver_sql (f"USE SCHEMA { current_ident } " )
595
596
596
597
def drop_schema (
597
598
self , name : str , database : str | None = None , force : bool = False
@@ -603,10 +604,11 @@ def drop_schema(
603
604
"Dropping the current schema is not supported because its behavior is undefined"
604
605
)
605
606
606
- name = "." .join (map (self ._quote , filter (None , [database , name ])))
607
- if_exists = "IF EXISTS " * force
607
+ drop_stmt = sg .exp .Drop (
608
+ kind = "SCHEMA" , this = sg .table (name , db = database , quoted = True ), exists = force
609
+ ).sql (self .name )
608
610
with self .begin () as con :
609
- con .exec_driver_sql (f"DROP SCHEMA { if_exists } { name } " )
611
+ con .exec_driver_sql (drop_stmt )
610
612
611
613
def create_table (
612
614
self ,
0 commit comments