svn commit: r835731 - in /ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql: Parser.jjt SQLSelect.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r835731 - in /ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql: Parser.jjt SQLSelect.java

doogie-3
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;
     }