11"""Tests sqlparse.parse()."""
2+ import re
23from io import StringIO
34
45import pytest
56
67import sqlparse
7- from sqlparse import sql , tokens as T
8+ from sqlparse import sql , tokens as T , keywords
89from 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