ipaddicting opened a new issue, #36068:
URL: https://github.com/apache/superset/issues/36068

   ### Bug description
   
   1. Add any connection (e.g. TDengine) that is not included in 
`SQLGLOT_DIALECTS` of `superset/sql/parse.py`
   2. Create a dataset and a chart from it
   3. Drag the timestamp field  to the "X-axis", and drag any value to 
"Metrics" with any aggregate function like AVG
   4. Click "Update chart" will get the error message as screenshot below.
   
   ### Screenshots/recordings
   
   <img width="1432" height="679" alt="Image" 
src="https://github.com/user-attachments/assets/b840c66e-80d9-41c7-a18f-f692580d0eb3";
 />
   
   
   ### Superset version
   
   master / latest-dev
   
   ### Python version
   
   3.11
   
   ### Node version
   
   16
   
   ### Browser
   
   Chrome
   
   ### Additional context
   
   Error messages from superset-light:
   ```
   uperset-light-1       | 2025-11-11 
08:09:09,800:WARNING:superset.views.error_handling:SupersetErrorException
   superset-light-1       | Traceback (most recent call last):
   superset-light-1       |   File "/app/superset/sql/parse.py", line 553, in 
_parse
   superset-light-1       |     statements = sqlglot.parse(script, 
dialect=dialect)
   superset-light-1       |                  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/__init__.py", line 102, in 
parse
   superset-light-1       |     return Dialect.get_or_raise(read or 
dialect).parse(sql, **opts)
   superset-light-1       |            
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/dialects/dialect.py", line 
1083, in parse
   superset-light-1       |     return 
self.parser(**opts).parse(self.tokenize(sql), sql)
   superset-light-1       |            
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 1623, in parse
   superset-light-1       |     return self._parse(
   superset-light-1       |            ^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 1692, in 
_parse
   superset-light-1       |     expressions.append(parse_method(self))
   superset-light-1       |                        ^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 1933, in 
_parse_statement
   superset-light-1       |     expression = 
self._parse_set_operations(expression) if expression else self._parse_select()
   superset-light-1       |                                                     
                       ^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 3246, in 
_parse_select
   superset-light-1       |     query = self._parse_select_query(
   superset-light-1       |             ^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 3324, in 
_parse_select_query
   superset-light-1       |     projections = self._parse_projections()
   superset-light-1       |                   ^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 3203, in 
_parse_projections
   superset-light-1       |     return self._parse_expressions()
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 7375, in 
_parse_expressions
   superset-light-1       |     return self._parse_csv(self._parse_expression)
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 7329, in 
_parse_csv
   superset-light-1       |     parse_result = parse_method()
   superset-light-1       |                    ^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 4941, in 
_parse_expression
   superset-light-1       |     return 
self._parse_alias(self._parse_assignment())
   superset-light-1       |                              
^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 4944, in 
_parse_assignment
   superset-light-1       |     this = self._parse_disjunction()
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 4965, in 
_parse_disjunction
   superset-light-1       |     return 
self._parse_tokens(self._parse_conjunction, self.DISJUNCTION)
   superset-light-1       |            
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 7343, in 
_parse_tokens
   superset-light-1       |     this = parse_method()
   superset-light-1       |            ^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 4968, in 
_parse_conjunction
   superset-light-1       |     return self._parse_tokens(self._parse_equality, 
self.CONJUNCTION)
   superset-light-1       |            
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 7343, in 
_parse_tokens
   superset-light-1       |     this = parse_method()
   superset-light-1       |            ^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 4971, in 
_parse_equality
   superset-light-1       |     return 
self._parse_tokens(self._parse_comparison, self.EQUALITY)
   superset-light-1       |            
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 7343, in 
_parse_tokens
   superset-light-1       |     this = parse_method()
   superset-light-1       |            ^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 4974, in 
_parse_comparison
   superset-light-1       |     return self._parse_tokens(self._parse_range, 
self.COMPARISON)
   superset-light-1       |            
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 7343, in 
_parse_tokens
   superset-light-1       |     this = parse_method()
   superset-light-1       |            ^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 4977, in 
_parse_range
   superset-light-1       |     this = this or self._parse_bitwise()
   superset-light-1       |                    ^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 5146, in 
_parse_bitwise
   superset-light-1       |     this = self._parse_term()
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 5180, in 
_parse_term
   superset-light-1       |     this = self._parse_factor()
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 5203, in 
_parse_factor
   superset-light-1       |     this = parse_method()
   superset-light-1       |            ^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 5228, in 
_parse_unary
   superset-light-1       |     return 
self._parse_at_time_zone(self._parse_type())
   superset-light-1       |                                     
^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 5290, in 
_parse_type
   superset-light-1       |     this = self._parse_column()
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 5594, in 
_parse_column
   superset-light-1       |     this = self._parse_column_reference()
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 5603, in 
_parse_column_reference
   superset-light-1       |     this = self._parse_field()
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 5796, in 
_parse_field
   superset-light-1       |     field = self._parse_primary() or 
self._parse_function(
   superset-light-1       |                                      
^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 5819, in 
_parse_function
   superset-light-1       |     func = self._parse_function_call(
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 5936, in 
_parse_function_call
   superset-light-1       |     self._match_r_paren(this)
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 8200, in 
_match_r_paren
   superset-light-1       |     self.raise_error("Expecting )")
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/sqlglot/parser.py", line 1736, in 
raise_error
   superset-light-1       |     raise error
   superset-light-1       | sqlglot.errors.ParseError: Expecting ). Line 1, 
Col: 26.
   superset-light-1       |   SELECT TIMETRUNCATE(ts, 1d, 0) AS ts, 
AVG(si_nox_raw_ppm) AS `AVG(si_nox_raw_ppm)` 
   superset-light-1       | FROM signals.si_snv_v108 GROUP BY TIMETRUN
   superset-light-1       | 
   superset-light-1       | The above exception was the direct cause of the 
following exception:
   superset-light-1       | 
   superset-light-1       | Traceback (most recent call last):
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/flask/app.py", line 1484, in 
full_dispatch_request
   superset-light-1       |     rv = self.dispatch_request()
   superset-light-1       |          ^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/flask/app.py", line 1469, in 
dispatch_request
   superset-light-1       |     return 
self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
   superset-light-1       |            
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/.venv/lib/python3.11/site-packages/flask_appbuilder/security/decorators.py",
 line 109, in wraps
   superset-light-1       |     return f(self, *args, **kwargs)
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/views/base_api.py", line 120, 
in wraps
   superset-light-1       |     duration, response = time_function(f, self, 
*args, **kwargs)
   superset-light-1       |                          
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/utils/core.py", line 1500, in 
time_function
   superset-light-1       |     response = func(*args, **kwargs)
   superset-light-1       |                ^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/utils/log.py", line 302, in 
wrapper
   superset-light-1       |     value = f(*args, add_extra_log_payload=log, 
**kwargs)
   superset-light-1       |             
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/charts/data/api.py", line 
271, in data
   superset-light-1       |     return self._get_data_response(
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/utils/log.py", line 304, in 
wrapper
   superset-light-1       |     value = f(*args, **kwargs)
   superset-light-1       |             ^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/charts/data/api.py", line 
438, in _get_data_response
   superset-light-1       |     result = command.run(force_cached=force_cached)
   superset-light-1       |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/superset/commands/chart/data/get_data_command.py", line 45, in run
   superset-light-1       |     payload = self._query_context.get_payload(
   superset-light-1       |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/common/query_context.py", 
line 102, in get_payload
   superset-light-1       |     return 
self._processor.get_payload(cache_query_context, force_cached)
   superset-light-1       |            
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/superset/common/query_context_processor.py", line 1062, in get_payload
   superset-light-1       |     query_results = [
   superset-light-1       |                     ^
   superset-light-1       |   File 
"/app/superset/common/query_context_processor.py", line 1063, in <listcomp>
   superset-light-1       |     get_query_results(
   superset-light-1       |   File "/app/superset/common/query_actions.py", 
line 224, in get_query_results
   superset-light-1       |     return result_func(query_context, query_obj, 
force_cached)
   superset-light-1       |            
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/common/query_actions.py", 
line 100, in _get_full
   superset-light-1       |     payload = 
query_context.get_df_payload(query_obj, force_cached=force_cached)
   superset-light-1       |               
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/common/query_context.py", 
line 123, in get_df_payload
   superset-light-1       |     return self._processor.get_df_payload(
   superset-light-1       |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/superset/common/query_context_processor.py", line 165, in get_df_payload
   superset-light-1       |     query_result = self.get_query_result(query_obj)
   superset-light-1       |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File 
"/app/superset/common/query_context_processor.py", line 280, in get_query_result
   superset-light-1       |     result = 
query_context.datasource.query(query_object.to_dict())
   superset-light-1       |              
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/connectors/sqla/models.py", 
line 1645, in query
   superset-light-1       |     df = self.database.get_df(
   superset-light-1       |          ^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/models/core.py", line 770, in 
get_df
   superset-light-1       |     cursor, rows, description = 
self._execute_sql_with_mutation_and_logging(
   superset-light-1       |                                 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/models/core.py", line 689, in 
_execute_sql_with_mutation_and_logging
   superset-light-1       |     script = SQLScript(sql, 
self.db_engine_spec.engine)
   superset-light-1       |              
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/sql/parse.py", line 1233, in 
__init__
   superset-light-1       |     self.statements = 
statement_class.split_script(script, engine)
   superset-light-1       |                       
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/sql/parse.py", line 593, in 
split_script
   superset-light-1       |     cls(ast=ast, engine=engine) for ast in 
cls._parse(script, engine) if ast
   superset-light-1       |                                            
^^^^^^^^^^^^^^^^^^^^^^^^^^
   superset-light-1       |   File "/app/superset/sql/parse.py", line 564, in 
_parse
   superset-light-1       |     raise SupersetParseError(script, engine, 
**kwargs) from ex
   superset-light-1       | superset.exceptions.SupersetParseError: Error 
parsing near 'd' at line 1:26
   ```
   
   ### Checklist
   
   - [x] 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.
   - [x] 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