class ExecAttrs:
"""Container and parser for EXECUTE attributes."""
- def __init__(self, sql=None, ustr=None):
+ def __init__(self, sql=None, urlenc=None):
"""Create container and parse either sql or urlenc string."""
self.attrs = {}
- if sql and ustr:
- raise Exception("Both sql and ustr set.")
- if ustr:
- self.parse_urlenc(ustr)
+ if sql and urlenc:
+ raise Exception("Both sql and urlenc set.")
+ if urlenc:
+ self.parse_urlenc(urlenc)
elif sql:
self.parse_sql(sql)
def parse_urlenc(self, ustr):
"""Parse urlencoded string adding values to current container."""
sdict = skytools.db_urldecode(ustr)
- for k, v in sdict:
+ for k, v in sdict.items():
for v1 in v.split(','):
self.add_value(k, v1)
tbl_map = {}
for tbl, t in self.table_map.items():
- if not t.local:
- continue
tbl_map[t.name] = t.dest_table
q = "select * from londiste.execute_start(%s, %s, %s, false, %s)"
res = self.exec_cmd(dst_curs, q, [self.queue_name, fname, sql, s_attrs], commit = False)
ret = res[0]['ret_code']
- if ret >= 300:
- self.log.warning("Skipping execution of '%s'", fname)
+ if ret > 200:
+ self.log.info("Skipping execution of '%s'", fname)
return
if exec_attrs.need_execute(dst_curs, tbl_map, seq_map):
--
-- Returns:
-- 200 - Proceed.
--- 301 - Already applied
+-- 201 - Already applied
-- 401 - Not root.
-- 404 - No such queue
-- ----------------------------------------------------------------------
perform 1 from londiste.applied_execute
where execute_file = i_file_name;
if found then
- select 301, 'EXECUTE(' || i_file_name || ') already applied'
+ select 201, 'EXECUTE: "' || i_file_name || '" already applied, skipping'
into ret_code, ret_note;
return;
end if;
../zcheck.sh
+msg "Test EXECUTE through cascade"
+
+for db in part1 part2 part3 part4; do
+ run londiste3 $v conf/londiste_$db.ini execute addcol-data2.sql
+done
+msg "Sleep a bit"
+run sleep 10
+
+psql -d part1 -c '\d mydata'
+psql -d full1 -c '\d mydata'
+psql -d part1 -c '\d mydata'
+
+../zcheck.sh
+