diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2022-11-30 22:36:22 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@ci3.zzzcomputing.com> | 2022-11-30 22:36:22 +0000 |
| commit | 00dce8931491911a94cd417e13182fa0132e03d3 (patch) | |
| tree | adf1e03999fdf37b696ae41e864e371cf5893f0c /lib/sqlalchemy | |
| parent | 0042076f5db0cdeceee51b5ce32d76cc54c2af69 (diff) | |
| parent | 07760011b5176be03c7811e9a45933b473b8b80b (diff) | |
| download | sqlalchemy-00dce8931491911a94cd417e13182fa0132e03d3.tar.gz | |
Merge "[sqlite] Reflect DEFERRABLE and INITIALLY options for foreign keys" into main
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/dialects/sqlite/base.py | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index 11554fcc0..fb9a19c89 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -2462,6 +2462,8 @@ class SQLiteDialect(default.DefaultDialect): r'REFERENCES +(?:(?:"(.+?)")|([a-z0-9_]+)) *\((.+?)\) *' r"((?:ON (?:DELETE|UPDATE) " r"(?:SET NULL|SET DEFAULT|CASCADE|RESTRICT|NO ACTION) *)*)" + r"((?:NOT +)?DEFERRABLE)?" + r"(?: +INITIALLY +(DEFERRED|IMMEDIATE))?" ) for match in re.finditer(FK_PATTERN, table_data, re.I): ( @@ -2471,7 +2473,9 @@ class SQLiteDialect(default.DefaultDialect): referred_name, referred_columns, onupdatedelete, - ) = match.group(1, 2, 3, 4, 5, 6) + deferrable, + initially, + ) = match.group(1, 2, 3, 4, 5, 6, 7, 8) constrained_columns = list( self._find_cols_in_sig(constrained_columns) ) @@ -2493,6 +2497,12 @@ class SQLiteDialect(default.DefaultDialect): onupdate = token[6:].strip() if onupdate and onupdate != "NO ACTION": options["onupdate"] = onupdate + + if deferrable: + options["deferrable"] = "NOT" not in deferrable.upper() + if initially: + options["initially"] = initially.upper() + yield ( constraint_name, constrained_columns, |
