def unquote_any(typ, s): if typ == 'ident': ps = [skytools.unquote_ident(p) for p in s.split('.')] s = '.'.join(ps) elif typ == 'str' or typ == 'dolq': s = skytools.unquote_literal(s, True) return s
def unquote_any(s): if s: c = s[0] if c == "'": s = skytools.unquote_literal(s, stdstr = True) elif c == '"': s = skytools.unquote_ident(s) # extquote? else: s = s.lower() return s
def unquote_any(s): if s: c = s[0] if c == "'": s = skytools.unquote_literal(s, stdstr=True) elif c == '"': s = skytools.unquote_ident(s) # extquote? else: s = s.lower() return s
def unquote_any(typ, s): global _ident_rc if typ == 'ident': res = [] pos = 0 while 1: m = _ident_rc.match(s, pos) if not m: break if m.group('err'): raise Exception('invalid syntax for ident') s1 = m.group() if s1[0] == '"': s1 = s1[1:-1].replace('""', '"') res.append(s1) pos = m.end() s = ''.join(res) elif typ == 'str' or typ == 'dolq': s = skytools.unquote_literal(s, True) return s
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 = [] try: if op == "I": self.parse_insert(tk, fields, values) elif op == "U": self.parse_update(tk, fields, values) elif op == "D": self.parse_delete(tk, fields, values) raise Exception("syntax error") except StopIteration: # last sanity check if len(fields) == 0 or len(fields) != len(values): raise Exception("syntax error, fields do not match values") fields = [skytools.unquote_ident(f) for f in fields] values = [skytools.unquote_literal(f) for f in values] return skytools.dbdict(zip(fields, values))
def _create_dbdict(self, fields, values): fields = [skytools.unquote_ident(f) for f in fields] values = [skytools.unquote_literal(f) for f in values] return skytools.dbdict(zip(fields, values))