The idea is to make the usecase of object filtering like #42 more efficient by implementing an engine that can split a predicate into parts that can be pushed down to act as filters for specific attributes.
A filter like root.name = 'abc' can be split into {"root": "name = 'abc'"}.
A filter like root.collection1.name = 'abc' could be split into {"root": "root.collection1 is not empty", "root.collection1": "name = 'abc'"}.
Maybe it makes sense to also allow empty collections i.e. apply left join semantics to such filters.
The idea is to make the usecase of object filtering like #42 more efficient by implementing an engine that can split a predicate into parts that can be pushed down to act as filters for specific attributes.
A filter like
root.name = 'abc'can be split into{"root": "name = 'abc'"}.A filter like
root.collection1.name = 'abc'could be split into{"root": "root.collection1 is not empty", "root.collection1": "name = 'abc'"}.Maybe it makes sense to also allow empty collections i.e. apply left join semantics to such filters.