11import dataclasses
2+ import itertools
23
34from piccolo .columns .base import Column
4- from ..base import Query
5+ from piccolo .query .base import Query
6+ from piccolo .querystring import QueryString
57
68
79@dataclasses .dataclass
@@ -12,8 +14,14 @@ class Rename():
1214 column : Column
1315 new_name : str
1416
15- def __str__ (self ):
16- return f' RENAME "{ self .column ._name } " TO "{ self .new_name } "'
17+ @property
18+ def querystring (self ) -> QueryString :
19+ return QueryString (
20+ f'RENAME { self .column ._name } TO { self .new_name } ' ,
21+ )
22+
23+ def __str__ (self ) -> str :
24+ return self .querystring .__str__ ()
1725
1826
1927@dataclasses .dataclass
@@ -23,8 +31,14 @@ class Drop():
2331 """
2432 column : Column
2533
26- def __str__ (self ):
27- return f' DROP "{ self .column ._name } "'
34+ @property
35+ def querystring (self ) -> QueryString :
36+ return QueryString (
37+ f'DROP { self .column ._name } '
38+ )
39+
40+ def __str__ (self ) -> str :
41+ return self .querystring .__str__ ()
2842
2943
3044@dataclasses .dataclass
@@ -35,40 +49,63 @@ class Add():
3549 name : str
3650 column : Column
3751
38- def __str__ (self ):
52+ @property
53+ def querystring (self ) -> QueryString :
3954 self .column ._name = self .name
40- return f' ADD { self .column .__str__ ()} '
55+ return QueryString (
56+ 'ADD {}' ,
57+ self .column .querystring
58+ )
59+
60+ def __str__ (self ) -> str :
61+ return self .querystring .__str__ ()
4162
4263
4364class Alter (Query ):
4465
4566 def __init__ (self , * args , ** kwargs ):
4667 super ().__init__ (* args , ** kwargs )
47- self ._add = []
48- self ._drop = []
49- self ._rename = []
68+ self ._add : t . List [ Add ] = []
69+ self ._drop : t . List [ Drop ] = []
70+ self ._rename : t . List [ Rename ] = []
5071
51- def add (self , name : str , column : Column ):
72+ def add (self , name : str , column : Column ) -> 'Alter' :
5273 self ._add .append (
5374 Add (name , column )
5475 )
5576 return self
5677
57- def rename (self , column : Column , new_name : str ):
78+ def rename (self , column : Column , new_name : str ) -> 'Alter' :
5879 self ._rename .append (
5980 Rename (column , new_name )
6081 )
6182 return self
6283
63- def drop (self , column : Column ):
84+ def drop (self , column : Column ) -> 'Alter' :
6485 self ._drop .append (
6586 Drop (column )
6687 )
6788 return self
6889
69- def __str__ (self ):
70- query = f'ALTER TABLE "{ self .table .Meta .tablename } "'
71- for alterations in [self ._add , self ._rename , self ._drop ]:
72- for a in alterations :
73- query += a .__str__ ()
74- return query
90+ @property
91+ def querystring (self ) -> QueryString :
92+ query = f'ALTER TABLE { self .table .Meta .tablename } '
93+
94+ alterations = [
95+ i .querystring for i in itertools .chain (
96+ self ._add ,
97+ self ._rename ,
98+ self ._drop
99+ )
100+ ]
101+
102+ for a in alterations :
103+ query += ' {}'
104+
105+ return QueryString (
106+ query ,
107+ * alterations
108+ )
109+
110+ def __str__ (self ) -> str :
111+ return self .querystring .__str__ ()
0 commit comments