It's not type safe, so if you change a property name it's not going to be picked up at compile time, so you'd better have tests in place for every synthesised function. (Of course, most implementations are made in dynamically typed host languages, which have this problem with every line of code.)
It's also just a limited DSL that has none of the capabilities of the host language, and can't be used to express e.g. complex queries.