mirror of https://github.com/apache/superset.git
[fix] Updating bound filters for PyDruid 0.5.7 (#8742)
This commit is contained in:
parent
38782e260a
commit
c74bb6cb9b
|
@ -26,7 +26,7 @@ pip-tools==3.7.0
|
|||
pre-commit==1.17.0
|
||||
psycopg2-binary==2.7.5
|
||||
pycodestyle==2.5.0
|
||||
pydruid==0.5.6
|
||||
pydruid==0.5.7
|
||||
pyhive==0.6.1
|
||||
pylint==1.9.2
|
||||
redis==3.2.1
|
||||
|
|
|
@ -64,7 +64,7 @@ try:
|
|||
RegexExtraction,
|
||||
RegisteredLookupExtraction,
|
||||
)
|
||||
from pydruid.utils.filters import Dimension, Filter
|
||||
from pydruid.utils.filters import Bound, Dimension, Filter
|
||||
from pydruid.utils.having import Aggregation, Having
|
||||
from pydruid.utils.postaggregator import (
|
||||
Const,
|
||||
|
@ -1519,48 +1519,44 @@ class DruidDatasource(Model, BaseDatasource):
|
|||
# For the ops below, could have used pydruid's Bound,
|
||||
# but it doesn't support extraction functions
|
||||
elif op == ">=":
|
||||
cond = Filter(
|
||||
type="bound",
|
||||
cond = Bound(
|
||||
extraction_function=extraction_fn,
|
||||
dimension=col,
|
||||
lowerStrict=False,
|
||||
upperStrict=False,
|
||||
lower=eq,
|
||||
upper=None,
|
||||
alphaNumeric=is_numeric_col,
|
||||
ordering=cls._get_ordering(is_numeric_col),
|
||||
)
|
||||
elif op == "<=":
|
||||
cond = Filter(
|
||||
type="bound",
|
||||
cond = Bound(
|
||||
extraction_function=extraction_fn,
|
||||
dimension=col,
|
||||
lowerStrict=False,
|
||||
upperStrict=False,
|
||||
lower=None,
|
||||
upper=eq,
|
||||
alphaNumeric=is_numeric_col,
|
||||
ordering=cls._get_ordering(is_numeric_col),
|
||||
)
|
||||
elif op == ">":
|
||||
cond = Filter(
|
||||
type="bound",
|
||||
cond = Bound(
|
||||
extraction_function=extraction_fn,
|
||||
lowerStrict=True,
|
||||
upperStrict=False,
|
||||
dimension=col,
|
||||
lower=eq,
|
||||
upper=None,
|
||||
alphaNumeric=is_numeric_col,
|
||||
ordering=cls._get_ordering(is_numeric_col),
|
||||
)
|
||||
elif op == "<":
|
||||
cond = Filter(
|
||||
type="bound",
|
||||
cond = Bound(
|
||||
extraction_function=extraction_fn,
|
||||
upperStrict=True,
|
||||
lowerStrict=False,
|
||||
dimension=col,
|
||||
lower=None,
|
||||
upper=eq,
|
||||
alphaNumeric=is_numeric_col,
|
||||
ordering=cls._get_ordering(is_numeric_col),
|
||||
)
|
||||
elif op == "IS NULL":
|
||||
cond = Filter(dimension=col, value="")
|
||||
|
@ -1574,6 +1570,10 @@ class DruidDatasource(Model, BaseDatasource):
|
|||
|
||||
return filters
|
||||
|
||||
@staticmethod
|
||||
def _get_ordering(is_numeric_col: bool) -> str:
|
||||
return "numeric" if is_numeric_col else "lexicographic"
|
||||
|
||||
def _get_having_obj(self, col: str, op: str, eq: str) -> "Having":
|
||||
cond = None
|
||||
if op == "==":
|
||||
|
|
|
@ -209,7 +209,7 @@ class DruidFuncTestCase(SupersetTestCase):
|
|||
self.assertFalse(res.filter["filter"]["lowerStrict"])
|
||||
self.assertEqual("A", res.filter["filter"]["dimension"])
|
||||
self.assertEqual("h", res.filter["filter"]["lower"])
|
||||
self.assertFalse(res.filter["filter"]["alphaNumeric"])
|
||||
self.assertEqual("lexicographic", res.filter["filter"]["ordering"])
|
||||
filtr["op"] = ">"
|
||||
res = DruidDatasource.get_filters([filtr], [], column_dict)
|
||||
self.assertTrue(res.filter["filter"]["lowerStrict"])
|
||||
|
@ -220,6 +220,9 @@ class DruidFuncTestCase(SupersetTestCase):
|
|||
filtr["op"] = "<"
|
||||
res = DruidDatasource.get_filters([filtr], [], column_dict)
|
||||
self.assertTrue(res.filter["filter"]["upperStrict"])
|
||||
filtr["val"] = 1
|
||||
res = DruidDatasource.get_filters([filtr], ["A"], column_dict)
|
||||
self.assertEqual("numeric", res.filter["filter"]["ordering"])
|
||||
|
||||
@unittest.skipUnless(
|
||||
SupersetTestCase.is_module_installed("pydruid"), "pydruid not installed"
|
||||
|
|
Loading…
Reference in New Issue