summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Kreen2012-05-24 14:43:03 +0000
committerMarko Kreen2012-05-24 14:43:03 +0000
commit8b808baad0bd2f7059b9dfcff986c0db3b1459c4 (patch)
tree6399dc34b4a58e8d8f4de52cdf3623bfa3436cd2
parentcece3d7e465265be77257cd462bc818be0a161a0 (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.py12
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