diff --git a/ee/clickhouse/queries/test/test_cohort_query.py b/ee/clickhouse/queries/test/test_cohort_query.py index 414b72312f74..8b1c05ff27c4 100644 --- a/ee/clickhouse/queries/test/test_cohort_query.py +++ b/ee/clickhouse/queries/test/test_cohort_query.py @@ -1398,6 +1398,40 @@ def test_person(self): assert [p1.uuid] == [r[0] for r in res] + @also_test_with_materialized_columns(person_properties=["$some_prop"]) + @snapshot_clickhouse_queries + def test_is_set_operator_excludes_null_values_for_materialized_columns(self): + p1 = _create_person( + team_id=self.team.pk, + distinct_ids=["p1"], + properties={"$some_prop": "a_value"}, + ) + _create_person( + team_id=self.team.pk, + distinct_ids=["p2"], + properties={}, + ) + filter = Filter( + data={ + "properties": { + "type": "AND", + "values": [ + { + "key": "$some_prop", + "type": "person", + "operator": "is_set", + "value": "is_set", + }, + ], + } + } + ) + flush_persons_and_events() + + res, q, params = execute(filter, self.team) + + assert [p1.uuid] == [r[0] for r in res] + def test_earliest_date_clause(self): filter = Filter( data={ diff --git a/posthog/models/property/util.py b/posthog/models/property/util.py index b95bfca47037..af078be15159 100644 --- a/posthog/models/property/util.py +++ b/posthog/models/property/util.py @@ -491,7 +491,7 @@ def prop_filter_json_extract( } if is_denormalized: return ( - " {property_operator} notEmpty({left})".format(left=property_expr, property_operator=property_operator), + " {property_operator} isNotNull({left})".format(left=property_expr, property_operator=property_operator), params, ) return ( @@ -510,7 +510,7 @@ def prop_filter_json_extract( } if is_denormalized: return ( - " {property_operator} empty({left})".format(left=property_expr, property_operator=property_operator), + " {property_operator} isNull({left})".format(left=property_expr, property_operator=property_operator), params, ) return (