def testTokenize(self): # Test regular, expected tokens query = "Select name anothername\tyetAThirdName\nAndAnother(Something(else)) and, another" self.assertSequenceEqual( QueryGrammar.tokenizeQuery(query), ("Select", "name", "anothername", "yetAThirdName", "AndAnother", "(", "Something", "(", "else", ")", ")", "and", ",", "another") ) # Test condition tokens query = "a > < <= >= + - / % * != = ><<=>=+-/%*" self.assertSequenceEqual( QueryGrammar.tokenizeQuery(query), ("a", ">", "<", "<=", ">=", "+", "-", "/", "%", "*", "!=", "=", ">", "<", "<=", ">=", "+", "-", "/", "%", "*") )
def __init__(self, query): queryTokens = tokenizeQuery(query) if len(queryTokens) == 0: raise Exception("No query given") elif queryTokens[0].lower() != self.__class__.__name__.lower(): raise Exception("%s called for a %s query" % (self.__class__.__name__, queryTokens[0])) if self.queryParser is None: self.__class__.queryParser = QueryParser(self.__class__) self.queryParser.populate(self, queryTokens[1:])