summaryrefslogtreecommitdiff
path: root/sqlparse/lexer.py
diff options
context:
space:
mode:
authorAndi Albrecht <albrecht.andi@gmail.com>2013-02-13 13:23:52 +0100
committerAndi Albrecht <albrecht.andi@gmail.com>2013-02-13 13:23:52 +0100
commitdba96a147be55be7da657a17a38c21b30ff0e664 (patch)
tree0b3bcc10ae87e86c80f6b6ebc3c2a5b144a1de40 /sqlparse/lexer.py
parentf6c3a0f124becdaeacfb755d7ba61ffc7c032337 (diff)
downloadsqlparse-dba96a147be55be7da657a17a38c21b30ff0e664.tar.gz
Dynamically change bufsize to parse lenghty tokens faster (fixes #86).
Diffstat (limited to 'sqlparse/lexer.py')
-rw-r--r--sqlparse/lexer.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/sqlparse/lexer.py b/sqlparse/lexer.py
index a92e2b7..4cec0db 100644
--- a/sqlparse/lexer.py
+++ b/sqlparse/lexer.py
@@ -161,7 +161,9 @@ class Lexer(object):
stripnl = False
tabsize = 0
flags = re.IGNORECASE | re.UNICODE
- bufsize = 4096
+ DEFAULT_BUFSIZE = 4096
+ MAX_BUFSIZE = 2 ** 31
+ bufsize = DEFAULT_BUFSIZE
tokens = {
'root': [
@@ -322,9 +324,14 @@ class Lexer(object):
else:
assert False, "wrong state def: %r" % new_state
statetokens = tokendefs[statestack[-1]]
+ # reset bufsize
+ self.bufsize = self.DEFAULT_BUFSIZE
break
else:
if hasmore:
+ # we have no match, increase bufsize to parse lengthy
+ # tokens faster (see #86).
+ self.bufsize = min(self.bufsize * 2, self.MAX_BUFSIZE)
buf = stream.read(self.bufsize)
hasmore = len(buf) == self.bufsize
text = text[pos:] + self._decode(buf)