You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by do...@apache.org on 2009/12/18 06:38:49 UTC
svn commit: r892143 - in /ofbiz/trunk/framework:
entity/src/org/ofbiz/entity/sql/EntityPlanner.java
sql/src/org/ofbiz/sql/Parser.jj sql/src/org/ofbiz/sql/Relation.java
sql/src/org/ofbiz/sql/SQLSelect.java
Author: doogie
Date: Fri Dec 18 05:38:49 2009
New Revision: 892143
URL: http://svn.apache.org/viewvc?rev=892143&view=rev
Log:
Detect duplicate relations during parse, by making use of a map. In
addition, store this map for later use.
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/Relation.java
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=892143&r1=892142&r2=892143&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:49 2009
@@ -85,7 +85,7 @@
for (FieldAll fieldAll: selectStatement.getFieldAlls()) {
dve.addAliasAll(fieldAll.getAlias(), null);
}
- for (Relation relation: selectStatement.getRelations()) {
+ for (Relation relation: selectStatement.getRelations().values()) {
dve.addRelation(relation.getType(), relation.getTitle(), relation.getEntityName(), buildKeyMaps(relation));
}
List<String> groupBy = selectStatement.getGroupBy();
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=892143&r1=892142&r2=892143&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:49 2009
@@ -278,8 +278,7 @@
Map<String, FieldDef> fieldDefs = FastMap.newInstance();
List<FieldAll> fieldAlls = FastList.newInstance();
Table table;
- List<Relation> relations = FastList.newInstance();
- Relation relation;
+ Map<String, Relation> relations = FastMap.newInstance();
Condition whereCondition = null, havingCondition = null;
int offset = -1, limit = -1;
}
@@ -289,7 +288,7 @@
( <COMMA> FieldDef(fieldDefs, fieldAlls) )*
)
<FROM> table=Table()
- ( <RELATION> relation=Relation() { relations.add(relation); } )*
+ ( <RELATION> Relation(relations) )*
( <WHERE> whereCondition=ConditionExpression() )?
( <HAVING> havingCondition=ConditionExpression() )?
( <GROUP> <BY> groupBy=FieldList() )?
@@ -299,7 +298,7 @@
{ return new SQLSelect(fieldAlls, fieldDefs, table, relations, whereCondition, havingCondition, groupBy, orderBy, offset, limit); }
}
-private Relation Relation():
+private void Relation(Map<String, Relation> relations):
{
String type = null, title = null, entityName;
List<KeyMap> keyMaps;
@@ -309,7 +308,11 @@
( <TITLE> title=NamePart() )?
<NAME> { entityName = getToken(0).image; }
keyMaps=KeyMaps("cur", "other")
- { return new Relation(type, title, entityName, keyMaps); }
+ {
+ Relation relation = new Relation(type, title, entityName, keyMaps);
+ if (relations.containsKey(relation.getName())) throw new IllegalArgumentException("Duplicate relation: " + relation);
+ relations.put(relation.getName(), relation);
+ }
}
Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Relation.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Relation.java?rev=892143&r1=892142&r2=892143&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Relation.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Relation.java Fri Dec 18 05:38:49 2009
@@ -22,6 +22,7 @@
import java.util.List;
public final class Relation extends Atom implements Iterable<KeyMap> {
+ private final String name;
private final String type;
private final String title;
private final String entityName;
@@ -32,6 +33,11 @@
this.title = title;
this.entityName = entityName;
this.keyMaps = keyMaps;
+ this.name = title == null ? entityName : title + entityName;
+ }
+
+ public String getName() {
+ return name;
}
public String getType() {
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=892143&r1=892142&r2=892143&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:49 2009
@@ -30,7 +30,7 @@
private final List<FieldAll> fieldAlls;
private final Map<String, FieldDef> fieldDefs;
private final Table table;
- private final List<Relation> relations;
+ private final Map<String, Relation> relations;
private final Condition whereCondition;
private final Condition havingCondition;
private final int offset;
@@ -38,7 +38,7 @@
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<OrderByItem> orderBy, int offset, int limit) {
+ public SQLSelect(List<FieldAll> fieldAlls, Map<String, FieldDef> fieldDefs, Table table, Map<String, 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;
@@ -63,7 +63,7 @@
return table;
}
- public List<Relation> getRelations() {
+ public Map<String, Relation> getRelations() {
return relations;
}
@@ -101,7 +101,7 @@
sb.append(" FROM ");
table.appendTo(sb);
if (!relations.isEmpty()) {
- StringUtil.appendTo(sb, relations, " ", null, ",");
+ StringUtil.appendTo(sb, relations.values(), " ", null, ",");
}
if (whereCondition != null) {
sb.append(" WHERE ");