From: Jeff Horemans Date: Wed, 7 Aug 2024 11:09:00 +0000 (+0200) Subject: Handle multi-line check constraint definition extraction on SQLite. Fixes #11677. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=efa344b54ad2b6c7856dc1e40d01fc7dda2f7974;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Handle multi-line check constraint definition extraction on SQLite. Fixes #11677. --- diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index 04e84a68d2..25f8631b21 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -2624,7 +2624,7 @@ class SQLiteDialect(default.DefaultDialect): connection, table_name, schema=schema, **kw ) - CHECK_PATTERN = r"(?:CONSTRAINT (.+) +)?" r"CHECK *\( *(.+) *\),? *" + CHECK_PATTERN = r"(?:CONSTRAINT (.+) +)?CHECK *\( *((.|\n)+?) *\)(?:, ?\n|\n) *" cks = [] # NOTE: we aren't using re.S here because we actually are # taking advantage of each CHECK constraint being all on one @@ -2632,7 +2632,7 @@ class SQLiteDialect(default.DefaultDialect): # necessarily makes assumptions as to how the CREATE TABLE # was emitted. - for match in re.finditer(CHECK_PATTERN, table_data or "", re.I): + for match in re.finditer(CHECK_PATTERN, table_data or "", re.I|re.S): name = match.group(1) if name: