diff options
author | Marko Kreen | 2012-05-24 14:43:03 +0000 |
---|---|---|
committer | Marko Kreen | 2012-05-24 14:43:03 +0000 |
commit | 8b808baad0bd2f7059b9dfcff986c0db3b1459c4 (patch) | |
tree | 6399dc34b4a58e8d8f4de52cdf3623bfa3436cd2 | |
parent | cece3d7e465265be77257cd462bc818be0a161a0 (diff) |
skytools.dbstruct: better rule name redirection
Old code did not handle WHERE, nor repeated
table references in rule.
-rw-r--r-- | python/skytools/dbstruct.py | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/python/skytools/dbstruct.py b/python/skytools/dbstruct.py index 5311889a..e1a7012c 100644 --- a/python/skytools/dbstruct.py +++ b/python/skytools/dbstruct.py @@ -192,10 +192,16 @@ class TRule(TElem): sql = self.defn table = self.table_name else: + idrx = r'''([a-z0-9._]+|"([^"]+|"")+")+''' # fixme: broken / quoting - rx = r"\bTO[ ][a-z0-9._]+[ ]DO[ ]" - pnew = "TO %s DO " % new_table_name - sql = rx_replace(rx, self.defn, pnew) + rx = r"\bTO[ ]" + idrx + rc = re.compile(rx, re.X) + m = rc.search(self.defn) + if not m: + raise Exception('Cannot find table name in rule') + old_tbl = m.group(1) + new_tbl = quote_fqident(new_table_name) + sql = self.defn.replace(old_tbl, new_tbl) table = new_table_name if self.enabled != 'O': # O - rule fires in origin and local modes |