svn commit: r892142 - in /ofbiz/trunk/framework: entity/src/org/ofbiz/entity/sql/EntityPlanner.java sql/src/org/ofbiz/sql/OrderByItem.java sql/src/org/ofbiz/sql/Parser.jj sql/src/org/ofbiz/sql/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: r892142 - in /ofbiz/trunk/framework: entity/src/org/ofbiz/entity/sql/EntityPlanner.java sql/src/org/ofbiz/sql/OrderByItem.java sql/src/org/ofbiz/sql/Parser.jj sql/src/org/ofbiz/sql/SQLSelect.java

doogie-3
Author: doogie
Date: Fri Dec 18 05:38:09 2009
New Revision: 892142

URL: http://svn.apache.org/viewvc?rev=892142&view=rev
Log:
OrderBy is now a list of OrderByItem, instead of String, and support
upper and lower functions.

Added:
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/OrderByItem.java
Modified:
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/EntityPlanner.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Parser.jj
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/SQLSelect.java

Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/EntityPlanner.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/EntityPlanner.java?rev=892142&r1=892141&r2=892142&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/EntityPlanner.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/EntityPlanner.java Fri Dec 18 05:38:09 2009
@@ -49,6 +49,7 @@
 import org.ofbiz.sql.KeyMap;
 import org.ofbiz.sql.MathValue;
 import org.ofbiz.sql.NumberValue;
+import org.ofbiz.sql.OrderByItem;
 import org.ofbiz.sql.Planner;
 import org.ofbiz.sql.MathValue;
 import org.ofbiz.sql.Relation;
@@ -94,7 +95,16 @@
         for (FieldDef fieldDef: selectStatement.getFieldDefs()) {
             addFieldDef(dve, groupBy, fieldDef.getAlias(), fieldDef);
         }
-        return new EntitySelectPlan(dve, plan(selectStatement.getWhereCondition()), plan(selectStatement.getHavingCondition()), selectStatement.getOrderBy());
+        List<String> orderBy;
+        if (selectStatement.getOrderBy() == null) {
+            orderBy = null;
+        } else {
+            orderBy = FastList.newInstance();
+            for (OrderByItem orderByItem: selectStatement.getOrderBy()) {
+                orderBy.add(orderByItem.toString());
+            }
+        }
+        return new EntitySelectPlan(dve, plan(selectStatement.getWhereCondition()), plan(selectStatement.getHavingCondition()), orderBy);
     }
 
     public EntityUpdatePlan planUpdate(SQLUpdate updateStatement) {

Added: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/OrderByItem.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/OrderByItem.java?rev=892142&view=auto
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/OrderByItem.java (added)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/OrderByItem.java Fri Dec 18 05:38:09 2009
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.ofbiz.sql;
+
+public final class OrderByItem extends Atom {
+    enum Order { DEFAULT, ASCENDING, DESCENDING };
+
+    private final Order order;
+    private final String functionName;
+    private final String fieldName;
+
+    public OrderByItem(Order order, String functionName, String fieldName) {
+        this.order = order;
+        this.functionName = functionName;
+        this.fieldName = fieldName;
+    }
+
+    public final Order getOrder() {
+        return order;
+    }
+
+    public final String getFunctionName() {
+        return functionName;
+    }
+
+    public final String getFieldName() {
+        return fieldName;
+    }
+
+    public StringBuilder appendTo(StringBuilder sb) {
+        if (functionName != null) sb.append(functionName).append('(');
+        sb.append(fieldName);
+        if (functionName != null) sb.append(')');
+        switch (order) {
+            case ASCENDING:
+                sb.append(" ASC");
+                break;
+            case DESCENDING:
+                sb.append(" DESC");
+                break;
+        }
+        return sb;
+    }
+}

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Parser.jj
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Parser.jj?rev=892142&r1=892141&r2=892142&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Parser.jj (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Parser.jj Fri Dec 18 05:38:09 2009
@@ -107,6 +107,8 @@
 | <INSERT: "INSERT">
 | <RELATION: "RELATION">
 | <EXCLUDE: "EXCLUDE">
+| <UPPER: "UPPER">
+| <LOWER: "LOWER">
 | <TYPE: "TYPE">
 | <TITLE: "TITLE">
 | <SET: "SET">
@@ -114,6 +116,8 @@
 | <SEMI: ";">
 | <STAR: "*">
 | <COMMA: ",">
+| <PLUS: "+">
+| <MINUS: "-">
 | <DESC: "DESC">
 | <ASC: "ASC">
 | <EQUALS: "=">
@@ -269,7 +273,8 @@
 private SQLSelect Select():
 {
  Integer i;
- List<String> orderBy = null, groupBy = null;
+ List<OrderByItem> orderBy = null;
+ List<String> groupBy = null;
  Map<String, FieldDef> fieldDefs = FastMap.newInstance();
  List<FieldAll> fieldAlls = FastList.newInstance();
  Table table;
@@ -644,10 +649,10 @@
  }
 }
 
-private List<String> OrderByList():
+private List<OrderByItem> OrderByList():
 {
- List<String> orderBy = FastList.newInstance();
- String obi;
+ List<OrderByItem> orderBy = FastList.newInstance();
+ OrderByItem obi;
 }
 {
  obi=OrderByItem() { orderBy.add(obi); }
@@ -655,18 +660,27 @@
  { return orderBy; }
 }
 
-private String OrderByItem():
+private OrderByItem OrderByItem():
 {
- StringBuilder sb = new StringBuilder();
- String n;
+ String functionName = null, fieldName = null;
+ boolean descending = false, orderingSet = false;
+ OrderByItem.Order ordering = OrderByItem.Order.DEFAULT;
 }
 {
- n=NamePart() { sb.append(n); }
  (
- <DESC> { sb.append(" DESC"); }
- | <ASC> { sb.append(" ASC"); }
+ <PLUS> { ordering = OrderByItem.Order.ASCENDING; }
+ | <MINUS> { ordering = OrderByItem.Order.DESCENDING; }
  )?
- { return sb.toString(); }
+ (
+ ( <UPPER> | <LOWER> ) { functionName = getToken(0).image; }
+ <OPEN_PAREN> fieldName=NamePart() <CLOSE_PAREN>
+ | fieldName=NamePart()
+ )
+ LOOKAHEAD({!orderingSet}) (
+ <DESC> { ordering = OrderByItem.Order.DESCENDING; }
+ | <ASC> { ordering = OrderByItem.Order.ASCENDING; }
+ )?
+ { return new OrderByItem(ordering, functionName, fieldName); }
 }
 
 private Integer Integer():

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/SQLSelect.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/SQLSelect.java?rev=892142&r1=892141&r2=892142&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/SQLSelect.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/SQLSelect.java Fri Dec 18 05:38:09 2009
@@ -35,10 +35,10 @@
     private final Condition havingCondition;
     private final int offset;
     private final int limit;
-    private final List<String> orderBy;
+    private final List<OrderByItem> orderBy;
     private final List<String> groupBy;
 
-    public SQLSelect(List<FieldAll> fieldAlls, Map<String, FieldDef> fieldDefs, Table table, List<Relation> relations, Condition whereCondition, Condition havingCondition, List<String> groupBy, List<String> orderBy, int offset, int limit) {
+    public SQLSelect(List<FieldAll> fieldAlls, Map<String, FieldDef> fieldDefs, Table table, List<Relation> relations, Condition whereCondition, Condition havingCondition, List<String> groupBy, List<OrderByItem> orderBy, int offset, int limit) {
         this.fieldAlls = fieldAlls;
         this.fieldDefs = fieldDefs;
         this.table = table;
@@ -79,7 +79,7 @@
         return groupBy;
     }
 
-    public List<String> getOrderBy() {
+    public List<OrderByItem> getOrderBy() {
         return orderBy;
     }