Skip to content

Commit f9a73a6

Browse files
mrmasterplanandialbrecht
authored andcommitted
test for changing the regex
1 parent 8515d2e commit f9a73a6

2 files changed

Lines changed: 35 additions & 9 deletions

File tree

sqlparse/lexer.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,12 @@ def get_tokens(self, text, encoding=None):
9999
text = text.decode(encoding)
100100
else:
101101
try:
102-
text = text.decode("utf-8")
102+
text = text.decode('utf-8')
103103
except UnicodeDecodeError:
104-
text = text.decode("unicode-escape")
104+
text = text.decode('unicode-escape')
105105
else:
106-
raise TypeError(
107-
"Expected text or file-like object, got {!r}"
108-
.format(type(text))
109-
)
106+
raise TypeError("Expected text or file-like object, got {!r}".
107+
format(type(text)))
110108

111109
iterable = enumerate(text)
112110
for pos, char in iterable:

tests/test_parse.py

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
"""Tests sqlparse.parse()."""
2+
import re
23
from io import StringIO
34

45
import pytest
56

67
import sqlparse
7-
from sqlparse import sql, tokens as T
8+
from sqlparse import sql, tokens as T, keywords
89
from sqlparse.lexer import Lexer
910

1011

@@ -491,8 +492,7 @@ def test_parenthesis():
491492
T.Newline,
492493
T.Punctuation]
493494

494-
495-
def test_configurable_syntax():
495+
def test_configurable_keywords():
496496
sql = """select * from foo BACON SPAM EGGS;"""
497497
tokens = sqlparse.parse(sql)[0]
498498

@@ -517,6 +517,9 @@ def test_configurable_syntax():
517517

518518
tokens = sqlparse.parse(sql)[0]
519519

520+
# reset the syntax for later tests.
521+
Lexer().default_initialization()
522+
520523
assert list(
521524
(t.ttype, t.value) for t in tokens if t.ttype not in sqlparse.tokens.Whitespace
522525
) == [
@@ -529,5 +532,30 @@ def test_configurable_syntax():
529532
(sqlparse.tokens.Keyword, "EGGS"),
530533
(sqlparse.tokens.Punctuation, ";"),
531534
]
535+
536+
537+
def test_configurable_regex():
538+
lex = Lexer()
539+
lex.clear()
540+
541+
my_regex = (
542+
re.compile(r"ZORDER\s+BY\b", keywords.FLAGS).match,
543+
sqlparse.tokens.Keyword,
544+
)
545+
546+
lex.set_SQL_REGEX(keywords.SQL_REGEX[:38] + [my_regex] + keywords.SQL_REGEX[38:])
547+
lex.add_keywords(keywords.KEYWORDS_COMMON)
548+
lex.add_keywords(keywords.KEYWORDS_ORACLE)
549+
lex.add_keywords(keywords.KEYWORDS_PLPGSQL)
550+
lex.add_keywords(keywords.KEYWORDS_HQL)
551+
lex.add_keywords(keywords.KEYWORDS_MSACCESS)
552+
lex.add_keywords(keywords.KEYWORDS)
553+
554+
tokens = sqlparse.parse("select * from foo zorder by bar;")[0]
555+
532556
# reset the syntax for later tests.
533557
Lexer().default_initialization()
558+
559+
assert list(
560+
(t.ttype, t.value) for t in tokens if t.ttype not in sqlparse.tokens.Whitespace
561+
)[4] == (sqlparse.tokens.Keyword, "zorder by")

0 commit comments

Comments
 (0)