From e98b7522240c5c8f7f8698328eaf76e7566448d5 Mon Sep 17 00:00:00 2001 From: Jeff Horemans Date: Thu, 8 Aug 2024 10:35:45 +0200 Subject: [PATCH] Reinstate name party of SQLiteDialect's check constraint pattern, but made non-greedily. --- lib/sqlalchemy/dialects/sqlite/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index e001d0649e..976efdff77 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -2626,12 +2626,12 @@ class SQLiteDialect(default.DefaultDialect): # Notes: # * The pattern currently matches any character for the name of the constraint - # except tab and newline characters. + # non greedily. # * Because check constraints in the table data can contain space, newline and tab characters, # the pattern matches any character untill either the beginning of the next CONSTRAINT # statement using a non-capturing non-consuming group (allowing the next one to match), # or the end of the table definition e.g. newline and closing ')'. - CHECK_PATTERN = r"(?:CONSTRAINT ([^\t\n]+) )?CHECK \((.+?)\)(?:, *\n\t?(?=CONSTRAINT|CHECK)|\n\))" + CHECK_PATTERN = r"(?:CONSTRAINT (.+?) )?CHECK \((.+?)\)(?:, *\n\t?(?=CONSTRAINT|CHECK)|\n\))" cks = [] for match in re.finditer(CHECK_PATTERN, table_data or "", re.I|re.S): name = match.group(1) -- 2.47.3