summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGavin Wahl <gwahl@fusionbox.com>2014-08-07 14:12:46 -0600
committerGavin Wahl <gwahl@fusionbox.com>2014-08-07 14:12:46 -0600
commit8ffe95af292e0930b7126aae1905a97f7ebdfb24 (patch)
treee2ada6890d9120d84a353614aadd333412cf450e
parent8f5f638b1a0c0759adf122450f9027f47a4a220e (diff)
downloadsqlparse-8ffe95af292e0930b7126aae1905a97f7ebdfb24.tar.gz
Handle modulo operator without spaces
`x %3` should be interpreted as a modulo operation, not a parameter marker. Co-authored-by: Rocky Meza <rmeza@fusionbox.com>
-rw-r--r--sqlparse/lexer.py3
-rw-r--r--tests/test_parse.py4
2 files changed, 6 insertions, 1 deletions
diff --git a/sqlparse/lexer.py b/sqlparse/lexer.py
index 0d915ac..6bd414f 100644
--- a/sqlparse/lexer.py
+++ b/sqlparse/lexer.py
@@ -180,7 +180,8 @@ class Lexer(object):
(r'\$([^\W\d]\w*)?\$', tokens.Name.Builtin),
(r'\?{1}', tokens.Name.Placeholder),
(r'%\(\w+\)s', tokens.Name.Placeholder),
- (r'[$:?%]\w+', tokens.Name.Placeholder),
+ (r'%s', tokens.Name.Placeholder),
+ (r'[$:?]\w+', tokens.Name.Placeholder),
# FIXME(andi): VALUES shouldn't be listed here
# see https://github.com/andialbrecht/sqlparse/pull/64
(r'VALUES', tokens.Keyword),
diff --git a/tests/test_parse.py b/tests/test_parse.py
index 6d7f7df..d77bb43 100644
--- a/tests/test_parse.py
+++ b/tests/test_parse.py
@@ -99,6 +99,10 @@ class SQLParseTest(TestCaseBase):
self.assert_(t[-1].ttype is sqlparse.tokens.Name.Placeholder)
self.assertEqual(t[-1].value, '$a')
+ def test_modulo_not_placeholder(self):
+ tokens = list(sqlparse.lexer.tokenize('x %3'))
+ self.assertEqual(tokens[2][0], sqlparse.tokens.Operator)
+
def test_access_symbol(self): # see issue27
t = sqlparse.parse('select a.[foo bar] as foo')[0].tokens
self.assert_(isinstance(t[-1], sqlparse.sql.Identifier))