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
|
pre-commit==1.17.0
|
||||||
psycopg2-binary==2.7.5
|
psycopg2-binary==2.7.5
|
||||||
pycodestyle==2.5.0
|
pycodestyle==2.5.0
|
||||||
pydruid==0.5.6
|
pydruid==0.5.7
|
||||||
pyhive==0.6.1
|
pyhive==0.6.1
|
||||||
pylint==1.9.2
|
pylint==1.9.2
|
||||||
redis==3.2.1
|
redis==3.2.1
|
||||||
|
|
|
@ -64,7 +64,7 @@ try:
|
||||||
RegexExtraction,
|
RegexExtraction,
|
||||||
RegisteredLookupExtraction,
|
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.having import Aggregation, Having
|
||||||
from pydruid.utils.postaggregator import (
|
from pydruid.utils.postaggregator import (
|
||||||
Const,
|
Const,
|
||||||
|
@ -1519,48 +1519,44 @@ class DruidDatasource(Model, BaseDatasource):
|
||||||
# For the ops below, could have used pydruid's Bound,
|
# For the ops below, could have used pydruid's Bound,
|
||||||
# but it doesn't support extraction functions
|
# but it doesn't support extraction functions
|
||||||
elif op == ">=":
|
elif op == ">=":
|
||||||
cond = Filter(
|
cond = Bound(
|
||||||
type="bound",
|
|
||||||
extraction_function=extraction_fn,
|
extraction_function=extraction_fn,
|
||||||
dimension=col,
|
dimension=col,
|
||||||
lowerStrict=False,
|
lowerStrict=False,
|
||||||
upperStrict=False,
|
upperStrict=False,
|
||||||
lower=eq,
|
lower=eq,
|
||||||
upper=None,
|
upper=None,
|
||||||
alphaNumeric=is_numeric_col,
|
ordering=cls._get_ordering(is_numeric_col),
|
||||||
)
|
)
|
||||||
elif op == "<=":
|
elif op == "<=":
|
||||||
cond = Filter(
|
cond = Bound(
|
||||||
type="bound",
|
|
||||||
extraction_function=extraction_fn,
|
extraction_function=extraction_fn,
|
||||||
dimension=col,
|
dimension=col,
|
||||||
lowerStrict=False,
|
lowerStrict=False,
|
||||||
upperStrict=False,
|
upperStrict=False,
|
||||||
lower=None,
|
lower=None,
|
||||||
upper=eq,
|
upper=eq,
|
||||||
alphaNumeric=is_numeric_col,
|
ordering=cls._get_ordering(is_numeric_col),
|
||||||
)
|
)
|
||||||
elif op == ">":
|
elif op == ">":
|
||||||
cond = Filter(
|
cond = Bound(
|
||||||
type="bound",
|
|
||||||
extraction_function=extraction_fn,
|
extraction_function=extraction_fn,
|
||||||
lowerStrict=True,
|
lowerStrict=True,
|
||||||
upperStrict=False,
|
upperStrict=False,
|
||||||
dimension=col,
|
dimension=col,
|
||||||
lower=eq,
|
lower=eq,
|
||||||
upper=None,
|
upper=None,
|
||||||
alphaNumeric=is_numeric_col,
|
ordering=cls._get_ordering(is_numeric_col),
|
||||||
)
|
)
|
||||||
elif op == "<":
|
elif op == "<":
|
||||||
cond = Filter(
|
cond = Bound(
|
||||||
type="bound",
|
|
||||||
extraction_function=extraction_fn,
|
extraction_function=extraction_fn,
|
||||||
upperStrict=True,
|
upperStrict=True,
|
||||||
lowerStrict=False,
|
lowerStrict=False,
|
||||||
dimension=col,
|
dimension=col,
|
||||||
lower=None,
|
lower=None,
|
||||||
upper=eq,
|
upper=eq,
|
||||||
alphaNumeric=is_numeric_col,
|
ordering=cls._get_ordering(is_numeric_col),
|
||||||
)
|
)
|
||||||
elif op == "IS NULL":
|
elif op == "IS NULL":
|
||||||
cond = Filter(dimension=col, value="")
|
cond = Filter(dimension=col, value="")
|
||||||
|
@ -1574,6 +1570,10 @@ class DruidDatasource(Model, BaseDatasource):
|
||||||
|
|
||||||
return filters
|
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":
|
def _get_having_obj(self, col: str, op: str, eq: str) -> "Having":
|
||||||
cond = None
|
cond = None
|
||||||
if op == "==":
|
if op == "==":
|
||||||
|
|
|
@ -209,7 +209,7 @@ class DruidFuncTestCase(SupersetTestCase):
|
||||||
self.assertFalse(res.filter["filter"]["lowerStrict"])
|
self.assertFalse(res.filter["filter"]["lowerStrict"])
|
||||||
self.assertEqual("A", res.filter["filter"]["dimension"])
|
self.assertEqual("A", res.filter["filter"]["dimension"])
|
||||||
self.assertEqual("h", res.filter["filter"]["lower"])
|
self.assertEqual("h", res.filter["filter"]["lower"])
|
||||||
self.assertFalse(res.filter["filter"]["alphaNumeric"])
|
self.assertEqual("lexicographic", res.filter["filter"]["ordering"])
|
||||||
filtr["op"] = ">"
|
filtr["op"] = ">"
|
||||||
res = DruidDatasource.get_filters([filtr], [], column_dict)
|
res = DruidDatasource.get_filters([filtr], [], column_dict)
|
||||||
self.assertTrue(res.filter["filter"]["lowerStrict"])
|
self.assertTrue(res.filter["filter"]["lowerStrict"])
|
||||||
|
@ -220,6 +220,9 @@ class DruidFuncTestCase(SupersetTestCase):
|
||||||
filtr["op"] = "<"
|
filtr["op"] = "<"
|
||||||
res = DruidDatasource.get_filters([filtr], [], column_dict)
|
res = DruidDatasource.get_filters([filtr], [], column_dict)
|
||||||
self.assertTrue(res.filter["filter"]["upperStrict"])
|
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(
|
@unittest.skipUnless(
|
||||||
SupersetTestCase.is_module_installed("pydruid"), "pydruid not installed"
|
SupersetTestCase.is_module_installed("pydruid"), "pydruid not installed"
|
||||||
|
|
Loading…
Reference in New Issue