Skip to content

Commit a29e7ad

Browse files
committed
fix for failing tests (rolled back 4199)
1 parent 4c3aaeb commit a29e7ad

File tree

2 files changed

+16
-72
lines changed

2 files changed

+16
-72
lines changed

src/persistence/grails/orm/HibernateCriteriaBuilder.java

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -115,23 +115,21 @@ public class HibernateCriteriaBuilder extends GroovyObjectSupport {
115115
private MetaClass criteriaMetaClass;
116116

117117
private boolean uniqueResult = false;
118-
private List<LogicalExpression> logicalExpressionStack = new ArrayList<LogicalExpression>();
119-
private List<String> associationStack = new ArrayList<String>();
118+
private Stack logicalExpressionStack = new Stack();
119+
private Stack associationStack = new Stack();
120120
private boolean participate;
121121
private boolean scroll;
122122
private boolean count;
123123
private ProjectionList projectionList;
124124
private BeanWrapper targetBean;
125125
private List<String> aliasStack = new ArrayList<String>();
126-
private List<Criteria> aliasInstanceStack = new ArrayList<Criteria>();
127-
128126
private Map<String, String> aliasMap = new HashMap<String, String>();
129127
private static final String ALIAS = "_alias";
130128
private ResultTransformer resultTransformer;
131129
private int aliasCount;
132-
private boolean paginationEnabledList = false;
133-
private ArrayList<Order> orderEntries;
134130

131+
private boolean paginationEnabledList = false;
132+
private ArrayList<Order> orderEntries;
135133

136134
public HibernateCriteriaBuilder(Class targetClass, SessionFactory sessionFactory) {
137135
super();
@@ -694,9 +692,8 @@ public Object order(String propertyName) {
694692
if (this.paginationEnabledList) {
695693
orderEntries.add(o);
696694
} else {
697-
this.criteria.addOrder(o);
695+
this.criteria.addOrder(o);
698696
}
699-
700697
return o;
701698
}
702699

@@ -724,7 +721,6 @@ public Object order(String propertyName, String direction) {
724721
} else {
725722
this.criteria.addOrder(o);
726723
}
727-
728724
return o;
729725
}
730726
/**
@@ -890,14 +886,12 @@ else if (name.equals(LIST_DISTINCT_CALL)) {
890886
this.resultTransformer = CriteriaSpecification.DISTINCT_ROOT_ENTITY;
891887
}
892888

893-
894889
createCriteriaInstance();
895890

896891
// Check for pagination params
897892
if(name.equals(LIST_CALL) && args.length == 2) {
898-
paginationEnabledList = true;
899-
orderEntries = new ArrayList<Order>();
900-
893+
paginationEnabledList = true;
894+
orderEntries = new ArrayList<Order>();
901895
invokeClosureNode(args[1]);
902896
} else {
903897
invokeClosureNode(args[0]);
@@ -930,7 +924,7 @@ else if(count) {
930924
this.criteria.setProjection(null);
931925
for(Iterator<Order> it = orderEntries.iterator();it.hasNext();){
932926
this.criteria.addOrder(it.next());
933-
}
927+
}
934928
this.criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
935929
GrailsHibernateUtil.populateArgumentsForCriteria(targetClass, this.criteria, (Map)args[0]);
936930
PagedResultList pagedRes = new PagedResultList(this.criteria.list());
@@ -979,7 +973,7 @@ else if(args.length == 1 && args[0] instanceof Closure) {
979973
this.logicalExpressionStack.add(new LogicalExpression(name));
980974
invokeClosureNode(args[0]);
981975

982-
LogicalExpression logicalExpression = logicalExpressionStack.get(logicalExpressionStack.size()-1);
976+
LogicalExpression logicalExpression = (LogicalExpression) logicalExpressionStack.pop();
983977
addToCriteria(logicalExpression.toCriterion());
984978

985979
return name;
@@ -1007,21 +1001,18 @@ else if(targetBean.isReadableProperty(name.toString())) {
10071001
targetClass = sessionFactory.getClassMetadata(otherSideEntityName).getMappedClass(EntityMode.POJO);
10081002
BeanWrapper oldTargetBean = targetBean;
10091003
targetBean = new BeanWrapperImpl(BeanUtils.instantiateClass(targetClass));
1010-
associationStack.add(name.toString());
1004+
associationStack.push(name.toString());
10111005
final String associationPath = getAssociationPath();
10121006
createAliasIfNeccessary(name, associationPath);
10131007
// the criteria within an association node are grouped with an implicit AND
1014-
logicalExpressionStack.add(new LogicalExpression(AND));
1008+
logicalExpressionStack.push(new LogicalExpression(AND));
10151009
invokeClosureNode(args[0]);
10161010
aliasStack.remove(aliasStack.size() - 1);
1017-
if(!aliasInstanceStack.isEmpty()) {
1018-
aliasInstanceStack.remove(aliasInstanceStack.size() - 1);
1019-
}
1020-
LogicalExpression logicalExpression = (LogicalExpression) logicalExpressionStack.remove(logicalExpressionStack.size()-1);
1011+
LogicalExpression logicalExpression = (LogicalExpression) logicalExpressionStack.pop();
10211012
if (!logicalExpression.args.isEmpty()) {
10221013
addToCriteria(logicalExpression.toCriterion());
10231014
}
1024-
associationStack.remove(associationStack.size()-1);
1015+
associationStack.pop();
10251016
targetClass = oldTargetClass;
10261017
targetBean = oldTargetBean;
10271018
return name;
@@ -1035,7 +1026,7 @@ else if(args.length == 1 && args[0] != null) {
10351026
Object value = args[0];
10361027
Criterion c = null;
10371028
if(name.equals(ID_EQUALS)) {
1038-
return eq("id", value);
1029+
c = Restrictions.idEq(value);
10391030
}
10401031
else {
10411032

@@ -1072,16 +1063,6 @@ else if(name.equals( IS_NOT_EMPTY )) {
10721063
throw new MissingMethodException(name, getClass(), args) ;
10731064
}
10741065

1075-
private void addToCurrentOrAliasedCriteria(Criterion criterion) {
1076-
if(!aliasInstanceStack.isEmpty()) {
1077-
Criteria c = aliasInstanceStack.get(aliasInstanceStack.size()-1);
1078-
c.add(criterion);
1079-
}
1080-
else {
1081-
this.criteria.add(criterion);
1082-
}
1083-
}
1084-
10851066

10861067
private void createAliasIfNeccessary(String associationName, String associationPath) {
10871068
String newAlias;
@@ -1092,7 +1073,7 @@ private void createAliasIfNeccessary(String associationName, String associationP
10921073
aliasCount++;
10931074
newAlias = associationName + ALIAS + aliasCount;
10941075
aliasMap.put(associationPath, newAlias);
1095-
this.aliasInstanceStack.add(this.criteria.createAlias(associationPath, newAlias, CriteriaSpecification.LEFT_JOIN));
1076+
this.criteria.createAlias(associationPath, newAlias, CriteriaSpecification.LEFT_JOIN);
10961077
}
10971078
this.aliasStack.add(newAlias);
10981079
}
@@ -1166,7 +1147,7 @@ private void closeSessionFollowingException() {
11661147
*/
11671148
private Criterion addToCriteria(Criterion c) {
11681149
if (!logicalExpressionStack.isEmpty()) {
1169-
logicalExpressionStack.get(logicalExpressionStack.size()-1).args.add(c);
1150+
((LogicalExpression) logicalExpressionStack.peek()).args.add(c);
11701151
}
11711152
else {
11721153
this.criteria.add(c);

test/groovy/org/codehaus/groovy/grails/orm/hibernate/CriteriaBuilderTests.groovy

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -42,43 +42,6 @@ class CriteriaBuilderAuthor {
4242
}
4343

4444

45-
void testIdEq() {
46-
def authorClass = ga.getDomainClass("CriteriaBuilderAuthor").clazz
47-
def bookClass = ga.getDomainClass("CriteriaBuilderBook").clazz
48-
49-
assert authorClass.newInstance(name:"Stephen King")
50-
.addToBooks(title:"The Shining")
51-
.addToBooks(title:"The Stand")
52-
.addToBooks(title:"Rose Madder")
53-
.save(flush:true)
54-
55-
assert authorClass.newInstance(name:"James Patterson")
56-
.addToBooks(title:"Along Came a Spider")
57-
.addToBooks(title:"A Time to Kill")
58-
.addToBooks(title:"Killing Me Softly")
59-
.addToBooks(title:"The Quickie")
60-
.save(flush:true)
61-
62-
63-
64-
65-
session.clear()
66-
def book = bookClass.findByTitle("The Quickie")
67-
68-
assertNotNull "should have found book", book
69-
70-
def authors = authorClass.withCriteria {
71-
books {
72-
idEq book.id
73-
}
74-
}
75-
76-
assertNotNull "should have returned a list of authors", authors
77-
78-
assertEquals 1, authors.size()
79-
assertEquals "James Patterson", authors[0].name
80-
}
81-
8245
void testSizeCriterion() {
8346
def authorClass = ga.getDomainClass("CriteriaBuilderAuthor").clazz
8447

0 commit comments

Comments
 (0)