From: Jeff Horemans Date: Thu, 8 Aug 2024 08:35:45 +0000 (+0200) Subject: Reinstate name party of SQLiteDialect's check constraint pattern, but made non-greedily. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e98b7522240c5c8f7f8698328eaf76e7566448d5;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Reinstate name party of SQLiteDialect's check constraint pattern, but made non-greedily. --- 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)