diff options
author | Ants Aasma <ants.aasma@gmail.com> | 2007-10-03 01:06:07 +0000 |
---|---|---|
committer | Ants Aasma <ants.aasma@gmail.com> | 2007-10-03 01:06:07 +0000 |
commit | c25fa30febb2fc7ac21fe1379ee03595c7c6a8b6 (patch) | |
tree | 01c59ea75c219a0c02bbf533cca774b9f97d8f5f /lib/sqlalchemy/databases/postgres.py | |
parent | e82ca71cc5c4175f071cdd72207ec04e58a6498c (diff) | |
download | sqlalchemy-c25fa30febb2fc7ac21fe1379ee03595c7c6a8b6.tar.gz |
Made the regexp detecting the returning token more readable and fixed a couple of corner cases
Diffstat (limited to 'lib/sqlalchemy/databases/postgres.py')
-rw-r--r-- | lib/sqlalchemy/databases/postgres.py | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index 03b3fd042..990140c89 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -217,8 +217,19 @@ RETURNING_RE = re.compile( # handle correctly nested C style quotes, lets hope no one does the following: # UPDATE tbl SET x=y /* foo /* bar */ RETURNING */ RETURNING_QUOTED_RE = re.compile( - '\\s*(?:UPDATE|INSERT)\\s(?:[^\'"$/-]|-(?!-)|/(?!\\*)|"(?:[^"]|"")*"|\'(?:[^\']|\'\')*\'|\\$(?P<dquote>[^$]*)\\$.*?\\$(?P=dquote)\\$|--[^\n]*\n|/\\*([^*]|\\*(?!/))*\\*/)*\\sRETURNING', - re.I | re.UNICODE) + """\s*(?:UPDATE|INSERT)\s + (?: # handle quoted and commented tokens separately + [^'"$/-] # non quote/comment character + | -(?!-) # a dash that does not begin a comment + | /(?!\*) # a slash that does not begin a comment + | "(?:[^"]|"")*" # quoted literal + | '(?:[^']|'')*' # quoted string + | \$(?P<dquote>[^$]*)\$.*?\$(?P=dquote)\$ # dollar quotes + | --[^\\n]*(?=\\n) # SQL comment, leave out line ending as that counts as whitespace + # for the returning token + | /\*([^*]|\*(?!/))*\*/ # C style comment, doesn't handle nesting + )* + \sRETURNING\s""", re.I | re.UNICODE | re.VERBOSE) class PGExecutionContext(default.DefaultExecutionContext): |