From 56bb8fc86b60f95f20218fb1460366b16f31bdc8 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Mon, 28 Jun 2010 14:49:07 +0300 Subject: skytools.parse_sqltriga_sql(): extract PK field names --- python/skytools/parsing.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'python/skytools/parsing.py') diff --git a/python/skytools/parsing.py b/python/skytools/parsing.py index 908f7f09..5ab8874a 100644 --- a/python/skytools/parsing.py +++ b/python/skytools/parsing.py @@ -110,7 +110,9 @@ class _logtriga_parser: else: raise Exception("syntax error, expected WHERE or , got "+repr(t)) while 1: - fields.append(tk.next()) + fld = tk.next() + fields.append(fld) + self.pklist.append(fld) if tk.next() != "=": raise Exception("syntax error") values.append(tk.next()) @@ -122,7 +124,9 @@ class _logtriga_parser: """Handler for deletes.""" # pk1 = 'pk1' and pk2 = 'pk2' while 1: - fields.append(tk.next()) + fld = tk.next() + fields.append(fld) + self.pklist.append(fld) if tk.next() != "=": raise Exception("syntax error") values.append(tk.next()) @@ -130,8 +134,12 @@ class _logtriga_parser: if t.lower() != "and": raise Exception("syntax error, expected AND, got "+repr(t)) - def parse_sql(self, op, sql): + def parse_sql(self, op, sql, pklist=None): """Main entry point.""" + if pklist is None: + self.pklist = [] + else: + self.pklist = pklist tk = self.tokenizer(sql) fields = [] values = [] @@ -154,7 +162,7 @@ class _logtriga_parser: def parse_logtriga_sql(op, sql): return parse_sqltriga_sql(op, sql) -def parse_sqltriga_sql(op, sql): +def parse_sqltriga_sql(op, sql, pklist=None): """Parse partial SQL used by pgq.sqltriga() back to data values. Parser has following limitations: @@ -178,7 +186,7 @@ def parse_sqltriga_sql(op, sql): >>> parse_logtriga_sql('D', "id = 1 and id2 = 'str''val'") {'id2': "str'val", 'id': '1'} """ - return _logtriga_parser().parse_sql(op, sql) + return _logtriga_parser().parse_sql(op, sql, pklist) def parse_tabbed_table(txt): -- cgit v1.2.3