Skip to content
Closed
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
1da1bc1
INTPYTHON-736 Convert simple $expr queries to $match queries
Jibola Aug 21, 2025
0c27833
try without deepcopy
timgraham Sep 7, 2025
22a43d4
getField support overlay
Jibola Sep 8, 2025
edc0746
added getfield tests to expression conversion
Jibola Sep 8, 2025
088ffb2
Merge branch 'main' into expr-support-getfield
Jibola Sep 8, 2025
cfd13b6
fixed lint issues and lingering class usage
Jibola Sep 8, 2025
7ab6b37
include tests for getfield on all basic ops
Jibola Sep 8, 2025
07e6ffb
fixed match and op conversion tests
Jibola Sep 8, 2025
bdc6ae0
removed mutation of getfield even when values aren't converted
Jibola Sep 10, 2025
4257582
fix assert not opmtmizable test within test_op_expressions
Jibola Sep 10, 2025
a88fbe7
removed the getfield mutation on in test
Jibola Sep 10, 2025
e62e299
fixed case where already nested fields (without getField) would not g…
Jibola Sep 10, 2025
00426a7
Merge branch 'main' into expr-support-getfield
Jibola Sep 10, 2025
8331701
fixed path name reconcilitation issue on in JSONField tests
Jibola Sep 10, 2025
77f9d34
fix InExpression convert_path_name
Jibola Sep 10, 2025
f783c8e
handle the case of None being passed
Jibola Sep 10, 2025
797da9e
make converesion explicitly change for null equality
Jibola Sep 10, 2025
b8c99ca
add null existence checks for expr conversions
Jibola Sep 10, 2025
db17c7a
add explicit : true check
Jibola Sep 10, 2025
aacdd4d
provide path in the null wrapping
Jibola Sep 10, 2025
49c34d6
add age path to InExpression
Jibola Sep 10, 2025
6a14b1d
fix lint error
Jibola Sep 10, 2025
377f9ea
Merge branch 'main' into expr-support-getfield
Jibola Sep 11, 2025
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
include tests for getfield on all basic ops
  • Loading branch information
Jibola committed Sep 8, 2025
commit 7ab6b376ed2cc12db541cca912a3b99c7184dd26
116 changes: 87 additions & 29 deletions tests/expression_converter_/test_op_expressions.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,50 @@ def _test_conversion_various_types(self, conversion_test):
with self.subTest(_type=_type, val=val):
conversion_test(val)

def _test_conversion_getfield(self, logical_op):
expr = {logical_op: [{"$getField": {"input": "$item", "field": "age"}}, 10]}
self.assertConversionEqual(
expr, {"item.age": 10} if logical_op == "eq" else {"item.age": {logical_op: 10}}
)

def _test_conversion_nested_getfield(self, logical_op):
expr = {
logical_op: [
{
"$getField": {
"input": {"$getField": {"input": "$item", "field": "shelf_life"}},
"field": "age",
}
},
10,
]
}
self.assertConversionEqual(
expr,
{"item.shel_life.age": 10}
if logical_op == "eq"
else {"item.shelf_life.age": {logical_op: 10}},
)

def _test_conversion_dual_getfield_ineligible(self, logical_op):
expr = {
logical_op: [
{
"$getField": {
"input": "$root",
"field": "age",
}
},
{
"$getField": {
"input": "$value",
"field": "age",
}
},
]
}
self.assertNotOptimizable(expr)


class ExpressionTests(ConversionTestCase):
def test_non_dict(self):
Expand Down Expand Up @@ -65,22 +109,13 @@ def test_conversion_various_array_types(self):
self._test_conversion_various_types(self._test_conversion_valid_array_type)

def test_conversion_getfield(self):
expr = {"$eq": [{"$getField": {"input": "$item", "field": "age"}}, 10]}
self.assertConversionEqual(expr, {"item.age": 10})
self._test_conversion_getfield("$eq")

def test_conversion_nested_getfield(self):
expr = {
"$eq": [
{
"$getField": {
"input": {"$getField": {"input": "$item", "field": "shelf_life"}},
"field": "age",
}
},
10,
]
}
self.assertConversionEqual(expr, {"item.shel_life.age": 10})
self._test_conversion_nested_getfield("$eq")

def test_conversion_dual_getfield_ineligible(self):
self._test_conversion_dual_getfield_ineligible("$eq")


class InTests(ConversionTestCase):
Expand All @@ -104,23 +139,10 @@ def test_conversion_various_types(self):
self._test_conversion_valid_type(val)

def test_conversion_getfield(self):
expr = {"$in": [{"$getField": {"input": "$item", "field": "age"}}, [10]]}
expected = {"item.age": {"$in": [10]}}
self.assertConversionEqual(expr, expected)
self._test_conversion_getfield("$in")

def test_conversion_nested_getfield(self):
expr = {
"$in": [
{
"$getField": {
"input": {"$getField": {"input": "$item", "field": "shelf_life"}},
"field": "age",
}
},
10,
]
}
self.assertConversionEqual(expr, {"item.shelf_life.age": {"$in": [10]}})
self._test_conversion_nested_getfield("$in")

def test_conversion_dual_getfield_ineligible(self):
expr = {
Expand Down Expand Up @@ -235,6 +257,15 @@ def _test_conversion_valid_type(self, _type):
def test_conversion_various_types(self):
self._test_conversion_various_types(self._test_conversion_valid_type)

def test_conversion_getfield(self):
self._test_conversion_getfield("$gt")

def test_conversion_nested_getfield(self):
self._test_conversion_nested_getfield("$gt")

def test_conversion_dual_getfield_ineligible(self):
self._test_conversion_dual_getfield_ineligible("$gt")


class GteTests(ConversionTestCase):
def test_conversion(self):
Expand All @@ -258,6 +289,15 @@ def _test_conversion_valid_type(self, _type):
def test_conversion_various_types(self):
self._test_conversion_various_types(self._test_conversion_valid_type)

def test_conversion_getfield(self):
self._test_conversion_getfield("$gte")

def test_conversion_nested_getfield(self):
self._test_conversion_nested_getfield("$gte")

def test_conversion_dual_getfield_ineligible(self):
self._test_conversion_dual_getfield_ineligible("$gte")


class LtTests(ConversionTestCase):
def test_conversion(self):
Expand All @@ -275,6 +315,15 @@ def _test_conversion_valid_type(self, _type):
def test_conversion_various_types(self):
self._test_conversion_various_types(self._test_conversion_valid_type)

def test_conversion_getfield(self):
self._test_conversion_getfield("$lt")

def test_conversion_nested_getfield(self):
self._test_conversion_nested_getfield("$lt")

def test_conversion_dual_getfield_ineligible(self):
self._test_conversion_dual_getfield_ineligible("$lt")


class LteTests(ConversionTestCase):
def test_conversion(self):
Expand All @@ -291,3 +340,12 @@ def _test_conversion_valid_type(self, _type):

def test_conversion_various_types(self):
self._test_conversion_various_types(self._test_conversion_valid_type)

def test_conversion_getfield(self):
self._test_conversion_getfield("$lte")

def test_conversion_nested_getfield(self):
self._test_conversion_nested_getfield("$lte")

def test_conversion_dual_getfield_ineligible(self):
self._test_conversion_dual_getfield_ineligible("$lte")
Loading