# HG changeset patch # User paulb@localhost.localdomain # Date 1180806082 -7200 # Node ID 844c41422b0943c2c7ca52406ce494f8ba1cef4e SQL literal detection routines. diff -r 000000000000 -r 844c41422b09 sqlliterals/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sqlliterals/__init__.py Sat Jun 02 19:41:22 2007 +0200 @@ -0,0 +1,3 @@ +#!/usr/bin/env python + +# vim: tabstop=4 expandtab shiftwidth=4 diff -r 000000000000 -r 844c41422b09 sqlliterals/pyparser.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sqlliterals/pyparser.py Sat Jun 02 19:41:22 2007 +0200 @@ -0,0 +1,20 @@ +#!/usr/bin/env python + +from pyparsing import * + +class Grammar: + def __setattr__(self, name, value): + self.__dict__[name] = Group(value).setResultsName(name) + +g = Grammar() + +g.non_literal = OneOrMore(CharsNotIn("'")) +g.value = ZeroOrMore(Or([Literal("''"), CharsNotIn("'")])) +g.literal = Literal("'") + g.value + Literal("'") +g.query = ZeroOrMore(Or([g.non_literal, g.literal])) +g.query.leaveWhitespace() + +def parseString(s): + return g.query.parseString(s) + +# vim: tabstop=4 expandtab shiftwidth=4 diff -r 000000000000 -r 844c41422b09 sqlliterals/regexp.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sqlliterals/regexp.py Sat Jun 02 19:41:22 2007 +0200 @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +import re +query = re.compile("(?P[^']+)|(?P'(?:[^']|(?:''))*')") + +def parseString(s): + regions = [] + first = 1 + for match in query.finditer(s): + non_literal, literal = match.groups() + if first and literal: + regions.append("") + if non_literal: + regions.append(non_literal) + elif literal: + regions.append(literal) + first = 0 + + return regions + +# vim: tabstop=4 expandtab shiftwidth=4