Skip to content

Commit 89c399b

Browse files
authored
Merge pull request #44 from fdcastel/main
Fix test suite for SQLAlchemy 2.0
2 parents c8c3013 + 6c91228 commit 89c399b

File tree

4 files changed

+85
-246
lines changed

4 files changed

+85
-246
lines changed

sqlalchemy_firebird/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
base.dialect = dialect = fdb.dialect
3131

3232
_registry.register("firebird", "sqlalchemy_firebird.fdb", "FBDialect_fdb")
33+
_registry.register("firebird.fdb", "sqlalchemy_firebird.fdb", "FBDialect_fdb")
3334

3435
__all__ = (
3536
"SMALLINT",

sqlalchemy_firebird/base.py

Lines changed: 80 additions & 244 deletions
Original file line numberDiff line numberDiff line change
@@ -93,237 +93,82 @@
9393
from sqlalchemy.types import TIME
9494
from sqlalchemy.types import TIMESTAMP
9595

96+
# https://firebirdsql.org/file/documentation/html/en/refdocs/fblangref40/firebird-40-language-reference.html#fblangref40-reskeywords-reswords
9697
RESERVED_WORDS = set(
9798
[
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",
327172
]
328173
)
329174

@@ -432,7 +277,7 @@ class FBCompiler(sql.compiler.SQLCompiler):
432277
# def visit_notcontains_op_binary(self, binary, operator, **kw):
433278
# cant use NOT CONTAINING b.c. it's case insensitive.
434279

435-
def visit_empty_set_expr(self, type_):
280+
def visit_empty_set_expr(self, type_, **kw):
436281
# FB equivalent of Oracle's FROM DUAL courtesy of
437282
# http://www.firebirdfaq.org/faq30/
438283
return "SELECT 1 FROM RDB$DATABASE WHERE 0=1"
@@ -523,7 +368,7 @@ def limit_clause(self, select, **kw):
523368
"""Already taken care of in the `get_select_precolumns` method."""
524369
return ""
525370

526-
def returning_clause(self, stmt, returning_cols):
371+
def returning_clause(self, stmt, returning_cols, **kw):
527372
columns = [
528373
self._label_select_column(None, c, True, False, {})
529374
for c in expression._select_iterables(returning_cols)
@@ -573,7 +418,7 @@ def get_column_specification(self, column, **kwargs):
573418

574419
return colspec
575420

576-
def visit_create_sequence(self, create):
421+
def visit_create_sequence(self, create, **kw):
577422
"""Generate a ``CREATE GENERATOR`` statement for the sequence."""
578423
# no syntax for these
579424
# http://www.firebirdsql.org/manual/generatorguide-sqlsyntax.html
@@ -595,7 +440,7 @@ def visit_create_sequence(self, create):
595440
create.element
596441
)
597442

598-
def visit_drop_sequence(self, drop):
443+
def visit_drop_sequence(self, drop, **kw):
599444
"""Generate a ``DROP GENERATOR`` statement for the sequence."""
600445
if self.dialect._version_two:
601446
return "DROP SEQUENCE %s" % self.preparer.format_sequence(
@@ -606,7 +451,7 @@ def visit_drop_sequence(self, drop):
606451
drop.element
607452
)
608453

609-
def visit_computed_column(self, generated):
454+
def visit_computed_column(self, generated, **kw):
610455
if generated.persisted is not None:
611456
raise exc.CompileError(
612457
"Firebird computed columns do not support a persistence "
@@ -655,15 +500,6 @@ class FBDialect(default.DefaultDialect):
655500

656501
name = "firebird"
657502

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-
667503
supports_schemas = False
668504
supports_sequences = True
669505
sequences_optional = False
@@ -728,7 +564,7 @@ def initialize(self, connection):
728564
else:
729565
self.max_identifier_length = 252
730566

731-
def has_table(self, connection, table_name, schema=None):
567+
def has_table(self, connection, table_name, schema=None, **kw):
732568
"""Return ``True`` if the given table exists, ignoring the `schema`."""
733569

734570
# Can't have a table whose name is too long.

test/conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import pytest
33

44
registry.register("firebird", "sqlalchemy_firebird.fdb", "FBDialect_fdb")
5+
registry.register("firebird.fdb", "sqlalchemy_firebird.fdb", "FBDialect_fdb")
56

67
pytest.register_assert_rewrite("sqlalchemy.testing.assertions")
78

0 commit comments

Comments
 (0)