From 8b808baad0bd2f7059b9dfcff986c0db3b1459c4 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Thu, 24 May 2012 17:43:03 +0300 Subject: skytools.dbstruct: better rule name redirection Old code did not handle WHERE, nor repeated table references in rule. --- python/skytools/dbstruct.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'python/skytools/dbstruct.py') 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 -- cgit v1.2.3