Author: doogie
Date: Fri Nov 13 04:08:59 2009 New Revision: 835731 URL: http://svn.apache.org/viewvc?rev=835731&view=rev Log: Implement ORDER BY and GROUP BY. Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/Parser.jjt ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/SQLSelect.java Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/Parser.jjt URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/Parser.jjt?rev=835731&r1=835730&r2=835731&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/Parser.jjt (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/Parser.jjt Fri Nov 13 04:08:59 2009 @@ -38,8 +38,11 @@ import org.ofbiz.entity.condition.EntityConditionValue; import org.ofbiz.entity.condition.EntityFieldValue; import org.ofbiz.entity.condition.EntityOperator; +import org.ofbiz.entity.condition.OrderByItem; +import org.ofbiz.entity.condition.OrderByList; import org.ofbiz.entity.model.DynamicViewEntity; import org.ofbiz.entity.model.ModelKeyMap; +import org.ofbiz.entity.model.ModelViewEntity.ModelAlias; public class Parser { } @@ -85,6 +88,8 @@ | <SEMI: ";"> | <STAR: "*"> | <COMMA: ","> +| <DESC: "DESC"> +| <ASC: "ASC"> | <START_DQUOTE: "\""> { pushState(IN_DQUOTE); } | <START_SQUOTE: "'"> { pushState(IN_SQUOTE); } | <INTEGER: @@ -144,14 +149,16 @@ int i; DynamicViewEntity dve = new DynamicViewEntity(); jjtThis.setDynamicViewEntity(dve); + List<String> fieldList; + List<String> orderBy; } { <SELECT> FieldDefs(dve) <FROM> Table(dve) ( <WHERE> condition=ConditionExpression() { jjtThis.setWhereCondition(condition); } )? ( <HAVING> condition=ConditionExpression() { jjtThis.setHavingCondition(condition); } )? - ( <GROUP> <BY> FieldList() )? - ( <ORDER> <BY> FieldList() )? + ( <GROUP> <BY> fieldList=FieldList() { dve.setGroupBy(fieldList); } )? + ( <ORDER> <BY> orderBy=OrderByList() { jjtThis.setOrderBy(orderBy); } )? ( <OFFSET> i=Integer() { jjtThis.setOffset(i); } )? ( <LIMIT> i=Integer() { jjtThis.setLimit(i); } )? <SEMI> @@ -251,6 +258,7 @@ <LEFT> <JOIN> { return Boolean.TRUE; } | <JOIN> { return Boolean.FALSE; } } + private void FieldDefs(DynamicViewEntity dve) #void: {} { @@ -315,21 +323,50 @@ { return sb.toString(); } } -private void FieldList(): -{} +private List<String> FieldList() #void: { - FieldUse() ( <COMMA> FieldUse() )* + List<String> list = FastList.newInstance(); + String n; +} +{ + n=NamePart() { list.add(n); } + ( <COMMA> n=NamePart() { list.add(n); } )* + { return list; } } -private List<String> FieldUse() #void: +private EntityConditionValue FieldUse() #void: { - List<String> list = FastList.newInstance(); - String s; + String tableAlias = null, fieldName, s; } { - s=NamePart() { list.add(s); } - ( <PERIOD> s=NamePart() { list.add(s); } )? - { return list; } + s=NamePart() { fieldName = s; } + ( <PERIOD> s=NamePart() { tableAlias = fieldName; fieldName = s; } )? + { return EntityFieldValue.makeFieldValue(fieldName, tableAlias, null, null); } +} + +private List<String> OrderByList() #void: +{ + List<String> orderBy = FastList.newInstance(); + String obi; +} +{ + obi=OrderByItem() { orderBy.add(obi); } + ( <COMMA> obi=OrderByItem() { orderBy.add(obi); } )* + { return orderBy; } +} + +private String OrderByItem() #void: +{ + StringBuilder sb = new StringBuilder(); + String n; +} +{ + n=NamePart() { sb.append(n); } + ( + <DESC> { sb.append(" DESC"); } + | <ASC> { sb.append(" ASC"); } + )? + { return sb.toString(); } } private Integer Integer() #void: @@ -351,15 +388,10 @@ { EntityConditionValue ecv; String s; - List<String> fieldUse; int i; } { - fieldUse=FieldUse() { - if (fieldUse.size() == 1) return EntityFieldValue.makeFieldValue(fieldUse.get(0)); - if (fieldUse.size() == 2) return EntityFieldValue.makeFieldValue(fieldUse.get(1), fieldUse.get(1), null, null); - return null; -} + ecv=FieldUse() { return ecv; } | i=Integer() { return i; } | s=SQuoted() { return s; } } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/SQLSelect.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/SQLSelect.java?rev=835731&r1=835730&r2=835731&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/SQLSelect.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/SQLSelect.java Fri Nov 13 04:08:59 2009 @@ -18,10 +18,17 @@ */ package org.ofbiz.entity.sql; +import java.util.List; +import java.util.Map; + +import javolution.util.FastList; +import javolution.util.FastMap; + import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.condition.EntityCondition; import org.ofbiz.entity.model.DynamicViewEntity; +import org.ofbiz.entity.model.ModelKeyMap; import org.ofbiz.entity.util.EntityListIterator; public class SQLSelect extends SimpleNode { @@ -30,6 +37,7 @@ private EntityCondition havingCondition; private int offset = -1; private int limit = -1; + private List<String> orderBy; public SQLSelect(int id) { super(id); @@ -46,7 +54,7 @@ } public EntityListIterator getEntityListIterator(Delegator delegator) throws GenericEntityException { - return delegator.findListIteratorByCondition(dve, whereCondition, havingCondition, null, null, null); + return delegator.findListIteratorByCondition(dve, whereCondition, havingCondition, null, orderBy, null); } void setDynamicViewEntity(DynamicViewEntity dve) { @@ -73,6 +81,14 @@ return havingCondition; } + void setOrderBy(List<String> orderBy) { + this.orderBy = orderBy; + } + + public List<String> getOrderBy() { + return orderBy; + } + void setOffset(int offset) { this.offset = offset; } |
Free forum by Nabble | Edit this page |