mirror of
https://github.com/apache/superset.git
synced 2026-04-19 08:04:53 +00:00
fix: boolean type into SQL 'in' operator (#16107)
* fix: boolean type into SQL 'in' operator * fix ut * fix ut again * update url * remove blank line
This commit is contained in:
@@ -20,6 +20,8 @@ from typing import Any, Dict, NamedTuple, List, Pattern, Tuple, Union
|
||||
from unittest.mock import patch
|
||||
import pytest
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from superset import db
|
||||
from superset.connectors.sqla.models import SqlaTable, TableColumn
|
||||
from superset.db_engine_specs.bigquery import BigQueryEngineSpec
|
||||
@@ -264,6 +266,43 @@ class TestDatabaseModel(SupersetTestCase):
|
||||
else:
|
||||
self.assertIn(filter_.expected, sql)
|
||||
|
||||
@pytest.mark.usefixtures("load_birth_names_dashboard_with_slices")
|
||||
def test_boolean_type_where_operators(self):
|
||||
table = self.get_table(name="birth_names")
|
||||
db.session.add(
|
||||
TableColumn(
|
||||
column_name="boolean_gender",
|
||||
expression="case when gender = 'boy' then True else False end",
|
||||
type="BOOLEAN",
|
||||
table=table,
|
||||
)
|
||||
)
|
||||
query_obj = {
|
||||
"granularity": None,
|
||||
"from_dttm": None,
|
||||
"to_dttm": None,
|
||||
"groupby": ["boolean_gender"],
|
||||
"metrics": ["count"],
|
||||
"is_timeseries": False,
|
||||
"filter": [
|
||||
{
|
||||
"col": "boolean_gender",
|
||||
"op": FilterOperator.IN,
|
||||
"val": ["true", "false"],
|
||||
}
|
||||
],
|
||||
"extras": {},
|
||||
}
|
||||
sqla_query = table.get_sqla_query(**query_obj)
|
||||
sql = table.database.compile_sqla_query(sqla_query.sqla_query)
|
||||
dialect = table.database.get_dialect()
|
||||
operand = "(true, false)"
|
||||
# override native_boolean=False behavior in MySQLCompiler
|
||||
# https://github.com/sqlalchemy/sqlalchemy/blob/master/lib/sqlalchemy/dialects/mysql/base.py
|
||||
if not dialect.supports_native_boolean and dialect.name != "mysql":
|
||||
operand = "(1, 0)"
|
||||
self.assertIn(f"IN {operand}", sql)
|
||||
|
||||
def test_incorrect_jinja_syntax_raises_correct_exception(self):
|
||||
query_obj = {
|
||||
"granularity": None,
|
||||
|
||||
Reference in New Issue
Block a user