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