phlppnhllngr opened a new issue, #35792: URL: https://github.com/apache/superset/issues/35792
### Bug description **Description:** After updating from 4.1.1 to 5.0.0, time grain can no longer be selected in charts when using DB2, as doing so creates invalid SQL statements. **Steps to reproduce:** 1. Create chart, e. g. "Big Number with trendline" 2. Select a column of DB2-type TIMESTAMP as "Temporal X-Axis" 3. Select Time Grain = Day 4. Run "Update chart" **Result:** "Unable to parse SQL: Error parsing near "-" at line ... **Screenshot of Bug:** <img width="1854" height="789" alt="Image" src="https://github.com/user-attachments/assets/9f84836b-14cb-4413-b0e1-5deaa2f9a627" /> **Stacktrace:** <html><body> <!--StartFragment--> 2025-10-22 09:55:32,981:WARNING:superset.views.error_handling:SupersetErrorException | -- | -- | | Traceback (most recent call last): | | | File "/app/superset/sql/parse.py", line 267, in _parse | | | return sqlglot.parse(script, dialect=dialect) | | | File "/app/.venv/lib/python3.10/site-packages/sqlglot/__init__.py", line 102, in parse | | | return Dialect.get_or_raise(read or dialect).parse(sql, **opts) | | | File "/app/.venv/lib/python3.10/site-packages/sqlglot/dialects/dialect.py", line 991, in parse | | | return self.parser(**opts).parse(self.tokenize(sql), sql) | | | File "/app/.venv/lib/python3.10/site-packages/sqlglot/parser.py", line 1507, in parse | | | return self._parse( | | | File "/app/.venv/lib/python3.10/site-packages/sqlglot/parser.py", line 1579, in _parse | | | self.raise_error("Invalid expression / Unexpected token") | | | File "/app/.venv/lib/python3.10/site-packages/sqlglot/parser.py", line 1620, in raise_error | | | raise error | | | sqlglot.errors.ParseError: Invalid expression / Unexpected token. Line 1, Col: 69. | | | SELECT CAST(kw_split_time as TIMESTAMP) - HOUR(kw_split_time) HOURS - MINUTE(kw_split_time) MINUTES - SECOND(kw_split_time) SECONDS - MICROSECOND(kw_split_time) MICROSEC | | | The above exception was the direct cause of the following exception: | | | Traceback (most recent call last): | | | File "/app/.venv/lib/python3.10/site-packages/flask/app.py", line 1484, in full_dispatch_request | | | rv = self.dispatch_request() | | | File "/app/.venv/lib/python3.10/site-packages/flask/app.py", line 1469, in dispatch_request | | | return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) | | | File "/app/.venv/lib/python3.10/site-packages/flask_appbuilder/security/decorators.py", line 109, in wraps | | | return f(self, *args, **kwargs) | | | File "/app/superset/views/base_api.py", line 120, in wraps | | | duration, response = time_function(f, self, *args, **kwargs) | | | File "/app/superset/utils/core.py", line 1369, in time_function | | | response = func(*args, **kwargs) | | | File "/app/superset/utils/log.py", line 304, in wrapper | | | value = f(*args, **kwargs) | | | File "/app/superset/charts/data/api.py", line 260, in data | | | return self._get_data_response( | | | File "/app/superset/utils/log.py", line 304, in wrapper | | | value = f(*args, **kwargs) | | | File "/app/superset/charts/data/api.py", line 423, in _get_data_response | | | result = command.run(force_cached=force_cached) | | | File "/app/superset/commands/chart/data/get_data_command.py", line 45, in run | | | payload = self._query_context.get_payload( | | | File "/app/superset/common/query_context.py", line 102, in get_payload | | | return self._processor.get_payload(cache_query_context, force_cached) | | | File "/app/superset/common/query_context_processor.py", line 752, in get_payload | | | query_results = [ | | | File "/app/superset/common/query_context_processor.py", line 753, in <listcomp> | | | get_query_results( | | | File "/app/superset/common/query_actions.py", line 227, in get_query_results | | | return result_func(query_context, query_obj, force_cached) | | | File "/app/superset/common/query_actions.py", line 189, in _get_results | | | payload = _get_full(query_context, query_obj, force_cached) | | | File "/app/superset/common/query_actions.py", line 103, in _get_full | | | payload = query_context.get_df_payload(query_obj, force_cached=force_cached) | | | File "/app/superset/common/query_context.py", line 123, in get_df_payload | | | return self._processor.get_df_payload( | | | File "/app/superset/common/query_context_processor.py", line 162, in get_df_payload | | | query_result = self.get_query_result(query_obj) | | | File "/app/superset/common/query_context_processor.py", line 265, in get_query_result | | | result = query_context.datasource.query(query_object.to_dict()) | | | File "/app/superset/connectors/sqla/models.py", line 1748, in query | | | df = self.database.get_df( | | | File "/app/superset/models/core.py", line 706, in get_df | | | self.db_engine_spec.execute(cursor, sql_, self) | | | File "/app/superset/db_engine_specs/base.py", line 1858, in execute | | | if sql_parse.check_sql_functions_exist(query, disallowed_functions, cls.engine): | | | File "/app/superset/sql_parse.py", line 183, in check_sql_functions_exist | | | return SQLScript(sql, engine=engine).check_functions_present(function_list) | | | File "/app/superset/sql/parse.py", line 670, in __init__ | | | self.statements = statement_class.split_script(script, engine) | | | File "/app/superset/sql/parse.py", line 327, in split_script | | | ast = cls._parse(remainder, engine)[0] | | | File "/app/superset/sql/parse.py", line 270, in _parse | | | raise SupersetParseError( | | | superset.exceptions.SupersetParseError: Error parsing near '-' at line 1:69 <!--EndFragment--> </body> </html> ### Screenshots/recordings _No response_ ### Superset version 5.0.0 ### Python version 3.9 ### Node version 16 ### Browser Chrome ### Additional context Linux DB2 (LUW) ### Checklist - [ ] I have searched Superset docs and Slack and didn't find a solution to my problem. - [x] I have searched the GitHub issue tracker and didn't find a similar bug report. - [ ] I have checked Superset's logs for errors and if I found a relevant Python stacktrace, I included it here as text in the "additional context" section. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
