93
93
from sqlalchemy .types import TIME
94
94
from sqlalchemy .types import TIMESTAMP
95
95
96
+ # https://firebirdsql.org/file/documentation/html/en/refdocs/fblangref40/firebird-40-language-reference.html#fblangref40-reskeywords-reswords
96
97
RESERVED_WORDS = set (
97
98
[
98
- "active" ,
99
- "add" ,
100
- "admin" ,
101
- "after" ,
102
- "all" ,
103
- "alter" ,
104
- "and" ,
105
- "any" ,
106
- "as" ,
107
- "asc" ,
108
- "ascending" ,
109
- "at" ,
110
- "auto" ,
111
- "avg" ,
112
- "before" ,
113
- "begin" ,
114
- "between" ,
115
- "bigint" ,
116
- "bit_length" ,
117
- "blob" ,
118
- "both" ,
119
- "by" ,
120
- "case" ,
121
- "cast" ,
122
- "char" ,
123
- "character" ,
124
- "character_length" ,
125
- "char_length" ,
126
- "check" ,
127
- "close" ,
128
- "collate" ,
129
- "column" ,
130
- "commit" ,
131
- "committed" ,
132
- "computed" ,
133
- "conditional" ,
134
- "connect" ,
135
- "constraint" ,
136
- "containing" ,
137
- "count" ,
138
- "create" ,
139
- "cross" ,
140
- "cstring" ,
141
- "current" ,
142
- "current_connection" ,
143
- "current_date" ,
144
- "current_role" ,
145
- "current_time" ,
146
- "current_timestamp" ,
147
- "current_transaction" ,
148
- "current_user" ,
149
- "cursor" ,
150
- "database" ,
151
- "date" ,
152
- "day" ,
153
- "dec" ,
154
- "decimal" ,
155
- "declare" ,
156
- "default" ,
157
- "delete" ,
158
- "desc" ,
159
- "descending" ,
160
- "disconnect" ,
161
- "distinct" ,
162
- "do" ,
163
- "domain" ,
164
- "double" ,
165
- "drop" ,
166
- "else" ,
167
- "end" ,
168
- "entry_point" ,
169
- "escape" ,
170
- "exception" ,
171
- "execute" ,
172
- "exists" ,
173
- "exit" ,
174
- "external" ,
175
- "extract" ,
176
- "fetch" ,
177
- "file" ,
178
- "filter" ,
179
- "float" ,
180
- "for" ,
181
- "foreign" ,
182
- "from" ,
183
- "full" ,
184
- "function" ,
185
- "gdscode" ,
186
- "generator" ,
187
- "gen_id" ,
188
- "global" ,
189
- "grant" ,
190
- "group" ,
191
- "having" ,
192
- "hour" ,
193
- "if" ,
194
- "in" ,
195
- "inactive" ,
196
- "index" ,
197
- "inner" ,
198
- "input_type" ,
199
- "insensitive" ,
200
- "insert" ,
201
- "int" ,
202
- "integer" ,
203
- "into" ,
204
- "is" ,
205
- "isolation" ,
206
- "join" ,
207
- "key" ,
208
- "leading" ,
209
- "left" ,
210
- "length" ,
211
- "level" ,
212
- "like" ,
213
- "long" ,
214
- "lower" ,
215
- "manual" ,
216
- "max" ,
217
- "maximum_segment" ,
218
- "merge" ,
219
- "min" ,
220
- "minute" ,
221
- "module_name" ,
222
- "month" ,
223
- "names" ,
224
- "national" ,
225
- "natural" ,
226
- "nchar" ,
227
- "no" ,
228
- "not" ,
229
- "null" ,
230
- "numeric" ,
231
- "octet_length" ,
232
- "of" ,
233
- "on" ,
234
- "only" ,
235
- "open" ,
236
- "option" ,
237
- "or" ,
238
- "order" ,
239
- "outer" ,
240
- "output_type" ,
241
- "overflow" ,
242
- "page" ,
243
- "pages" ,
244
- "page_size" ,
245
- "parameter" ,
246
- "password" ,
247
- "plan" ,
248
- "position" ,
249
- "post_event" ,
250
- "precision" ,
251
- "primary" ,
252
- "privileges" ,
253
- "procedure" ,
254
- "protected" ,
255
- "rdb$db_key" ,
256
- "read" ,
257
- "real" ,
258
- "record_version" ,
259
- "recreate" ,
260
- "recursive" ,
261
- "references" ,
262
- "release" ,
263
- "reserv" ,
264
- "reserving" ,
265
- "retain" ,
266
- "returning_values" ,
267
- "returns" ,
268
- "revoke" ,
269
- "right" ,
270
- "rollback" ,
271
- "rows" ,
272
- "row_count" ,
273
- "savepoint" ,
274
- "schema" ,
275
- "second" ,
276
- "segment" ,
277
- "select" ,
278
- "sensitive" ,
279
- "set" ,
280
- "shadow" ,
281
- "shared" ,
282
- "singular" ,
283
- "size" ,
284
- "smallint" ,
285
- "snapshot" ,
286
- "some" ,
287
- "sort" ,
288
- "sqlcode" ,
289
- "stability" ,
290
- "start" ,
291
- "starting" ,
292
- "starts" ,
293
- "statistics" ,
294
- "sub_type" ,
295
- "sum" ,
296
- "suspend" ,
297
- "table" ,
298
- "then" ,
299
- "time" ,
300
- "timestamp" ,
301
- "to" ,
302
- "trailing" ,
303
- "transaction" ,
304
- "trigger" ,
305
- "trim" ,
306
- "uncommitted" ,
307
- "union" ,
308
- "unique" ,
309
- "update" ,
310
- "upper" ,
311
- "user" ,
312
- "using" ,
313
- "value" ,
314
- "values" ,
315
- "varchar" ,
316
- "variable" ,
317
- "varying" ,
318
- "view" ,
319
- "wait" ,
320
- "when" ,
321
- "where" ,
322
- "while" ,
323
- "with" ,
324
- "work" ,
325
- "write" ,
326
- "year" ,
99
+ "add" ,"admin" ,"all" ,
100
+ "alter" ,"and" ,"any" ,
101
+ "as" ,"at" ,"avg" ,
102
+ "begin" ,"between" ,"bigint" ,
103
+ "binary" ,"bit_length" ,"blob" ,
104
+ "boolean" ,"both" ,"by" ,
105
+ "case" ,"cast" ,"char" ,
106
+ "character" ,"character_length" ,"char_length" ,
107
+ "check" ,"close" ,"collate" ,
108
+ "column" ,"comment" ,"commit" ,
109
+ "connect" ,"constraint" ,"corr" ,
110
+ "count" ,"covar_pop" ,"covar_samp" ,
111
+ "create" ,"cross" ,"current" ,
112
+ "current_connection" ,"current_date" ,"current_role" ,
113
+ "current_time" ,"current_timestamp" ,"current_transaction" ,
114
+ "current_user" ,"cursor" ,"date" ,
115
+ "day" ,"dec" ,"decfloat" ,
116
+ "decimal" ,"declare" ,"default" ,
117
+ "delete" ,"deleting" ,"deterministic" ,
118
+ "disconnect" ,"distinct" ,"double" ,
119
+ "drop" ,"else" ,"end" ,
120
+ "escape" ,"execute" ,"exists" ,
121
+ "external" ,"extract" ,"false" ,
122
+ "fetch" ,"filter" ,"float" ,
123
+ "for" ,"foreign" ,"from" ,
124
+ "full" ,"function" ,"gdscode" ,
125
+ "global" ,"grant" ,"group" ,
126
+ "having" ,"hour" ,"in" ,
127
+ "index" ,"inner" ,"insensitive" ,
128
+ "insert" ,"inserting" ,"int" ,
129
+ "int128" ,"integer" ,"into" ,
130
+ "is" ,"join" ,"lateral" ,
131
+ "leading" ,"left" ,"like" ,
132
+ "local" ,"localtime" ,"localtimestamp" ,
133
+ "long" ,"lower" ,"max" ,
134
+ "merge" ,"min" ,"minute" ,
135
+ "month" ,"national" ,"natural" ,
136
+ "nchar" ,"no" ,"not" ,
137
+ "null" ,"numeric" ,"octet_length" ,
138
+ "of" ,"offset" ,"on" ,
139
+ "only" ,"open" ,"or" ,
140
+ "order" ,"outer" ,"over" ,
141
+ "parameter" ,"plan" ,"position" ,
142
+ "post_event" ,"precision" ,"primary" ,
143
+ "procedure" ,"publication" ,"rdb$db_key" ,
144
+ "rdb$error" ,"rdb$get_context" ,"rdb$get_transaction_cn" ,
145
+ "rdb$record_version" ,"rdb$role_in_use" ,"rdb$set_context" ,
146
+ "rdb$system_privilege" ,"real" ,"record_version" ,
147
+ "recreate" ,"recursive" ,"references" ,
148
+ "regr_avgx" ,"regr_avgy" ,"regr_count" ,
149
+ "regr_intercept" ,"regr_r2" ,"regr_slope" ,
150
+ "regr_sxx" ,"regr_sxy" ,"regr_syy" ,
151
+ "release" ,"resetting" ,"return" ,
152
+ "returning_values" ,"returns" ,"revoke" ,
153
+ "right" ,"rollback" ,"row" ,
154
+ "rows" ,"row_count" ,"savepoint" ,
155
+ "scroll" ,"second" ,"select" ,
156
+ "sensitive" ,"set" ,"similar" ,
157
+ "smallint" ,"some" ,"sqlcode" ,
158
+ "sqlstate" ,"start" ,"stddev_pop" ,
159
+ "stddev_samp" ,"sum" ,"table" ,
160
+ "then" ,"time" ,"timestamp" ,
161
+ "timezone_hour" ,"timezone_minute" ,"to" ,
162
+ "trailing" ,"trigger" ,"trim" ,
163
+ "true" ,"unbounded" ,"union" ,
164
+ "unique" ,"unknown" ,"update" ,
165
+ "updating" ,"upper" ,"user" ,
166
+ "using" ,"value" ,"values" ,
167
+ "varbinary" ,"varchar" ,"variable" ,
168
+ "varying" ,"var_pop" ,"var_samp" ,
169
+ "view" ,"when" ,"where" ,
170
+ "while" ,"window" ,"with" ,
171
+ "without" ,"year" ,
327
172
]
328
173
)
329
174
@@ -432,7 +277,7 @@ class FBCompiler(sql.compiler.SQLCompiler):
432
277
# def visit_notcontains_op_binary(self, binary, operator, **kw):
433
278
# cant use NOT CONTAINING b.c. it's case insensitive.
434
279
435
- def visit_empty_set_expr (self , type_ ):
280
+ def visit_empty_set_expr (self , type_ , ** kw ):
436
281
# FB equivalent of Oracle's FROM DUAL courtesy of
437
282
# http://www.firebirdfaq.org/faq30/
438
283
return "SELECT 1 FROM RDB$DATABASE WHERE 0=1"
@@ -523,7 +368,7 @@ def limit_clause(self, select, **kw):
523
368
"""Already taken care of in the `get_select_precolumns` method."""
524
369
return ""
525
370
526
- def returning_clause (self , stmt , returning_cols ):
371
+ def returning_clause (self , stmt , returning_cols , ** kw ):
527
372
columns = [
528
373
self ._label_select_column (None , c , True , False , {})
529
374
for c in expression ._select_iterables (returning_cols )
@@ -573,7 +418,7 @@ def get_column_specification(self, column, **kwargs):
573
418
574
419
return colspec
575
420
576
- def visit_create_sequence (self , create ):
421
+ def visit_create_sequence (self , create , ** kw ):
577
422
"""Generate a ``CREATE GENERATOR`` statement for the sequence."""
578
423
# no syntax for these
579
424
# http://www.firebirdsql.org/manual/generatorguide-sqlsyntax.html
@@ -595,7 +440,7 @@ def visit_create_sequence(self, create):
595
440
create .element
596
441
)
597
442
598
- def visit_drop_sequence (self , drop ):
443
+ def visit_drop_sequence (self , drop , ** kw ):
599
444
"""Generate a ``DROP GENERATOR`` statement for the sequence."""
600
445
if self .dialect ._version_two :
601
446
return "DROP SEQUENCE %s" % self .preparer .format_sequence (
@@ -606,7 +451,7 @@ def visit_drop_sequence(self, drop):
606
451
drop .element
607
452
)
608
453
609
- def visit_computed_column (self , generated ):
454
+ def visit_computed_column (self , generated , ** kw ):
610
455
if generated .persisted is not None :
611
456
raise exc .CompileError (
612
457
"Firebird computed columns do not support a persistence "
@@ -655,15 +500,6 @@ class FBDialect(default.DefaultDialect):
655
500
656
501
name = "firebird"
657
502
658
- """
659
- Firebird version 4.0 and greater have a maximum identifier length of
660
- 63 characters character set UTF8 (252 bytes). Prior versions have a
661
- maximum identifier length of 31 bytes.
662
-
663
- max_identifier_length = 31
664
-
665
- """
666
-
667
503
supports_schemas = False
668
504
supports_sequences = True
669
505
sequences_optional = False
@@ -728,7 +564,7 @@ def initialize(self, connection):
728
564
else :
729
565
self .max_identifier_length = 252
730
566
731
- def has_table (self , connection , table_name , schema = None ):
567
+ def has_table (self , connection , table_name , schema = None , ** kw ):
732
568
"""Return ``True`` if the given table exists, ignoring the `schema`."""
733
569
734
570
# Can't have a table whose name is too long.
0 commit comments