@@ -23,18 +23,18 @@ def __init__(
23
23
24
24
@compiler .compiles (CreateView )
25
25
def compile_create_materialized_view (element , compiler , ** kw ):
26
- return " CREATE {}{}VIEW {}{} AS {}" .format (
27
- " OR REPLACE " if element .or_replace else "" ,
28
- " MATERIALIZED " if element .materialized else "" ,
29
- " IF NOT EXISTS " if element .if_not_exists else "" ,
26
+ return ' CREATE {}{}VIEW {}{} AS {}' .format (
27
+ ' OR REPLACE ' if element .or_replace else '' ,
28
+ ' MATERIALIZED ' if element .materialized else '' ,
29
+ ' IF NOT EXISTS ' if element .if_not_exists else '' ,
30
30
compiler .dialect .identifier_preparer .quote (element .name ),
31
31
compiler .sql_compiler .process (element .selectable , literal_binds = True ),
32
32
)
33
33
34
34
35
- @compiler .compiles (CreateView , " postgresql" )
35
+ @compiler .compiles (CreateView , ' postgresql' )
36
36
def compile_create_materialized_view_ (element , compiler , ** kw ):
37
- """
37
+ '''
38
38
CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ]
39
39
[ WITH ( view_option_name [= view_option_value] [, ... ] ) ]
40
40
AS query
@@ -50,19 +50,19 @@ def compile_create_materialized_view_(element, compiler, **kw):
50
50
51
51
see https://www.postgresql.org/docs/current/sql-createview.html
52
52
see https://www.postgresql.org/docs/current/sql-creatematerializedview.html
53
- """
54
- return " CREATE {}{}VIEW {}{} AS {}" .format (
55
- " OR REPLACE " if not element .materialized and element .or_replace else "" ,
56
- " MATERIALIZED " if element .materialized else "" ,
57
- " IF NOT EXISTS " if element .materialized and element .if_not_exists else "" ,
53
+ '''
54
+ return ' CREATE {}{}VIEW {}{} AS {}' .format (
55
+ ' OR REPLACE ' if not element .materialized and element .or_replace else '' ,
56
+ ' MATERIALIZED ' if element .materialized else '' ,
57
+ ' IF NOT EXISTS ' if element .materialized and element .if_not_exists else '' ,
58
58
compiler .dialect .identifier_preparer .quote (element .name ),
59
59
compiler .sql_compiler .process (element .selectable , literal_binds = True ),
60
60
)
61
61
62
62
63
- @compiler .compiles (CreateView , " mysql" )
63
+ @compiler .compiles (CreateView , ' mysql' )
64
64
def compile_create_materialized_view_ (element , compiler , ** kw ):
65
- """
65
+ '''
66
66
CREATE
67
67
[OR REPLACE]
68
68
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
@@ -74,19 +74,19 @@ def compile_create_materialized_view_(element, compiler, **kw):
74
74
75
75
See https://dev.mysql.com/doc/refman/8.0/en/create-view.html
76
76
NOTE mysql does not support materialized view
77
- """
77
+ '''
78
78
if element .materialized :
79
- raise ValueError (" mysql does not support materialized view!" )
80
- return " CREATE {}VIEW {} AS {}" .format (
81
- " OR REPLACE " if element .or_replace else "" ,
79
+ raise ValueError (' mysql does not support materialized view!' )
80
+ return ' CREATE {}VIEW {} AS {}' .format (
81
+ ' OR REPLACE ' if element .or_replace else '' ,
82
82
compiler .dialect .identifier_preparer .quote (element .name ),
83
83
compiler .sql_compiler .process (element .selectable , literal_binds = True ),
84
84
)
85
85
86
86
87
- @compiler .compiles (CreateView , " mssql" )
87
+ @compiler .compiles (CreateView , ' mssql' )
88
88
def compile_create_materialized_view_ (element , compiler , ** kw ):
89
- """
89
+ '''
90
90
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
91
91
[ WITH <view_attribute> [ ,...n ] ]
92
92
AS select_statement
@@ -102,18 +102,18 @@ def compile_create_materialized_view_(element, compiler, **kw):
102
102
103
103
see https://docs.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql?view=sql-server-ver15
104
104
see https://docs.microsoft.com/en-us/sql/t-sql/statements/create-materialized-view-as-select-transact-sql?view=azure-sqldw-latest&viewFallbackFrom=sql-server-ver15
105
- """
106
- return " CREATE {}{}VIEW {} AS {}" .format (
107
- " OR ALTER " if not element .materialized and element .or_replace else "" ,
108
- " MATERIALIZED " if element .materialized else "" ,
105
+ '''
106
+ return ' CREATE {}{}VIEW {} AS {}' .format (
107
+ ' OR ALTER ' if not element .materialized and element .or_replace else '' ,
108
+ ' MATERIALIZED ' if element .materialized else '' ,
109
109
compiler .dialect .identifier_preparer .quote (element .name ),
110
110
compiler .sql_compiler .process (element .selectable , literal_binds = True ),
111
111
)
112
112
113
113
114
- @compiler .compiles (CreateView , " snowflake" )
114
+ @compiler .compiles (CreateView , ' snowflake' )
115
115
def compile_create_materialized_view (element , compiler , ** kw ):
116
- """
116
+ '''
117
117
CREATE [ OR REPLACE ] [ SECURE ] [ RECURSIVE ] VIEW [ IF NOT EXISTS ] <name>
118
118
[ ( <column_list> ) ]
119
119
[ <col1> [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1> , <cond_col1> , ... ) ]
@@ -139,11 +139,11 @@ def compile_create_materialized_view(element, compiler, **kw):
139
139
140
140
see https://docs.snowflake.com/en/sql-reference/sql/create-view.html
141
141
see https://docs.snowflake.com/en/sql-reference/sql/create-materialized-view.html
142
- """
143
- return " CREATE {}{}VIEW {}{} AS {}" .format (
144
- " OR REPLACE " if element .or_replace else "" ,
145
- " MATERIALIZED " if element .materialized else "" ,
146
- " IF NOT EXISTS " if element .if_not_exists else "" ,
142
+ '''
143
+ return ' CREATE {}{}VIEW {}{} AS {}' .format (
144
+ ' OR REPLACE ' if element .or_replace else '' ,
145
+ ' MATERIALIZED ' if element .materialized else '' ,
146
+ ' IF NOT EXISTS ' if element .if_not_exists else '' ,
147
147
compiler .dialect .identifier_preparer .quote (element .name ),
148
148
compiler .sql_compiler .process (element .selectable , literal_binds = True ),
149
149
)
@@ -158,10 +158,10 @@ def __init__(self, name, materialized=False, cascade=True):
158
158
159
159
@compiler .compiles (DropView )
160
160
def compile_drop_materialized_view (element , compiler , ** kw ):
161
- return " DROP {}VIEW IF EXISTS {} {}" .format (
162
- " MATERIALIZED " if element .materialized else "" ,
161
+ return ' DROP {}VIEW IF EXISTS {} {}' .format (
162
+ ' MATERIALIZED ' if element .materialized else '' ,
163
163
compiler .dialect .identifier_preparer .quote (element .name ),
164
- " CASCADE" if element .cascade else "" ,
164
+ ' CASCADE' if element .cascade else '' ,
165
165
)
166
166
167
167
@@ -198,7 +198,7 @@ def create_materialized_view(
198
198
if_not_exists = False ,
199
199
or_replace = False ,
200
200
):
201
- """ Create a view on a given metadata
201
+ ''' Create a view on a given metadata
202
202
203
203
:param name: The name of the view to create.
204
204
:param selectable: An SQLAlchemy selectable e.g. a select() statement.
@@ -219,7 +219,7 @@ def create_materialized_view(
219
219
Same as for ``create_view`` except that a ``CREATE MATERIALIZED VIEW``
220
220
statement is emitted instead of a ``CREATE VIEW``.
221
221
222
- """
222
+ '''
223
223
table = create_table_from_selectable (
224
224
name = name ,
225
225
selectable = selectable ,
@@ -230,7 +230,7 @@ def create_materialized_view(
230
230
231
231
sa .event .listen (
232
232
metadata ,
233
- " after_create" ,
233
+ ' after_create' ,
234
234
CreateView (
235
235
name ,
236
236
selectable ,
@@ -240,12 +240,12 @@ def create_materialized_view(
240
240
),
241
241
)
242
242
243
- @sa .event .listens_for (metadata , " after_create" )
243
+ @sa .event .listens_for (metadata , ' after_create' )
244
244
def create_indexes (target , connection , ** kw ):
245
245
for idx in table .indexes :
246
246
idx .create (connection )
247
247
248
- sa .event .listen (metadata , " before_drop" , DropView (name , materialized = True ))
248
+ sa .event .listen (metadata , ' before_drop' , DropView (name , materialized = True ))
249
249
return table
250
250
251
251
@@ -257,7 +257,7 @@ def create_view(
257
257
if_not_exists = False ,
258
258
or_replace = False ,
259
259
):
260
- """ Create a view on a given metadata
260
+ ''' Create a view on a given metadata
261
261
262
262
:param name: The name of the view to create.
263
263
:param selectable: An SQLAlchemy selectable e.g. a select() statement.
@@ -292,43 +292,43 @@ def create_view(
292
292
293
293
metadata.create_all(engine) # View is created at this point
294
294
295
- """
295
+ '''
296
296
table = create_table_from_selectable (
297
297
name = name , selectable = selectable , metadata = None
298
298
)
299
299
300
300
sa .event .listen (
301
301
metadata ,
302
- " after_create" ,
302
+ ' after_create' ,
303
303
CreateView (
304
304
name , selectable , if_not_exists = if_not_exists , or_replace = or_replace
305
305
),
306
306
)
307
307
308
- @sa .event .listens_for (metadata , " after_create" )
308
+ @sa .event .listens_for (metadata , ' after_create' )
309
309
def create_indexes (target , connection , ** kw ):
310
310
for idx in table .indexes :
311
311
idx .create (connection )
312
312
313
- sa .event .listen (metadata , " before_drop" , DropView (name , cascade = cascade_on_drop ))
313
+ sa .event .listen (metadata , ' before_drop' , DropView (name , cascade = cascade_on_drop ))
314
314
return table
315
315
316
316
317
317
def refresh_materialized_view (session , name , concurrently = False ):
318
- """ Refreshes an already existing materialized view
318
+ ''' Refreshes an already existing materialized view
319
319
320
320
:param session: An SQLAlchemy Session instance.
321
321
:param name: The name of the materialized view to refresh.
322
322
:param concurrently:
323
323
Optional flag that causes the ``CONCURRENTLY`` parameter
324
324
to be specified when the materialized view is refreshed.
325
- """
325
+ '''
326
326
# Since session.execute() bypasses autoflush, we must manually flush in
327
327
# order to include newly-created/modified objects in the refresh.
328
328
session .flush ()
329
329
session .execute (
330
- " REFRESH MATERIALIZED VIEW {}{}" .format (
331
- " CONCURRENTLY " if concurrently else "" ,
330
+ ' REFRESH MATERIALIZED VIEW {}{}' .format (
331
+ ' CONCURRENTLY ' if concurrently else '' ,
332
332
session .bind .engine .dialect .identifier_preparer .quote (name ),
333
333
)
334
334
)
0 commit comments