I've made a new Grails project with only:
TestDomain.class:
class TestDomain {
String var1
String var2
}
Bootstrap.groovy:
def init = { servletContext ->
if (TestDomain.count() == 0) {
new TestDomain(var1: "a", var2: "b").save()
new TestDomain(var1: "a", var2: "c").save()
}
}
TestController.groovy:
def index() {
def detachedCriteria = TestDomain.where { var1 == "a" }
detachedCriteria = detachedCriteria.where { var2 == "b" }
render detachedCriteria.list()
}
def indexWithMethod() {
def detachedCriteria = TestDomain.where { var1 == "a" }
detachedCriteria = addClause(detachedCriteria)
render detachedCriteria.list()
}
def addClause(detachedCriteria) {
detachedCriteria = detachedCriteria.where { var2 == "b" }
return detachedCriteria
}
Calling index returns only 1 instance (as expected), but indexWithMethod returns both instances elements. Why isn't indexWithMethod not equivalent to index?
I'm using Grails 2.4.2, but this also happens in 2.3.6.