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]

Reply via email to