summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFredy Wijaya <fredy.wijaya@gmail.com>2018-03-21 23:01:17 -0500
committerFredy Wijaya <fredy.wijaya@gmail.com>2018-03-21 23:04:40 -0500
commite07e09540d056f2fad0f18acfb8196b42c2ace66 (patch)
treebcfb2bf693bb380c81071f0b02cc874a5f2ff6a0
parent19b9e6756c796752565950d89598ef8b46ca786d (diff)
downloadsqlparse-e07e09540d056f2fad0f18acfb8196b42c2ace66.tar.gz
Fix issue with get_real_name returning incorrect name
-rw-r--r--sqlparse/sql.py7
-rw-r--r--tests/test_parse.py9
2 files changed, 13 insertions, 3 deletions
diff --git a/sqlparse/sql.py b/sqlparse/sql.py
index 99f133e..4b78a92 100644
--- a/sqlparse/sql.py
+++ b/sqlparse/sql.py
@@ -358,7 +358,7 @@ class TokenList(Token):
"""Returns the real name (object name) of this identifier."""
# a.b
dot_idx, _ = self.token_next_by(m=(T.Punctuation, '.'))
- return self._get_first_name(dot_idx)
+ return self._get_first_name(dot_idx, real_name=True)
def get_parent_name(self):
"""Return name of the parent object if any.
@@ -369,7 +369,8 @@ class TokenList(Token):
_, prev_ = self.token_prev(dot_idx)
return remove_quotes(prev_.value) if prev_ is not None else None
- def _get_first_name(self, idx=None, reverse=False, keywords=False):
+ def _get_first_name(self, idx=None, reverse=False, keywords=False,
+ real_name=False):
"""Returns the name of the first token with a name"""
tokens = self.tokens[idx:] if idx else self.tokens
@@ -383,7 +384,7 @@ class TokenList(Token):
if token.ttype in types:
return remove_quotes(token.value)
elif isinstance(token, (Identifier, Function)):
- return token.get_name()
+ return token.get_real_name() if real_name else token.get_name()
class Statement(TokenList):
diff --git a/tests/test_parse.py b/tests/test_parse.py
index b6f4fff..30be32b 100644
--- a/tests/test_parse.py
+++ b/tests/test_parse.py
@@ -424,3 +424,12 @@ def test_non_ascii():
statement = stmts[0]
assert text_type(statement) == _test_non_ascii
assert statement._pprint_tree() is None
+
+
+def test_get_real_name():
+ # issue 369
+ s = u"update a t set t.b=1"
+ stmts = sqlparse.parse(s)
+ assert len(stmts) == 1
+ assert 'a' == stmts[0].get_real_name()
+ assert 't' == stmts[0].get_alias()