Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: get exception 'Star' object has no attribute 'upper' #9299

Open
dimonb opened this issue Jun 6, 2024 · 1 comment
Open

[Bug]: get exception 'Star' object has no attribute 'upper' #9299

dimonb opened this issue Jun 6, 2024 · 1 comment
Labels
bug Something isn't working

Comments

@dimonb
Copy link

dimonb commented Jun 6, 2024

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

@dimonb dimonb added the bug Something isn't working label Jun 6, 2024
@glory9211
Copy link

glory9211 commented Jun 18, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants