You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/04/09 11:55:04 UTC
svn commit: r526696 [1/3] - in
/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src:
main/java/org/apache/cayenne/access/jdbc/ main/java/org/apache/cayenne/ejbql/
main/java/org/apache/cayenne/ejbql/parser/
main/jjtree/org/apache/cayenne/ejbql/ ...
Author: aadamchik
Date: Mon Apr 9 02:54:53 2007
New Revision: 526696
URL: http://svn.apache.org/viewvc?view=rev&rev=526696
Log:
CAY-452: EJB QL Cayenne Query
* first cut of join support
* refactored ejbql compilation pipeline
Added:
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLJoin.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/ejbql/parser/
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/ejbql/parser/EJBQLPathTest.java
Removed:
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/AbstractParser.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLBaseVisitor.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLCompiledExpression.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLDelegatingVisitor.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLExpressionVisitor.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/CompiledExpression.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAbs.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAbstractSchemaName.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAdd.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAggregate.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAll.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAnd.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAny.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAscending.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAverage.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLBetween.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLBooleanLiteral.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLClassName.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConcat.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructor.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructorParameter.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructorParameters.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCount.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentDate.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentTime.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentTimestamp.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLDecimalLiteral.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLDelete.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLDescending.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLDistinct.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLDistinctPath.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLDivide.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLEquals.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLEscapeCharacter.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLExists.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLFrom.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLFromItem.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLGreaterOrEqual.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLGreaterThan.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLGroupBy.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLHaving.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLIdentificationVariable.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLIdentifier.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLIn.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLInnerFetchJoin.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLInnerJoin.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLIntegerLiteral.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLIsEmpty.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLIsNull.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLLength.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLLessOrEqual.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLLessThan.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLLike.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLLocate.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLLower.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLMax.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLMemberOf.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLMin.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLMod.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLMultiply.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLNamedInputParameter.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLNegative.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLNot.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLNotEquals.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLOr.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLOrderBy.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLOrderByItem.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLOuterFetchJoin.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLOuterJoin.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLPath.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLPatternValue.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLPositionalInputParameter.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLSelect.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLSelectClause.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLSelectExpression.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLSelectExpressions.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLSize.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLSqrt.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLStringLiteral.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLSubselect.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLSubstring.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLSubtract.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLSum.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLTok.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLTrim.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLTrimBoth.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLTrimCharacter.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLTrimLeading.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLTrimTrailing.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLUpdate.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLUpdateField.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLUpdateItem.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLUpdateValue.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLUpper.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLWhere.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLJoinsTest.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLTranslatorTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java Mon Apr 9 02:54:53 2007
@@ -23,6 +23,7 @@
import org.apache.cayenne.ejbql.EJBQLDelegatingVisitor;
import org.apache.cayenne.ejbql.EJBQLException;
import org.apache.cayenne.ejbql.EJBQLExpression;
+import org.apache.cayenne.ejbql.parser.EJBQLPath;
/**
* @since 3.0
@@ -183,7 +184,7 @@
}
}
- public boolean visitPath(EJBQLExpression expression, int finishedChildIndex) {
+ public boolean visitPath(EJBQLPath expression, int finishedChildIndex) {
if (finishedChildIndex < 0) {
setDelegate(new EJBQLPathTranslator(parent));
return true;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLFromTranslator.java Mon Apr 9 02:54:53 2007
@@ -18,32 +18,121 @@
****************************************************************/
package org.apache.cayenne.access.jdbc;
+import java.util.Iterator;
+
import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
-import org.apache.cayenne.ejbql.EJBQLExpression;
+import org.apache.cayenne.ejbql.EJBQLException;
+import org.apache.cayenne.ejbql.parser.EJBQLFromItem;
+import org.apache.cayenne.ejbql.parser.EJBQLJoin;
+import org.apache.cayenne.map.DbJoin;
+import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.reflect.ClassDescriptor;
public class EJBQLFromTranslator extends EJBQLBaseVisitor {
private EJBQLSelectTranslator parent;
+ private String lastTableAlias;
public EJBQLFromTranslator(EJBQLSelectTranslator parent) {
- super(false);
+ super(true);
this.parent = parent;
}
- public boolean visitFromItem(EJBQLExpression expression) {
+ public boolean visitFromItem(EJBQLFromItem expression, int finishedChildIndex) {
+ if (finishedChildIndex < 0) {
+ if (lastTableAlias != null) {
+ parent.getParent().getBuffer().append(',');
+ }
+
+ lastTableAlias = appendTable(expression.getId());
+ }
return true;
}
- public boolean visitAbstractSchemaName(EJBQLExpression expression) {
- return true;
+ public boolean visitInnerFetchJoin(EJBQLJoin join, int finishedChildIndex) {
+ // TODO: andrus, 4/9/2007 - support for prefetching
+ return visitInnerJoin(join, finishedChildIndex);
}
- public boolean visitIdentifier(EJBQLExpression expression) {
- parent.appendRootIdentifier(expression.getText());
+ public boolean visitInnerJoin(EJBQLJoin join, int finishedChildIndex) {
+ if (finishedChildIndex < 0) {
+ appendJoin(join, "INNER JOIN");
+ }
return true;
}
- public boolean visitIdentificationVariable(EJBQLExpression expression) {
+ public boolean visitOuterFetchJoin(EJBQLJoin join, int finishedChildIndex) {
+ // TODO: andrus, 4/9/2007 - support for prefetching
+ return visitOuterJoin(join, finishedChildIndex);
+ }
+
+ public boolean visitOuterJoin(EJBQLJoin join, int finishedChildIndex) {
+ if (finishedChildIndex < 0) {
+ appendJoin(join, "LEFT OUTER JOIN");
+ }
return true;
+ }
+
+ private void appendJoin(EJBQLJoin join, String semantics) {
+
+ String id = join.getId();
+
+ if (lastTableAlias == null) {
+ throw new EJBQLException("No source table for join: " + id);
+ }
+
+ String sourceAlias = lastTableAlias;
+ StringBuffer buffer = parent.getParent().getBuffer();
+
+ buffer.append(" ").append(semantics);
+ String targetAlias = appendTable(id);
+ buffer.append(" ON (");
+
+ ObjRelationship incoming = parent
+ .getParent()
+ .getCompiledExpression()
+ .getIncomingRelationship(id);
+ if (incoming == null) {
+ throw new EJBQLException("No join configured for id " + id);
+ }
+
+ // TODO: andrus, 4/8/2007 - support for flattened relationships
+ DbRelationship incomingDB = (DbRelationship) incoming.getDbRelationships().get(0);
+
+ Iterator it = incomingDB.getJoins().iterator();
+ if (it.hasNext()) {
+ DbJoin dbJoin = (DbJoin) it.next();
+ buffer.append(sourceAlias).append('.').append(dbJoin.getSourceName()).append(
+ " = ").append(targetAlias).append('.').append(dbJoin.getTargetName());
+ }
+
+ while (it.hasNext()) {
+ buffer.append(", ");
+ DbJoin dbJoin = (DbJoin) it.next();
+ buffer.append(sourceAlias).append('.').append(dbJoin.getSourceName()).append(
+ " = ").append(targetAlias).append('.').append(dbJoin.getTargetName());
+ }
+
+ buffer.append(")");
+ this.lastTableAlias = targetAlias;
+ }
+
+ private String appendTable(String id) {
+ ClassDescriptor descriptor = parent
+ .getParent()
+ .getCompiledExpression()
+ .getEntityDescriptor(id);
+
+ String tableName = descriptor.getEntity().getDbEntity().getFullyQualifiedName();
+ String alias = parent.getParent().createAlias(id, tableName);
+ parent
+ .getParent()
+ .getBuffer()
+ .append(' ')
+ .append(tableName)
+ .append(" AS ")
+ .append(alias);
+ return alias;
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java Mon Apr 9 02:54:53 2007
@@ -21,6 +21,7 @@
import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
import org.apache.cayenne.ejbql.EJBQLException;
import org.apache.cayenne.ejbql.EJBQLExpression;
+import org.apache.cayenne.ejbql.parser.EJBQLPath;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
@@ -39,7 +40,7 @@
this.parent = parent;
}
- public boolean visitPath(EJBQLExpression expression, int finishedChildIndex) {
+ public boolean visitPath(EJBQLPath expression, int finishedChildIndex) {
if (finishedChildIndex > 0) {
@@ -88,7 +89,6 @@
+ "'");
}
- parent.appendInnerJoin(idPath + '.' + lastPathComponent);
this.currentEntity = (ObjEntity) relationship.getTargetEntity();
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java Mon Apr 9 02:54:53 2007
@@ -19,7 +19,6 @@
package org.apache.cayenne.access.jdbc;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Set;
import org.apache.cayenne.dba.TypesMapping;
@@ -27,7 +26,6 @@
import org.apache.cayenne.ejbql.EJBQLExpression;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.reflect.ClassDescriptor;
/**
* A translator of EJBQL select statements into SQL.
@@ -39,30 +37,11 @@
private EJBQLTranslator parent;
private Set columns;
- private StringBuffer fromClause;
- private Set fromIds;
- private Set innerJoins;
EJBQLSelectTranslator(EJBQLTranslator parent) {
this.parent = parent;
}
- void appendRootIdentifier(String identifier) {
- if (fromIds == null) {
- fromIds = new HashSet();
- }
-
- fromIds.add(identifier);
- }
-
- void appendInnerJoin(String path) {
- if (innerJoins == null) {
- innerJoins = new HashSet();
- }
-
- innerJoins.add(path);
- }
-
void appendColumn(String identifier, DbAttribute column) {
appendColumn(identifier, column, TypesMapping.getJavaBySqlType(column.getType()));
}
@@ -95,25 +74,6 @@
}
}
- private void postprocess() {
-
- if (fromIds != null && fromClause != null) {
- Iterator it = fromIds.iterator();
- while (it.hasNext()) {
- String id = (String) it.next();
- ClassDescriptor descriptor = parent
- .getCompiledExpression()
- .getEntityDescriptor(id);
- DbEntity table = descriptor.getEntity().getDbEntity();
- String fqn = table.getFullyQualifiedName();
- String alias = parent.createAlias(id, fqn);
- fromClause.append(' ').append(fqn).append(' ').append(alias);
- }
- }
-
- // TODO: andrus, 3/26/2007 - inner joins
- }
-
EJBQLTranslator getParent() {
return parent;
}
@@ -124,9 +84,7 @@
}
public boolean visitFrom(EJBQLExpression expression) {
- this.fromClause = new StringBuffer(" FROM");
- String fromId = parent.bindParameter(fromClause, "from");
- parent.getBuffer().append(" $").append(fromId);
+ parent.getBuffer().append(" FROM");
setDelegate(new EJBQLFromTranslator(this));
return true;
}
@@ -142,16 +100,15 @@
parent.getBuffer().append("SELECT");
setDelegate(new EJBQLSelectColumnsTranslator(this));
}
- else if (finishedChildIndex + 1 == expression.getChildrenCount()) {
- postprocess();
- }
return true;
}
- public boolean visitWhere(EJBQLExpression expression) {
- parent.getBuffer().append(" WHERE");
- setDelegate(new EJBQLConditionTranslator(this));
+ public boolean visitWhere(EJBQLExpression expression, int finishedChildIndex) {
+ if (finishedChildIndex < 0) {
+ parent.getBuffer().append(" WHERE");
+ setDelegate(new EJBQLConditionTranslator(this));
+ }
return true;
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLBaseVisitor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLBaseVisitor.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLBaseVisitor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLBaseVisitor.java Mon Apr 9 02:54:53 2007
@@ -18,6 +18,10 @@
****************************************************************/
package org.apache.cayenne.ejbql;
+import org.apache.cayenne.ejbql.parser.EJBQLFromItem;
+import org.apache.cayenne.ejbql.parser.EJBQLJoin;
+import org.apache.cayenne.ejbql.parser.EJBQLPath;
+
/**
* A noop implementation of the EJBQL visitor that returns same preset boolean value from
* all methods. Intended for subclassing.
@@ -157,7 +161,7 @@
return continueFlag;
}
- public boolean visitFromItem(EJBQLExpression expression) {
+ public boolean visitFromItem(EJBQLFromItem expression, int finishedChildIndex) {
return continueFlag;
}
@@ -189,11 +193,11 @@
return continueFlag;
}
- public boolean visitInnerFetchJoin(EJBQLExpression expression) {
+ public boolean visitInnerFetchJoin(EJBQLJoin join, int finishedChildIndex) {
return continueFlag;
}
- public boolean visitInnerJoin(EJBQLExpression expression) {
+ public boolean visitInnerJoin(EJBQLJoin join, int finishedChildIndex) {
return continueFlag;
}
@@ -281,15 +285,15 @@
return continueFlag;
}
- public boolean visitOuterFetchJoin(EJBQLExpression expression) {
+ public boolean visitOuterFetchJoin(EJBQLJoin join, int finishedChildIndex) {
return continueFlag;
}
- public boolean visitOuterJoin(EJBQLExpression expression) {
+ public boolean visitOuterJoin(EJBQLJoin join, int finishedChildIndex) {
return continueFlag;
}
- public boolean visitPath(EJBQLExpression expression, int finishedChildIndex) {
+ public boolean visitPath(EJBQLPath expression, int finishedChildIndex) {
return continueFlag;
}
@@ -381,7 +385,7 @@
return continueFlag;
}
- public boolean visitWhere(EJBQLExpression expression) {
+ public boolean visitWhere(EJBQLExpression expression, int finishedChildIndex) {
return continueFlag;
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLCompiledExpression.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLCompiledExpression.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLCompiledExpression.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLCompiledExpression.java Mon Apr 9 02:54:53 2007
@@ -18,6 +18,9 @@
****************************************************************/
package org.apache.cayenne.ejbql;
+import java.util.Collection;
+
+import org.apache.cayenne.map.ObjRelationship;
import org.apache.cayenne.reflect.ClassDescriptor;
/**
@@ -34,6 +37,13 @@
EJBQLExpression getExpression();
/**
+ * Returns a collection of EJBQLExpressions each representing an implicit join in the
+ * query. The most common example of implicit joins are joins introduced by
+ * relationships in the WHERE clause.
+ */
+ Collection getImplicitJoins();
+
+ /**
* Returns a descriptor of the root of this expression such as entity being fetched or
* updated.
*/
@@ -43,6 +53,12 @@
* Returns a ClassDescriptor for the id variable.
*/
ClassDescriptor getEntityDescriptor(String identifier);
+
+ /**
+ * Returns a relationship that joins identifier with a parent entity. Returns null if
+ * the identifier corresponds to one of the query roots.
+ */
+ ObjRelationship getIncomingRelationship(String identifier);
/**
* Returns EJB QL source of the compiled expression if available.
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLDelegatingVisitor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLDelegatingVisitor.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLDelegatingVisitor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLDelegatingVisitor.java Mon Apr 9 02:54:53 2007
@@ -18,6 +18,10 @@
****************************************************************/
package org.apache.cayenne.ejbql;
+import org.apache.cayenne.ejbql.parser.EJBQLFromItem;
+import org.apache.cayenne.ejbql.parser.EJBQLJoin;
+import org.apache.cayenne.ejbql.parser.EJBQLPath;
+
/**
* A base implementation of the EJBQLExpressionVisitor that implements all methods to
* delegate processing to another visitor. This is a convenience superclass for visitors
@@ -30,6 +34,16 @@
protected EJBQLExpressionVisitor delegate;
+ protected boolean continueFlag;
+
+ public EJBQLDelegatingVisitor() {
+ this(false);
+ }
+
+ public EJBQLDelegatingVisitor(boolean continueFlag) {
+ this.continueFlag = continueFlag;
+ }
+
protected void setDelegate(EJBQLExpressionVisitor delegate) {
this.delegate = delegate;
}
@@ -39,390 +53,416 @@
}
public boolean visitAbs(EJBQLExpression expression) {
- return delegate != null ? delegate.visitAbs(expression) : false;
+ return delegate != null ? delegate.visitAbs(expression) : continueFlag;
}
public boolean visitAbstractSchemaName(EJBQLExpression expression) {
- return delegate != null ? delegate.visitAbstractSchemaName(expression) : false;
+ return delegate != null
+ ? delegate.visitAbstractSchemaName(expression)
+ : continueFlag;
}
public boolean visitAdd(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitAdd(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitAggregate(EJBQLExpression expression) {
- return delegate != null ? delegate.visitAggregate(expression) : false;
+ return delegate != null ? delegate.visitAggregate(expression) : continueFlag;
}
public boolean visitAll(EJBQLExpression expression) {
- return delegate != null ? delegate.visitAll(expression) : false;
+ return delegate != null ? delegate.visitAll(expression) : continueFlag;
}
public boolean visitAnd(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitAnd(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitAny(EJBQLExpression expression) {
- return delegate != null ? delegate.visitAny(expression) : false;
+ return delegate != null ? delegate.visitAny(expression) : continueFlag;
}
public boolean visitAscending(EJBQLExpression expression) {
- return delegate != null ? delegate.visitAscending(expression) : false;
+ return delegate != null ? delegate.visitAscending(expression) : continueFlag;
}
public boolean visitAverage(EJBQLExpression expression) {
- return delegate != null ? delegate.visitAverage(expression) : false;
+ return delegate != null ? delegate.visitAverage(expression) : continueFlag;
}
public boolean visitBetween(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitBetween(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitBooleanLiteral(EJBQLExpression expression) {
- return delegate != null ? delegate.visitBooleanLiteral(expression) : false;
+ return delegate != null ? delegate.visitBooleanLiteral(expression) : continueFlag;
}
public boolean visitClassName(EJBQLExpression expression) {
- return delegate != null ? delegate.visitClassName(expression) : false;
+ return delegate != null ? delegate.visitClassName(expression) : continueFlag;
}
public boolean visitConcat(EJBQLExpression expression) {
- return delegate != null ? delegate.visitConcat(expression) : false;
+ return delegate != null ? delegate.visitConcat(expression) : continueFlag;
}
public boolean visitConstructor(EJBQLExpression expression) {
- return delegate != null ? delegate.visitConstructor(expression) : false;
+ return delegate != null ? delegate.visitConstructor(expression) : continueFlag;
}
public boolean visitConstructorParameter(EJBQLExpression expression) {
- return delegate != null ? delegate.visitConstructorParameter(expression) : false;
+ return delegate != null
+ ? delegate.visitConstructorParameter(expression)
+ : continueFlag;
}
public boolean visitConstructorParameters(EJBQLExpression expression) {
- return delegate != null ? delegate.visitConstructorParameters(expression) : false;
+ return delegate != null
+ ? delegate.visitConstructorParameters(expression)
+ : continueFlag;
}
public boolean visitCount(EJBQLExpression expression) {
- return delegate != null ? delegate.visitCount(expression) : false;
+ return delegate != null ? delegate.visitCount(expression) : continueFlag;
}
public boolean visitCurrentDate(EJBQLExpression expression) {
- return delegate != null ? delegate.visitCurrentDate(expression) : false;
+ return delegate != null ? delegate.visitCurrentDate(expression) : continueFlag;
}
public boolean visitCurrentTime(EJBQLExpression expression) {
- return delegate != null ? delegate.visitCurrentTime(expression) : false;
+ return delegate != null ? delegate.visitCurrentTime(expression) : continueFlag;
}
public boolean visitCurrentTimestamp(EJBQLExpression expression) {
- return delegate != null ? delegate.visitCurrentTimestamp(expression) : false;
+ return delegate != null
+ ? delegate.visitCurrentTimestamp(expression)
+ : continueFlag;
}
public boolean visitDecimalLiteral(EJBQLExpression expression) {
- return delegate != null ? delegate.visitDecimalLiteral(expression) : false;
+ return delegate != null ? delegate.visitDecimalLiteral(expression) : continueFlag;
}
public boolean visitDelete(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitDelete(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitDescending(EJBQLExpression expression) {
- return delegate != null ? delegate.visitDescending(expression) : false;
+ return delegate != null ? delegate.visitDescending(expression) : continueFlag;
}
public boolean visitDistinct(EJBQLExpression expression) {
- return delegate != null ? delegate.visitDistinct(expression) : false;
+ return delegate != null ? delegate.visitDistinct(expression) : continueFlag;
}
public boolean visitDistinctPath(EJBQLExpression expression) {
- return delegate != null ? delegate.visitDistinctPath(expression) : false;
+ return delegate != null ? delegate.visitDistinctPath(expression) : continueFlag;
}
public boolean visitDivide(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitDivide(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitEquals(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitEquals(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitEscapeCharacter(EJBQLExpression expression) {
- return delegate != null ? delegate.visitEscapeCharacter(expression) : false;
+ return delegate != null
+ ? delegate.visitEscapeCharacter(expression)
+ : continueFlag;
}
public boolean visitExists(EJBQLExpression expression) {
- return delegate != null ? delegate.visitExists(expression) : false;
+ return delegate != null ? delegate.visitExists(expression) : continueFlag;
}
public boolean visitFrom(EJBQLExpression expression) {
- return delegate != null ? delegate.visitFrom(expression) : false;
+ return delegate != null ? delegate.visitFrom(expression) : continueFlag;
}
- public boolean visitFromItem(EJBQLExpression expression) {
- return delegate != null ? delegate.visitFromItem(expression) : false;
+ public boolean visitFromItem(EJBQLFromItem expression, int finishedChildIndex) {
+ return delegate != null
+ ? delegate.visitFromItem(expression, finishedChildIndex)
+ : continueFlag;
}
public boolean visitGreaterOrEqual(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null ? delegate.visitGreaterOrEqual(
expression,
- finishedChildIndex) : false;
+ finishedChildIndex) : continueFlag;
}
public boolean visitGreaterThan(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null ? delegate.visitGreaterThan(
expression,
- finishedChildIndex) : false;
+ finishedChildIndex) : continueFlag;
}
public boolean visitGroupBy(EJBQLExpression expression) {
- return delegate != null ? delegate.visitGroupBy(expression) : false;
+ return delegate != null ? delegate.visitGroupBy(expression) : continueFlag;
}
public boolean visitHaving(EJBQLExpression expression) {
- return delegate != null ? delegate.visitHaving(expression) : false;
+ return delegate != null ? delegate.visitHaving(expression) : continueFlag;
}
public boolean visitIdentificationVariable(EJBQLExpression expression) {
return delegate != null
? delegate.visitIdentificationVariable(expression)
- : false;
+ : continueFlag;
}
public boolean visitIdentifier(EJBQLExpression expression) {
- return delegate != null ? delegate.visitIdentifier(expression) : false;
+ return delegate != null ? delegate.visitIdentifier(expression) : continueFlag;
}
public boolean visitIn(EJBQLExpression expression) {
- return delegate != null ? delegate.visitIn(expression) : false;
+ return delegate != null ? delegate.visitIn(expression) : continueFlag;
}
- public boolean visitInnerFetchJoin(EJBQLExpression expression) {
- return delegate != null ? delegate.visitInnerFetchJoin(expression) : false;
+ public boolean visitInnerFetchJoin(EJBQLJoin join, int finishedChildIndex) {
+ return delegate != null ? delegate.visitInnerFetchJoin(
+ join,
+ finishedChildIndex) : continueFlag;
}
- public boolean visitInnerJoin(EJBQLExpression expression) {
- return delegate != null ? delegate.visitInnerJoin(expression) : false;
+ public boolean visitInnerJoin(EJBQLJoin join, int finishedChildIndex) {
+ return delegate != null
+ ? delegate.visitInnerJoin(join, finishedChildIndex)
+ : continueFlag;
}
public boolean visitIntegerLiteral(EJBQLExpression expression) {
- return delegate != null ? delegate.visitIntegerLiteral(expression) : false;
+ return delegate != null ? delegate.visitIntegerLiteral(expression) : continueFlag;
}
public boolean visitIsEmpty(EJBQLExpression expression) {
- return delegate != null ? delegate.visitIsEmpty(expression) : false;
+ return delegate != null ? delegate.visitIsEmpty(expression) : continueFlag;
}
public boolean visitIsNull(EJBQLExpression expression) {
- return delegate != null ? delegate.visitIsNull(expression) : false;
+ return delegate != null ? delegate.visitIsNull(expression) : continueFlag;
}
public boolean visitLength(EJBQLExpression expression) {
- return delegate != null ? delegate.visitLength(expression) : false;
+ return delegate != null ? delegate.visitLength(expression) : continueFlag;
}
public boolean visitLessOrEqual(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null ? delegate.visitLessOrEqual(
expression,
- finishedChildIndex) : false;
+ finishedChildIndex) : continueFlag;
}
public boolean visitLessThan(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitLessThan(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitLike(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitLike(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitLocate(EJBQLExpression expression) {
- return delegate != null ? delegate.visitLocate(expression) : false;
+ return delegate != null ? delegate.visitLocate(expression) : continueFlag;
}
public boolean visitLower(EJBQLExpression expression) {
- return delegate != null ? delegate.visitLower(expression) : false;
+ return delegate != null ? delegate.visitLower(expression) : continueFlag;
}
public boolean visitMax(EJBQLExpression expression) {
- return delegate != null ? delegate.visitMax(expression) : false;
+ return delegate != null ? delegate.visitMax(expression) : continueFlag;
}
public boolean visitMemberOf(EJBQLExpression expression) {
- return delegate != null ? delegate.visitMemberOf(expression) : false;
+ return delegate != null ? delegate.visitMemberOf(expression) : continueFlag;
}
public boolean visitMin(EJBQLExpression expression) {
- return delegate != null ? delegate.visitMin(expression) : false;
+ return delegate != null ? delegate.visitMin(expression) : continueFlag;
}
public boolean visitMod(EJBQLExpression expression) {
- return delegate != null ? delegate.visitMod(expression) : false;
+ return delegate != null ? delegate.visitMod(expression) : continueFlag;
}
public boolean visitMultiply(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitMultiply(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitNamedInputParameter(EJBQLExpression expression) {
- return delegate != null ? delegate.visitNamedInputParameter(expression) : false;
+ return delegate != null
+ ? delegate.visitNamedInputParameter(expression)
+ : continueFlag;
}
public boolean visitNegative(EJBQLExpression expression) {
- return delegate != null ? delegate.visitNegative(expression) : false;
+ return delegate != null ? delegate.visitNegative(expression) : continueFlag;
}
public boolean visitNot(EJBQLExpression expression) {
- return delegate != null ? delegate.visitNot(expression) : false;
+ return delegate != null ? delegate.visitNot(expression) : continueFlag;
}
public boolean visitNotEquals(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitNotEquals(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitOr(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitOr(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitOrderBy(EJBQLExpression expression) {
- return delegate != null ? delegate.visitOrderBy(expression) : false;
+ return delegate != null ? delegate.visitOrderBy(expression) : continueFlag;
}
public boolean visitOrderByItem(EJBQLExpression expression) {
- return delegate != null ? delegate.visitOrderByItem(expression) : false;
+ return delegate != null ? delegate.visitOrderByItem(expression) : continueFlag;
}
- public boolean visitOuterFetchJoin(EJBQLExpression expression) {
- return delegate != null ? delegate.visitOuterFetchJoin(expression) : false;
+ public boolean visitOuterFetchJoin(EJBQLJoin join, int finishedChildIndex) {
+ return delegate != null ? delegate.visitOuterFetchJoin(
+ join,
+ finishedChildIndex) : continueFlag;
}
- public boolean visitOuterJoin(EJBQLExpression expression) {
- return delegate != null ? delegate.visitOuterJoin(expression) : false;
+ public boolean visitOuterJoin(EJBQLJoin join, int finishedChildIndex) {
+ return delegate != null
+ ? delegate.visitOuterJoin(join, finishedChildIndex)
+ : continueFlag;
}
- public boolean visitPath(EJBQLExpression expression, int finishedChildIndex) {
+ public boolean visitPath(EJBQLPath expression, int finishedChildIndex) {
return delegate != null
? delegate.visitPath(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitPatternValue(EJBQLExpression expression) {
- return delegate != null ? delegate.visitPatternValue(expression) : false;
+ return delegate != null ? delegate.visitPatternValue(expression) : continueFlag;
}
public boolean visitPositionalInputParameter(EJBQLExpression expression) {
return delegate != null
? delegate.visitPositionalInputParameter(expression)
- : false;
+ : continueFlag;
}
public boolean visitSelect(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitSelect(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitSelectExpression(EJBQLExpression expression) {
- return delegate != null ? delegate.visitSelectExpression(expression) : false;
+ return delegate != null
+ ? delegate.visitSelectExpression(expression)
+ : continueFlag;
}
public boolean visitSize(EJBQLExpression expression) {
- return delegate != null ? delegate.visitSize(expression) : false;
+ return delegate != null ? delegate.visitSize(expression) : continueFlag;
}
public boolean visitSqrt(EJBQLExpression expression) {
- return delegate != null ? delegate.visitSqrt(expression) : false;
+ return delegate != null ? delegate.visitSqrt(expression) : continueFlag;
}
public boolean visitStringLiteral(EJBQLExpression expression) {
- return delegate != null ? delegate.visitStringLiteral(expression) : false;
+ return delegate != null ? delegate.visitStringLiteral(expression) : continueFlag;
}
public boolean visitSubselect(EJBQLExpression expression) {
- return delegate != null ? delegate.visitSubselect(expression) : false;
+ return delegate != null ? delegate.visitSubselect(expression) : continueFlag;
}
public boolean visitSubstring(EJBQLExpression expression) {
- return delegate != null ? delegate.visitSubstring(expression) : false;
+ return delegate != null ? delegate.visitSubstring(expression) : continueFlag;
}
public boolean visitSubtract(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitSubtract(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitSum(EJBQLExpression expression) {
- return delegate != null ? delegate.visitSum(expression) : false;
+ return delegate != null ? delegate.visitSum(expression) : continueFlag;
}
public boolean visitTok(EJBQLExpression expression) {
- return delegate != null ? delegate.visitTok(expression) : false;
+ return delegate != null ? delegate.visitTok(expression) : continueFlag;
}
public boolean visitTrim(EJBQLExpression expression) {
- return delegate != null ? delegate.visitTrim(expression) : false;
+ return delegate != null ? delegate.visitTrim(expression) : continueFlag;
}
public boolean visitTrimBoth(EJBQLExpression expression) {
- return delegate != null ? delegate.visitTrimBoth(expression) : false;
+ return delegate != null ? delegate.visitTrimBoth(expression) : continueFlag;
}
public boolean visitTrimCharacter(EJBQLExpression expression) {
- return delegate != null ? delegate.visitTrimCharacter(expression) : false;
+ return delegate != null ? delegate.visitTrimCharacter(expression) : continueFlag;
}
public boolean visitTrimLeading(EJBQLExpression expression) {
- return delegate != null ? delegate.visitTrimLeading(expression) : false;
+ return delegate != null ? delegate.visitTrimLeading(expression) : continueFlag;
}
public boolean visitTrimTrailing(EJBQLExpression expression) {
- return delegate != null ? delegate.visitTrimTrailing(expression) : false;
+ return delegate != null ? delegate.visitTrimTrailing(expression) : continueFlag;
}
public boolean visitUpdate(EJBQLExpression expression, int finishedChildIndex) {
return delegate != null
? delegate.visitUpdate(expression, finishedChildIndex)
- : false;
+ : continueFlag;
}
public boolean visitUpdateField(EJBQLExpression expression) {
- return delegate != null ? delegate.visitUpdateField(expression) : false;
+ return delegate != null ? delegate.visitUpdateField(expression) : continueFlag;
}
public boolean visitUpdateItem(EJBQLExpression expression) {
- return delegate != null ? delegate.visitUpdateItem(expression) : false;
+ return delegate != null ? delegate.visitUpdateItem(expression) : continueFlag;
}
public boolean visitUpdateValue(EJBQLExpression expression) {
- return delegate != null ? delegate.visitUpdateValue(expression) : false;
+ return delegate != null ? delegate.visitUpdateValue(expression) : continueFlag;
}
public boolean visitUpper(EJBQLExpression expression) {
- return delegate != null ? delegate.visitUpper(expression) : false;
+ return delegate != null ? delegate.visitUpper(expression) : continueFlag;
}
- public boolean visitWhere(EJBQLExpression expression) {
- return delegate != null ? delegate.visitWhere(expression) : false;
+ public boolean visitWhere(EJBQLExpression expression, int finishedChildIndex) {
+ return delegate != null
+ ? delegate.visitWhere(expression, finishedChildIndex)
+ : continueFlag;
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLExpressionVisitor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLExpressionVisitor.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLExpressionVisitor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLExpressionVisitor.java Mon Apr 9 02:54:53 2007
@@ -18,6 +18,10 @@
****************************************************************/
package org.apache.cayenne.ejbql;
+import org.apache.cayenne.ejbql.parser.EJBQLFromItem;
+import org.apache.cayenne.ejbql.parser.EJBQLJoin;
+import org.apache.cayenne.ejbql.parser.EJBQLPath;
+
/**
* A visitor interface to inspect the EJBQL expression tree.
*
@@ -138,7 +142,7 @@
boolean visitFrom(EJBQLExpression expression);
- boolean visitFromItem(EJBQLExpression expression);
+ boolean visitFromItem(EJBQLFromItem expression, int finishedChildIndex);
/**
* Called on visiting ">=" expression and also after visiting every expression child.
@@ -170,9 +174,9 @@
boolean visitIn(EJBQLExpression expression);
- boolean visitInnerFetchJoin(EJBQLExpression expression);
+ boolean visitInnerFetchJoin(EJBQLJoin join, int finishedChildIndex);
- boolean visitInnerJoin(EJBQLExpression expression);
+ boolean visitInnerJoin(EJBQLJoin join, int finishedChildIndex);
boolean visitIntegerLiteral(EJBQLExpression expression);
@@ -265,9 +269,9 @@
boolean visitOrderByItem(EJBQLExpression expression);
- boolean visitOuterFetchJoin(EJBQLExpression expression);
+ boolean visitOuterFetchJoin(EJBQLJoin join, int finishedChildIndex);
- boolean visitOuterJoin(EJBQLExpression expression);
+ boolean visitOuterJoin(EJBQLJoin join, int finishedChildIndex);
/**
* Called on visiting "path" expression and also after visiting every expression
@@ -278,7 +282,7 @@
* time, before its children; otherwise this is an index of a child just
* visited.
*/
- boolean visitPath(EJBQLExpression expression, int finishedChildIndex);
+ boolean visitPath(EJBQLPath expression, int finishedChildIndex);
boolean visitPatternValue(EJBQLExpression expression);
@@ -350,5 +354,5 @@
boolean visitUpper(EJBQLExpression expression);
- boolean visitWhere(EJBQLExpression expression);
+ boolean visitWhere(EJBQLExpression expression, int finishedChildIndex);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/CompiledExpression.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/CompiledExpression.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/CompiledExpression.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/CompiledExpression.java Mon Apr 9 02:54:53 2007
@@ -18,10 +18,13 @@
****************************************************************/
package org.apache.cayenne.ejbql.parser;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Map;
import org.apache.cayenne.ejbql.EJBQLCompiledExpression;
import org.apache.cayenne.ejbql.EJBQLExpression;
+import org.apache.cayenne.map.ObjRelationship;
import org.apache.cayenne.reflect.ClassDescriptor;
/**
@@ -35,7 +38,13 @@
private String source;
private String rootId;
private Map descriptorsById;
+ private Map incomingById;
private EJBQLExpression expression;
+ private Collection implicitJoins;
+
+ public Collection getImplicitJoins() {
+ return implicitJoins != null ? implicitJoins : Collections.EMPTY_SET;
+ }
public ClassDescriptor getEntityDescriptor(String idVariable) {
if (idVariable == null) {
@@ -47,11 +56,15 @@
return (ClassDescriptor) descriptorsById.get(idVariable);
}
-
+
public ClassDescriptor getRootDescriptor() {
return rootId != null ? getEntityDescriptor(rootId) : null;
}
+ public ObjRelationship getIncomingRelationship(String identifier) {
+ return (ObjRelationship) incomingById.get(identifier);
+ }
+
public EJBQLExpression getExpression() {
return expression;
}
@@ -68,11 +81,19 @@
this.descriptorsById = descriptorsById;
}
+ void setIncomingById(Map incomingById) {
+ this.incomingById = incomingById;
+ }
+
void setSource(String source) {
this.source = source;
}
-
+
void setRootId(String rootId) {
this.rootId = rootId;
+ }
+
+ void setImplicitJoins(Collection implicitJoins) {
+ this.implicitJoins = implicitJoins;
}
}
Added: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java?view=auto&rev=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java Mon Apr 9 02:54:53 2007
@@ -0,0 +1,243 @@
+/*****************************************************************
+ * 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.apache.cayenne.ejbql.parser;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
+import org.apache.cayenne.ejbql.EJBQLDelegatingVisitor;
+import org.apache.cayenne.ejbql.EJBQLException;
+import org.apache.cayenne.ejbql.EJBQLExpression;
+import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
+import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.reflect.ArcProperty;
+import org.apache.cayenne.reflect.ClassDescriptor;
+import org.apache.cayenne.reflect.Property;
+
+/**
+ * A visitor that compiles an EJBQL expression.
+ *
+ * @since 3.0
+ * @author Andrus Adamchik
+ */
+class Compiler {
+
+ private String rootId;
+ private EntityResolver resolver;
+ private Map descriptorsById;
+ private Map incomingById;
+ private Collection implicitJoins;
+ private EJBQLExpressionVisitor fromItemVisitor;
+ private EJBQLExpressionVisitor joinVisitor;
+ private EJBQLExpressionVisitor whereClauseVisitor;
+ private EJBQLExpressionVisitor rootDescriptorVisitor;
+
+ Compiler(EntityResolver resolver) {
+ this.resolver = resolver;
+ this.descriptorsById = new HashMap();
+ this.incomingById = new HashMap();
+ this.implicitJoins = new ArrayList(2);
+
+ this.rootDescriptorVisitor = new SelectExpressionVisitor();
+ this.fromItemVisitor = new FromItemVisitor();
+ this.joinVisitor = new JoinVisitor();
+ this.whereClauseVisitor = new WhereClauseVisitor();
+ }
+
+ CompiledExpression compile(String source, EJBQLExpression parsed) {
+ parsed.visit(new CompilationVisitor());
+
+ CompiledExpression compiled = new CompiledExpression();
+ compiled.setExpression(parsed);
+ compiled.setSource(source);
+
+ compiled.setRootId(rootId);
+ compiled.setDescriptorsById(descriptorsById);
+ compiled.setImplicitJoins(implicitJoins);
+ compiled.setIncomingById(incomingById);
+
+ return compiled;
+ }
+
+ class CompilationVisitor extends EJBQLDelegatingVisitor {
+
+ CompilationVisitor() {
+ super(true);
+ }
+
+ public boolean visitSelectExpression(EJBQLExpression expression) {
+ updateSubtreeDelegate(rootDescriptorVisitor, expression, -1);
+ return true;
+ }
+
+ public boolean visitFromItem(EJBQLFromItem expression, int finishedChildIndex) {
+ updateSubtreeDelegate(fromItemVisitor, expression, finishedChildIndex);
+ return true;
+ }
+
+ public boolean visitInnerFetchJoin(EJBQLJoin join, int finishedChildIndex) {
+ updateSubtreeDelegate(joinVisitor, join, finishedChildIndex);
+ return true;
+ }
+
+ public boolean visitInnerJoin(EJBQLJoin join, int finishedChildIndex) {
+ updateSubtreeDelegate(joinVisitor, join, finishedChildIndex);
+ return true;
+ }
+
+ public boolean visitOuterFetchJoin(EJBQLJoin join, int finishedChildIndex) {
+ updateSubtreeDelegate(joinVisitor, join, finishedChildIndex);
+ return true;
+ }
+
+ public boolean visitOuterJoin(EJBQLJoin join, int finishedChildIndex) {
+ updateSubtreeDelegate(joinVisitor, join, finishedChildIndex);
+ return true;
+ }
+
+ public boolean visitWhere(EJBQLExpression expression, int finishedChildIndex) {
+ updateSubtreeDelegate(whereClauseVisitor, expression, finishedChildIndex);
+ return true;
+ }
+
+ private void updateSubtreeDelegate(
+ EJBQLExpressionVisitor delegate,
+ EJBQLExpression expression,
+ int finishedChildIndex) {
+
+ if (finishedChildIndex < 0) {
+ setDelegate(delegate);
+ }
+ else if (finishedChildIndex + 1 == expression.getChildrenCount()) {
+ setDelegate(null);
+ }
+ }
+ }
+
+ class FromItemVisitor extends EJBQLBaseVisitor {
+
+ private String entityName;
+
+ public boolean visitIdentificationVariable(EJBQLExpression expression) {
+ entityName = expression.getText();
+ return true;
+ }
+
+ public boolean visitIdentifier(EJBQLExpression expression) {
+
+ // per JPA spec, 4.4.2, "Identification variables are case insensitive."
+ String rootId = expression.getText();
+ rootId = rootId.toLowerCase();
+
+ // resolve class descriptor
+ ClassDescriptor descriptor = resolver.getClassDescriptor(entityName);
+ if (descriptor == null) {
+ throw new EJBQLException("Unmapped abstract schema name: " + entityName);
+ }
+
+ ClassDescriptor old = (ClassDescriptor) descriptorsById.put(
+ rootId,
+ descriptor);
+ if (old != null && old != descriptor) {
+ throw new EJBQLException("Duplicate identification variable definition: "
+ + rootId
+ + ", it is already used for "
+ + old.getEntity().getName());
+ }
+ return true;
+ }
+ }
+
+ class JoinVisitor extends EJBQLBaseVisitor {
+
+ private String id;
+ private ObjRelationship incoming;
+ private ClassDescriptor descriptor;
+
+ public boolean visitPath(EJBQLPath expression, int finishedChildIndex) {
+ if (finishedChildIndex + 1 < expression.getChildrenCount()) {
+ this.id = expression.getId();
+ this.descriptor = (ClassDescriptor) descriptorsById.get(id);
+
+ if (descriptor == null) {
+ throw new EJBQLException("Unmapped id variable: " + id);
+ }
+ }
+
+ return true;
+ }
+
+ public boolean visitIdentificationVariable(EJBQLExpression expression) {
+ Property property = descriptor.getProperty(expression.getText());
+ if (property instanceof ArcProperty) {
+ incoming = ((ArcProperty) property).getRelationship();
+ descriptor = ((ArcProperty) property).getTargetDescriptor();
+ }
+ else {
+ throw new EJBQLException("Incorrect relationship path: "
+ + expression.getText());
+ }
+
+ return true;
+ }
+
+ public boolean visitIdentifier(EJBQLExpression expression) {
+ if (incoming != null) {
+
+ String aliasId = expression.getText();
+
+ // map id variable to class descriptor
+ ClassDescriptor old = (ClassDescriptor) descriptorsById.put(
+ aliasId,
+ descriptor);
+ if (old != null && old != descriptor) {
+ throw new EJBQLException(
+ "Duplicate identification variable definition: "
+ + aliasId
+ + ", it is already used for "
+ + old.getEntity().getName());
+ }
+
+ incomingById.put(aliasId, incoming);
+
+ id = null;
+ descriptor = null;
+ incoming = null;
+ }
+
+ return true;
+ }
+ }
+
+ class WhereClauseVisitor extends EJBQLBaseVisitor {
+ // TODO: andrus 4/9/2007 - load implicit joins
+ }
+
+ class SelectExpressionVisitor extends EJBQLBaseVisitor {
+
+ public boolean visitIdentifier(EJBQLExpression expression) {
+ rootId = expression.getText();
+ return true;
+ }
+ }
+}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAbs.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAbs.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAbs.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAbs.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLAbs(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitAbs(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAbstractSchemaName.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAbstractSchemaName.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAbstractSchemaName.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAbstractSchemaName.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLAbstractSchemaName(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitAbstractSchemaName(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAdd.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAdd.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAdd.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAdd.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLAdd(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitAdd(this, -1);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAggregate.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAggregate.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAggregate.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAggregate.java Mon Apr 9 02:54:53 2007
@@ -26,14 +26,10 @@
*/
public class EJBQLAggregate extends SimpleNode {
- public EJBQLAggregate(int id) {
- super(id);
- }
-
- EJBQLAggregate(AbstractParser parser, int id) {
+ public EJBQLAggregate(int id) {
super(id);
}
-
+
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitAggregate(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAll.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAll.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAll.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAll.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLAll(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitAll(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAnd.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAnd.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAnd.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAnd.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLAnd(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitAnd(this, -1);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAny.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAny.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAny.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAny.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLAny(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitAny(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAscending.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAscending.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAscending.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAscending.java Mon Apr 9 02:54:53 2007
@@ -25,14 +25,11 @@
* @author Andrus Adamchik
*/
public class EJBQLAscending extends SimpleNode {
- public EJBQLAscending(int id) {
- super(id);
- }
-
- EJBQLAscending(AbstractParser parser, int id) {
+
+ public EJBQLAscending(int id) {
super(id);
}
-
+
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitAscending(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAverage.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAverage.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAverage.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLAverage.java Mon Apr 9 02:54:53 2007
@@ -29,11 +29,7 @@
public EJBQLAverage(int id) {
super(id);
}
-
- EJBQLAverage(AbstractParser parser, int id) {
- super(id);
- }
-
+
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitAverage(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLBetween.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLBetween.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLBetween.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLBetween.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLBetween(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitBetween(this, -1);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLBooleanLiteral.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLBooleanLiteral.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLBooleanLiteral.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLBooleanLiteral.java Mon Apr 9 02:54:53 2007
@@ -25,14 +25,11 @@
* @author Andrus Adamchik
*/
public class EJBQLBooleanLiteral extends SimpleNode {
- public EJBQLBooleanLiteral(int id) {
- super(id);
- }
-
- EJBQLBooleanLiteral(AbstractParser parser, int id) {
+
+ public EJBQLBooleanLiteral(int id) {
super(id);
}
-
+
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitBooleanLiteral(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLClassName.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLClassName.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLClassName.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLClassName.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLClassName(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitClassName(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConcat.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConcat.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConcat.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConcat.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLConcat(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitConcat(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructor.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructor.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLConstructor(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitConstructor(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructorParameter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructorParameter.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructorParameter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructorParameter.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLConstructorParameter(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitConstructorParameter(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructorParameters.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructorParameters.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructorParameters.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLConstructorParameters.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLConstructorParameters(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitConstructorParameters(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCount.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCount.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCount.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCount.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLCount(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitCount(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentDate.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentDate.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentDate.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentDate.java Mon Apr 9 02:54:53 2007
@@ -30,10 +30,6 @@
super(id);
}
- EJBQLCurrentDate(AbstractParser parser, int id) {
- super(id);
- }
-
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitCurrentDate(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentTime.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentTime.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentTime.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentTime.java Mon Apr 9 02:54:53 2007
@@ -25,14 +25,11 @@
* @author Andrus Adamchik
*/
public class EJBQLCurrentTime extends SimpleNode {
- public EJBQLCurrentTime(int id) {
- super(id);
- }
-
- EJBQLCurrentTime(AbstractParser parser, int id) {
+
+ public EJBQLCurrentTime(int id) {
super(id);
}
-
+
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitCurrentTime(this);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentTimestamp.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentTimestamp.java?view=diff&rev=526696&r1=526695&r2=526696
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentTimestamp.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLCurrentTimestamp.java Mon Apr 9 02:54:53 2007
@@ -25,14 +25,11 @@
* @author Andrus Adamchik
*/
public class EJBQLCurrentTimestamp extends SimpleNode {
- public EJBQLCurrentTimestamp(int id) {
- super(id);
- }
-
- EJBQLCurrentTimestamp(AbstractParser parser, int id) {
+
+ public EJBQLCurrentTimestamp(int id) {
super(id);
}
-
+
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
return visitor.visitCurrentTimestamp(this);
}