[Bug]: get exception 'Star' object has no attribute 'upper'
Short description of current behavior
When doing query:
SELECT x.* FROM mindsdb.models x;
got exception
mindsdb_1 | During handling of the above exception, another exception occurred:
mindsdb_1 |
mindsdb_1 | Traceback (most recent call last):
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/mysql/mysql_proxy/mysql_proxy.py", line 722, in handle
mindsdb_1 | response = self.process_query(sql)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/utilities/profiler/profiler.py", line 141, in wrapper
mindsdb_1 | result = function(*args, **kwargs)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/mysql/mysql_proxy/mysql_proxy.py", line 527, in process_query
mindsdb_1 | executor.query_execute(sql)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/utilities/profiler/profiler.py", line 141, in wrapper
mindsdb_1 | result = function(*args, **kwargs)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py", line 115, in query_execute
mindsdb_1 | self.do_execute()
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/utilities/profiler/profiler.py", line 141, in wrapper
mindsdb_1 | result = function(*args, **kwargs)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py", line 168, in do_execute
mindsdb_1 | ret = self.command_executor.execute_command(self.query)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/utilities/profiler/profiler.py", line 141, in wrapper
mindsdb_1 | result = function(*args, **kwargs)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/executor/command_executor.py", line 608, in execute_command
mindsdb_1 | query = SQLQuery(statement, session=self.session, database=database_name)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/executor/sql_query/sql_query.py", line 92, in __init__
mindsdb_1 | self.execute_query()
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/executor/sql_query/sql_query.py", line 265, in execute_query
mindsdb_1 | raise e
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/executor/sql_query/sql_query.py", line 259, in execute_query
mindsdb_1 | data = self.execute_step(step)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/executor/sql_query/sql_query.py", line 319, in execute_step
mindsdb_1 | return handler(self).call(step)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/executor/sql_query/steps/fetch_dataframe.py", line 99, in call
mindsdb_1 | data, columns_info = dn.query(
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/executor/datahub/datanodes/project_datanode.py", line 106, in query
mindsdb_1 | data, columns_info = self.information_schema.query(new_query)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/executor/datahub/datanodes/information_schema_datanode.py", line 166, in query
mindsdb_1 | data = query_df(dataframe, query, session=self.session)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb/api/executor/utilities/sql.py", line 161, in query_df
mindsdb_1 | query_str = render.get_string(query_ast, with_failback=True)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb_sql/render/sqlalchemy_render.py", line 671, in get_string
mindsdb_1 | stmt = self.get_query(ast_query)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb_sql/render/sqlalchemy_render.py", line 649, in get_query
mindsdb_1 | stmt = self.prepare_select(ast_query)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb_sql/render/sqlalchemy_render.py", line 379, in prepare_select
mindsdb_1 | col = self.to_expression(t)
mindsdb_1 | File "/usr/local/lib/python3.10/site-packages/mindsdb_sql/render/sqlalchemy_render.py", line 121, in to_expression
mindsdb_1 | name = t.parts[0].upper()
mindsdb_1 | AttributeError: 'Star' object has no attribute 'upper'
mindsdb_1 |
mindsdb_1 | 'Star' object has no attribute 'upper'
SELECT * FROM mindsdb.models x; is ok
Video or screenshots
No response
Expected behavior
No response
How to reproduce the error
do SELECT x.* FROM mindsdb.models x;
Anything else?
No response
This error is reproducible as per the instructions provided.
While debugging the issue the error generates from the mindsdb_sql package sqlalchemy_render.py. The following queries were ran to get the query_ast and type(query_ast) in the file mindsdb/api/executor/utilities/sql.py line 171 and checking the value for t in file mindsdb_sql/render/sqlalchemy_render.py line: 375
The results are:
Input (Error):
select x.* from mindsdb.models as x
query_ast ------> SELECT * FROM df AS x WHERE `project` = 'mindsdb'
type(query_ast): ------> <class 'mindsdb_sql.parser.ast.select.select.Select'>
t: ------> Identifier:<*>
Input (No Error):
select * from mindsdb.models as x
query_ast ------> SELECT * FROM df AS x WHERE `project` = 'mindsdb'
type(query_ast): ------> <class 'mindsdb_sql.parser.ast.select.select.Select'>
t: ------> Star:<*>
I have added a simple check for the input to verify if it is of type string in sqlalchemy_render.py
#### Line 117 - 123
elif isinstance(t, ast.Identifier):
# sql functions
col = None
if len(t.parts) == 1 and isinstance(t, str):
name = t.parts[0].upper()
if name == 'CURRENT_DATE':
col = sa_fnc.current_date()
which resolves the issue. But a moderator can guide if this is an issue with the library mindsdb_sql and the issue should be moved there or further investigation is required to make the behavior consistent for passing the Star objects with/without alias
@ZoranPandovski do we need to support this syntax ?