1
+ from typing import Any , Dict , List , Optional , TYPE_CHECKING
2
+
1
3
import sqlalchemy as sa
2
4
from sqlalchemy .ext import compiler
3
5
from sqlalchemy .schema import DDLElement , PrimaryKeyConstraint
4
6
5
7
from sqlalchemy_utils .functions import get_columns
6
8
9
+ if TYPE_CHECKING :
10
+ from sqlalchemy .engine .default import DefaultDialect
11
+ from sqlalchemy .orm import Session
12
+ from sqlalchemy .sql import Selectable
13
+ from sqlalchemy .sql .compiler import SQLCompiler
14
+
7
15
8
- def _prepare_view_identifier (dialect , view_name , schema = None ):
16
+ def _prepare_view_identifier (
17
+ dialect : 'DefaultDialect' ,
18
+ view_name : str ,
19
+ schema : Optional [str ] = None ,
20
+ ) -> str :
9
21
quoted_view_name = dialect .identifier_preparer .quote (view_name )
10
22
if schema :
11
23
return dialect .identifier_preparer .quote_schema (schema ) + '.' + quoted_view_name
@@ -14,14 +26,23 @@ def _prepare_view_identifier(dialect, view_name, schema=None):
14
26
15
27
16
28
class CreateView (DDLElement ):
17
- def __init__ (self , name , selectable , schema = None ):
29
+ def __init__ (
30
+ self ,
31
+ name : str ,
32
+ selectable : 'Selectable' ,
33
+ schema : Optional [str ] = None ,
34
+ ):
18
35
self .name = name
19
36
self .selectable = selectable
20
37
self .schema = schema
21
38
22
39
23
40
@compiler .compiles (CreateView )
24
- def compile_create_view (element , compiler , ** kw ):
41
+ def compile_create_view (
42
+ element : 'CreateView' ,
43
+ compiler : 'SQLCompiler' ,
44
+ ** kw : Any ,
45
+ ) -> str :
25
46
view_identifier = _prepare_view_identifier (
26
47
compiler .dialect , element .name , element .schema
27
48
)
@@ -32,14 +53,19 @@ def compile_create_view(element, compiler, **kw):
32
53
33
54
34
55
class DropView (DDLElement ):
35
- def __init__ (self , name , schema = None , cascade = None ):
56
+ def __init__ (
57
+ self ,
58
+ name : str ,
59
+ schema : Optional [str ] = None ,
60
+ cascade : Optional [bool ] = None ,
61
+ ):
36
62
self .name = name
37
63
self .schema = schema
38
64
self .cascade = cascade
39
65
40
66
41
67
@compiler .compiles (DropView )
42
- def compile_drop_view (element , compiler , ** kw ) :
68
+ def compile_drop_view (element : 'DropView' , compiler : 'SQLCompiler' , ** kw : Any ) -> str :
43
69
view_identifier = _prepare_view_identifier (
44
70
compiler .dialect , element .name , element .schema
45
71
)
@@ -53,15 +79,25 @@ def compile_drop_view(element, compiler, **kw):
53
79
54
80
55
81
class CreateMaterializedView (DDLElement ):
56
- def __init__ (self , name , selectable , schema = None , populate = None ):
82
+ def __init__ (
83
+ self ,
84
+ name : str ,
85
+ selectable : 'Selectable' ,
86
+ schema : Optional [str ] = None ,
87
+ populate : Optional [bool ] = None ,
88
+ ):
57
89
self .name = name
58
90
self .selectable = selectable
59
91
self .schema = schema
60
92
self .populate = populate
61
93
62
94
63
95
@compiler .compiles (CreateMaterializedView )
64
- def compile_create_materialized_view (element , compiler , ** kw ):
96
+ def compile_create_materialized_view (
97
+ element : 'CreateMaterializedView' ,
98
+ compiler : 'SQLCompiler' ,
99
+ ** kw : Any ,
100
+ ) -> str :
65
101
view_identifier = _prepare_view_identifier (
66
102
dialect = compiler .dialect , view_name = element .name , schema = element .schema
67
103
)
@@ -78,14 +114,23 @@ def compile_create_materialized_view(element, compiler, **kw):
78
114
79
115
80
116
class DropMaterializedView (DDLElement ):
81
- def __init__ (self , name , schema = None , cascade = None ):
117
+ def __init__ (
118
+ self ,
119
+ name : str ,
120
+ schema : Optional [str ] = None ,
121
+ cascade : Optional [bool ] = None ,
122
+ ):
82
123
self .name = name
83
124
self .schema = schema
84
125
self .cascade = cascade
85
126
86
127
87
128
@compiler .compiles (DropMaterializedView )
88
- def compile_drop_materialized_view (element , compiler , ** kw ):
129
+ def compile_drop_materialized_view (
130
+ element : 'DropMaterializedView' ,
131
+ compiler : 'SQLCompiler' ,
132
+ ** kw : Any ,
133
+ ) -> str :
89
134
view_identifier = _prepare_view_identifier (
90
135
dialect = compiler .dialect , view_name = element .name , schema = element .schema
91
136
)
@@ -98,14 +143,14 @@ def compile_drop_materialized_view(element, compiler, **kw):
98
143
99
144
100
145
def create_table_from_selectable (
101
- name ,
102
- selectable ,
103
- indexes = None ,
104
- metadata = None ,
105
- aliases = None ,
106
- schema = None ,
107
- ** kwargs
108
- ):
146
+ name : str ,
147
+ selectable : 'Selectable' ,
148
+ indexes : Optional [ List [ sa . Index ]] = None ,
149
+ metadata : Optional [ sa . MetaData ] = None ,
150
+ aliases : Optional [ Dict [ str , str ]] = None ,
151
+ schema : Optional [ str ] = None ,
152
+ ** kwargs : Any ,
153
+ ) -> sa . Table :
109
154
if indexes is None :
110
155
indexes = []
111
156
if metadata is None :
@@ -131,16 +176,16 @@ def create_table_from_selectable(
131
176
132
177
133
178
def create_materialized_view (
134
- name ,
135
- selectable ,
136
- metadata ,
137
- indexes = None ,
138
- aliases = None ,
179
+ name : str ,
180
+ selectable : 'Selectable' ,
181
+ metadata : sa . MetaData ,
182
+ indexes : Optional [ List [ sa . Index ]] = None ,
183
+ aliases : Optional [ Dict [ str , str ]] = None ,
139
184
* ,
140
- schema = None ,
141
- populate = None ,
142
- cascade_on_drop = None ,
143
- ):
185
+ schema : Optional [ str ] = None ,
186
+ populate : Optional [ bool ] = None ,
187
+ cascade_on_drop : Optional [ bool ] = None ,
188
+ ) -> sa . Table :
144
189
""" Create a view on a given metadata
145
190
146
191
:param name: The name of the view to create.
@@ -197,13 +242,13 @@ def create_indexes(target, connection, **kw):
197
242
198
243
199
244
def create_view (
200
- name ,
201
- selectable ,
202
- metadata ,
245
+ name : str ,
246
+ selectable : 'Selectable' ,
247
+ metadata : sa . MetaData ,
203
248
* ,
204
- schema = None ,
205
- cascade_on_drop = None ,
206
- ):
249
+ schema : Optional [ str ] = None ,
250
+ cascade_on_drop : Optional [ str ] = None ,
251
+ ) -> sa . Table :
207
252
""" Create a view on a given metadata
208
253
209
254
:param name: The name of the view to create.
@@ -267,7 +312,13 @@ def create_indexes(target, connection, **kw):
267
312
return table
268
313
269
314
270
- def refresh_materialized_view (session , name , concurrently = False , * , schema = None ):
315
+ def refresh_materialized_view (
316
+ session : 'Session' ,
317
+ name : str ,
318
+ concurrently : bool = False ,
319
+ * ,
320
+ schema : Optional [str ] = None ,
321
+ ) -> None :
271
322
""" Refreshes an already existing materialized view
272
323
273
324
:param session: An SQLAlchemy Session instance.
0 commit comments