@@ -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 );
0 commit comments