BaseTen supports most NSPredicate and NSExpression types. These are the ones that are not supported.

NSAggregateExpressionType

Allowed in special cases like with BETWEEN predicate operator. Core Data doesn't support aggregate expressions as of Mac OS X 10.5, so perhaps we shouldn't provide generalized support either.

NSFunctionExpressionType

Used with either predifined function names or custom selectors. Core Data supports the former. The predefined functions all have an effect on a single row. We could rewrite at least some of them as SQL functions if they are needed. Obviously we can't support custom selectors unless we load object code into the database server. However, we might be able to use this to invoke SQL functions.

NSUnionSetExpressionType, NSIntersectsSetExpressionType, NSMinusSetExpressionType

These are used with NSSets and are not supported by Core Data. We could use them with PostgreSQL arrays or wait until Core Data supports them and then mimic its behaviour.

NSSubqueryExpressionType

When fetching related objects, Apple frameworks return collections of objects instead of creating a Cartesian product restricted by the join condition. This is used to check if an object in the collection matches multiple conditions where a simple predicate like the following would fail:

collection.foo CONTAINS "foo" && collection.bar CONTAINS "bar"

This might return false positives. There could be two objects in the collection, one of which has foo set to "foo" and the other has bar set to "bar". Instead we should write:

SUBQUERY(collection, $x, $x.foo == "foo" && $x.bar == "bar").count != 0

NSCustomSelectorOperatorType

Used to compare objects with a custom selector. Obviously we can't implement exactly this easily. However, we don't have means to compare using custom operators like @@ or IS DISTINCT FROM, so we could allow passing a selector constant and replace it with one of those operators.

NSDiacriticInsensitivePredicateOption

We could probably do something with Postgres's text search configurations to allow this.