@@ -299,12 +299,12 @@ class TablePath(ExprNode, ITable):
299299 path : DbPath
300300 schema : Optional [Schema ] = field (default = None , repr = False )
301301
302- def create (self , source_table : ITable = None , * , if_not_exists = False ):
302+ def create (self , source_table : ITable = None , * , if_not_exists = False , primary_keys = None ):
303303 if source_table is None and not self .schema :
304304 raise ValueError ("Either schema or source table needed to create table" )
305305 if isinstance (source_table , TablePath ):
306306 source_table = source_table .select ()
307- return CreateTable (self , source_table , if_not_exists = if_not_exists )
307+ return CreateTable (self , source_table , if_not_exists = if_not_exists , primary_keys = primary_keys )
308308
309309 def drop (self , if_exists = False ):
310310 return DropTable (self , if_exists = if_exists )
@@ -647,14 +647,16 @@ class CreateTable(Statement):
647647 path : TablePath
648648 source_table : Expr = None
649649 if_not_exists : bool = False
650+ primary_keys : List [str ] = None
650651
651652 def compile (self , c : Compiler ) -> str :
652653 ne = "IF NOT EXISTS " if self .if_not_exists else ""
653654 if self .source_table :
654655 return f"CREATE TABLE { ne } { c .compile (self .path )} AS { c .compile (self .source_table )} "
655656
656657 schema = ", " .join (f"{ c .database .quote (k )} { c .database .type_repr (v )} " for k , v in self .path .schema .items ())
657- return f"CREATE TABLE { ne } { c .compile (self .path )} ({ schema } )"
658+ pks = ", PRIMARY KEY (%s)" % ', ' .join (self .primary_keys ) if self .primary_keys and c .database .SUPPORTS_PRIMARY_KEY else ""
659+ return f"CREATE TABLE { ne } { c .compile (self .path )} ({ schema } { pks } )"
658660
659661
660662@dataclass
0 commit comments