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 2013/02/24 14:05:15 UTC
svn commit: r1449474 [2/2] - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src:
main/java/org/apache/cayenne/access/jdbc/
test/java/org/apache/cayenne/access/jdbc/
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java?rev=1449474&r1=1449473&r2=1449474&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java Sun Feb 24 13:05:14 2013
@@ -24,7 +24,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import org.apache.cayenne.dba.QuotingSupport;
import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
import org.apache.cayenne.ejbql.EJBQLException;
import org.apache.cayenne.ejbql.EJBQLExpression;
@@ -39,7 +38,8 @@ import org.apache.cayenne.map.Relationsh
import org.apache.cayenne.reflect.ClassDescriptor;
/**
- * A translator that walks the relationship/attribute path, appending joins to the query.
+ * A translator that walks the relationship/attribute path, appending joins to
+ * the query.
*
* @since 3.0
*/
@@ -69,8 +69,7 @@ public abstract class EJBQLPathTranslato
if (finishedChildIndex + 1 < expression.getChildrenCount()) {
processIntermediatePathComponent();
- }
- else {
+ } else {
processLastPathComponent();
}
}
@@ -82,8 +81,7 @@ public abstract class EJBQLPathTranslato
public boolean visitIdentifier(EJBQLExpression expression) {
ClassDescriptor descriptor = context.getEntityDescriptor(expression.getText());
if (descriptor == null) {
- throw new EJBQLException("Invalid identification variable: "
- + expression.getText());
+ throw new EJBQLException("Invalid identification variable: " + expression.getText());
}
this.currentEntity = descriptor.getEntity();
@@ -96,7 +94,8 @@ public abstract class EJBQLPathTranslato
@Override
public boolean visitIdentificationVariable(EJBQLExpression expression) {
- // TODO: andrus 6/11/2007 - if the path ends with relationship, the last join will
+ // TODO: andrus 6/11/2007 - if the path ends with relationship, the last
+ // join will
// get lost...
if (lastPathComponent != null) {
resolveJoin(true);
@@ -108,75 +107,55 @@ public abstract class EJBQLPathTranslato
protected void resolveJoin(boolean inner) {
- EJBQLJoinAppender joinAppender = context.getTranslatorFactory().getJoinAppender(
- context);
+ EJBQLJoinAppender joinAppender = context.getTranslatorFactory().getJoinAppender(context);
String newPath = idPath + '.' + lastPathComponent;
- String oldPath = joinAppender.registerReusableJoin(
- idPath,
- lastPathComponent,
- newPath);
+ String oldPath = joinAppender.registerReusableJoin(idPath, lastPathComponent, newPath);
this.fullPath = fullPath + '.' + lastPathComponent;
if (oldPath != null) {
this.idPath = oldPath;
- Relationship lastRelationship = currentEntity
- .getRelationship(lastPathComponent);
+ Relationship lastRelationship = currentEntity.getRelationship(lastPathComponent);
if (lastRelationship != null) {
ObjEntity targetEntity = (ObjEntity) lastRelationship.getTargetEntity();
- this.lastAlias = context.getTableAlias(fullPath, context.getQuotingSupport().generateTableName(
- targetEntity.getDbEntity()));
- }
- else {
- String tableName = context.getQuotingSupport().generateTableName(currentEntity.getDbEntity());
+ this.lastAlias = context.getTableAlias(fullPath,
+ context.getQuotingStrategy().quotedFullyQualifiedName(targetEntity.getDbEntity()));
+ } else {
+ String tableName = context.getQuotingStrategy().quotedFullyQualifiedName(currentEntity.getDbEntity());
this.lastAlias = context.getTableAlias(oldPath, tableName);
}
- }
- else {
- Relationship lastRelationship = currentEntity
- .getRelationship(lastPathComponent);
+ } else {
+ Relationship lastRelationship = currentEntity.getRelationship(lastPathComponent);
ObjEntity targetEntity = null;
if (lastRelationship != null) {
targetEntity = (ObjEntity) lastRelationship.getTargetEntity();
- }
- else {
+ } else {
targetEntity = currentEntity;
}
// register join
if (inner) {
- joinAppender.appendInnerJoin(
- joinMarker,
- new EJBQLTableId(idPath),
- new EJBQLTableId(fullPath));
- }
- else {
- joinAppender.appendOuterJoin(
- joinMarker,
- new EJBQLTableId(idPath),
- new EJBQLTableId(fullPath));
+ joinAppender.appendInnerJoin(joinMarker, new EJBQLTableId(idPath), new EJBQLTableId(fullPath));
+ } else {
+ joinAppender.appendOuterJoin(joinMarker, new EJBQLTableId(idPath), new EJBQLTableId(fullPath));
}
- this.lastAlias = context.getTableAlias(fullPath, context.getQuotingSupport().generateTableName(
- targetEntity.getDbEntity()));
+ this.lastAlias = context.getTableAlias(fullPath,
+ context.getQuotingStrategy().quotedFullyQualifiedName(targetEntity.getDbEntity()));
this.idPath = newPath;
}
}
protected void processIntermediatePathComponent() {
- ObjRelationship relationship = (ObjRelationship) currentEntity
- .getRelationship(lastPathComponent);
+ ObjRelationship relationship = (ObjRelationship) currentEntity.getRelationship(lastPathComponent);
if (relationship == null) {
- throw new EJBQLException("Unknown relationship '"
- + lastPathComponent
- + "' for entity '"
- + currentEntity.getName()
- + "'");
+ throw new EJBQLException("Unknown relationship '" + lastPathComponent + "' for entity '"
+ + currentEntity.getName() + "'");
}
this.currentEntity = (ObjEntity) relationship.getTargetEntity();
@@ -184,16 +163,14 @@ public abstract class EJBQLPathTranslato
protected void processLastPathComponent() {
- ObjAttribute attribute = (ObjAttribute) currentEntity
- .getAttribute(lastPathComponent);
+ ObjAttribute attribute = (ObjAttribute) currentEntity.getAttribute(lastPathComponent);
if (attribute != null) {
processTerminatingAttribute(attribute);
return;
}
- ObjRelationship relationship = (ObjRelationship) currentEntity
- .getRelationship(lastPathComponent);
+ ObjRelationship relationship = (ObjRelationship) currentEntity.getRelationship(lastPathComponent);
if (relationship != null) {
processTerminatingRelationship(relationship);
return;
@@ -203,7 +180,6 @@ public abstract class EJBQLPathTranslato
}
protected void processTerminatingAttribute(ObjAttribute attribute) {
- QuotingSupport quotingSupport = context.getQuotingSupport();
DbEntity table = null;
Iterator<?> it = attribute.getDbPathIterator();
@@ -215,14 +191,12 @@ public abstract class EJBQLPathTranslato
}
if (isUsingAliases()) {
- String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(
- idPath,
- quotingSupport.generateTableName(table));
- context.append(' ').append(alias).append('.').append(
- quotingSupport.generateColumnName(attribute.getDbAttribute()));
- }
- else {
- context.append(' ').append(context.getQuotingSupport().generateColumnName(attribute.getDbAttribute()));
+ String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(idPath, context
+ .getQuotingStrategy().quotedFullyQualifiedName(table));
+ context.append(' ').append(alias).append('.')
+ .append(context.getQuotingStrategy().quotedName(attribute.getDbAttribute()));
+ } else {
+ context.append(' ').append(context.getQuotingStrategy().quotedName(attribute.getDbAttribute()));
}
}
@@ -230,19 +204,22 @@ public abstract class EJBQLPathTranslato
if (relationship.isSourceIndependentFromTargetChange()) {
- // (andrus) use an outer join for to-many matches.. This is somewhat different
- // from traditional Cayenne SelectQuery, as EJBQL spec does not allow regular
- // path matches done against to-many relationships, and instead provides
- // MEMBER OF and IS EMPTY operators. Outer join is needed for IS EMPTY... I
+ // (andrus) use an outer join for to-many matches.. This is somewhat
+ // different
+ // from traditional Cayenne SelectQuery, as EJBQL spec does not
+ // allow regular
+ // path matches done against to-many relationships, and instead
+ // provides
+ // MEMBER OF and IS EMPTY operators. Outer join is needed for IS
+ // EMPTY... I
// guess MEMBER OF could've been done with an inner join though..
resolveJoin(false);
DbRelationship dbRelationship = chooseDbRelationship(relationship);
DbEntity table = (DbEntity) dbRelationship.getTargetEntity();
- String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(
- idPath,
- context.getQuotingSupport().generateTableName(table));
+ String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(idPath, context
+ .getQuotingStrategy().quotedFullyQualifiedName(table));
Collection<DbAttribute> pks = table.getPrimaryKeys();
@@ -252,23 +229,19 @@ public abstract class EJBQLPathTranslato
if (isUsingAliases()) {
context.append(alias).append('.');
}
- context.append(context.getQuotingSupport().generateColumnName(pk));
- }
- else {
- throw new EJBQLException(
- "Multi-column PK to-many matches are not yet supported.");
+ context.append(context.getQuotingStrategy().quotedName(pk));
+ } else {
+ throw new EJBQLException("Multi-column PK to-many matches are not yet supported.");
}
- }
- else {
+ } else {
// match FK against the target object
DbRelationship dbRelationship = chooseDbRelationship(relationship);
DbEntity table = (DbEntity) dbRelationship.getSourceEntity();
- String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(
- idPath,
- context.getQuotingSupport().generateTableName(table));
+ String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(idPath, context
+ .getQuotingStrategy().quotedFullyQualifiedName(table));
List<DbJoin> joins = dbRelationship.getJoins();
@@ -278,33 +251,28 @@ public abstract class EJBQLPathTranslato
if (isUsingAliases()) {
context.append(alias).append('.');
}
- context.append(context.getQuotingSupport().generateColumnName(join.getSource()));
- }
- else {
- Map<String, String> multiColumnMatch = new HashMap<String, String>(joins
- .size() + 2);
+ context.append(context.getQuotingStrategy().quotedName(join.getSource()));
+ } else {
+ Map<String, String> multiColumnMatch = new HashMap<String, String>(joins.size() + 2);
for (DbJoin join : joins) {
- String column = isUsingAliases()
- ? alias + "." + join.getSourceName()
- : join.getSourceName();
+ String column = isUsingAliases() ? alias + "." + join.getSourceName() : join.getSourceName();
multiColumnMatch.put(join.getTargetName(), column);
}
- appendMultiColumnPath(EJBQLMultiColumnOperand.getPathOperand(
- context,
- multiColumnMatch));
+ appendMultiColumnPath(EJBQLMultiColumnOperand.getPathOperand(context, multiColumnMatch));
}
}
}
-
+
/**
- * Checks if the object relationship is flattened and then chooses
- * the corresponding db relationship. The last in idPath if isFlattened and
- * the first in list otherwise.
+ * Checks if the object relationship is flattened and then chooses the
+ * corresponding db relationship. The last in idPath if isFlattened and the
+ * first in list otherwise.
*
- * @param relationship the object relationship
+ * @param relationship
+ * the object relationship
*
* @return {@link DbRelationship}
*/
@@ -314,8 +282,7 @@ public abstract class EJBQLPathTranslato
String dbRelationshipPath = relationship.getDbRelationshipPath();
if (dbRelationshipPath.contains(".")) {
- String dbRelName = dbRelationshipPath.substring(dbRelationshipPath
- .lastIndexOf(".") + 1);
+ String dbRelName = dbRelationshipPath.substring(dbRelationshipPath.lastIndexOf(".") + 1);
for (DbRelationship dbR : dbRelationships) {
if (dbR.getName().equals(dbRelName)) {
return dbR;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java?rev=1449474&r1=1449473&r2=1449474&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java Sun Feb 24 13:05:14 2013
@@ -59,8 +59,7 @@ public class EJBQLSelectColumnsTranslato
@Override
public boolean visitAggregate(EJBQLExpression expression) {
- expression.visit(context.getTranslatorFactory().getAggregateColumnTranslator(
- context));
+ expression.visit(context.getTranslatorFactory().getAggregateColumnTranslator(context));
return false;
}
@@ -84,8 +83,8 @@ public class EJBQLSelectColumnsTranslato
final Map<String, String> fields = xfields;
- Collection<DbAttribute> dbAttr = ((ObjEntity) relationship
- .getTargetEntity()).getDbEntity().getAttributes();
+ Collection<DbAttribute> dbAttr = ((ObjEntity) relationship.getTargetEntity()).getDbEntity()
+ .getAttributes();
DbRelationship dbRelationship = relationship.getDbRelationships().get(0);
DbEntity table = (DbEntity) dbRelationship.getTargetEntity();
@@ -95,8 +94,8 @@ public class EJBQLSelectColumnsTranslato
this.resolveJoin(true);
}
- String alias = this.lastAlias != null ? lastAlias : context
- .getTableAlias(idPath, context.getQuotingSupport().generateTableName(table));
+ String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(idPath, context
+ .getQuotingStrategy().quotedFullyQualifiedName(table));
boolean first = true;
while (it.hasNext()) {
@@ -104,11 +103,8 @@ public class EJBQLSelectColumnsTranslato
context.append(!first ? ", " : " ");
DbAttribute dbAttribute = it.next();
- appendColumn(
- TypesMapping.getJavaBySqlType(dbAttribute.getType()),
- alias,
- dbAttribute,
- fields!=null?fields.get(dbAttribute.getName()):"");
+ appendColumn(TypesMapping.getJavaBySqlType(dbAttribute.getType()), alias, dbAttribute,
+ fields != null ? fields.get(dbAttribute.getName()) : "");
first = false;
}
@@ -118,44 +114,36 @@ public class EJBQLSelectColumnsTranslato
@Override
protected void processTerminatingAttribute(ObjAttribute attribute) {
DbEntity table = currentEntity.getDbEntity();
- String alias = this.lastAlias != null ? lastAlias : context
- .getTableAlias(idPath, context.getQuotingSupport().generateTableName(table));
+ String alias = this.lastAlias != null ? lastAlias : context.getTableAlias(idPath, context
+ .getQuotingStrategy().quotedFullyQualifiedName(table));
if (attribute.isFlattened()) {
Iterator<?> dbPathIterator = attribute.getDbPathIterator();
EJBQLTableId lhsId = new EJBQLTableId(idPath);
while (dbPathIterator.hasNext()) {
Object pathPart = dbPathIterator.next();
- // DbRelationships not processed, because they will be processed
+ // DbRelationships not processed, because they will be
+ // processed
// later when appending table
if (pathPart == null) {
- throw new CayenneRuntimeException(
- "ObjAttribute has no component: "
- + attribute.getName());
- }
- else if (pathPart instanceof DbAttribute) {
+ throw new CayenneRuntimeException("ObjAttribute has no component: " + attribute.getName());
+ } else if (pathPart instanceof DbAttribute) {
DbAttribute dbAttribute = (DbAttribute) pathPart;
- appendColumn(
- attribute.getType(),
- context.getTableAlias(
- lhsId.getEntityId(),
- context.getQuotingSupport()
- .generateTableName((DbEntity) dbAttribute.getEntity())),
- dbAttribute,
- context.isAppendingResultColumns() ? context
- .nextColumnAlias() : "");
+ appendColumn(attribute.getType(),
+ context.getTableAlias(lhsId.getEntityId(), context.getQuotingStrategy()
+ .quotedFullyQualifiedName((DbEntity) dbAttribute.getEntity())),
+ dbAttribute, context.isAppendingResultColumns() ? context.nextColumnAlias() : "");
}
}
- }
- else {
+ } else {
DbAttribute dbAttribute = attribute.getDbAttribute();
- appendColumn(attribute.getType(), alias, dbAttribute, context
- .isAppendingResultColumns() ? context.nextColumnAlias() : "");
+ appendColumn(attribute.getType(), alias, dbAttribute,
+ context.isAppendingResultColumns() ? context.nextColumnAlias() : "");
}
}
@@ -166,24 +154,18 @@ public class EJBQLSelectColumnsTranslato
@Override
public boolean visitIdentifier(EJBQLExpression expression) {
- expression.visit(context.getTranslatorFactory().getIdentifierColumnsTranslator(
- context));
+ expression.visit(context.getTranslatorFactory().getIdentifierColumnsTranslator(context));
return false;
}
- public void appendColumn(
- String javaType,
- String alias,
- DbAttribute dbAttribute,
- String columnAlias) {
+ public void appendColumn(String javaType, String alias, DbAttribute dbAttribute, String columnAlias) {
if (context.isAppendingResultColumns()) {
context.append(" #result('");
- }
- else {
+ } else {
context.append(' ');
}
- context.append(alias).append('.').append(context.getQuotingSupport().generateColumnName(dbAttribute));
+ context.append(alias).append('.').append(context.getQuotingStrategy().quotedName(dbAttribute));
if (context.isAppendingResultColumns()) {
// String columnAlias = context.nextColumnAlias();
@@ -191,15 +173,8 @@ public class EJBQLSelectColumnsTranslato
// TODO: andrus 6/27/2007 - the last parameter is an unofficial
// "jdbcType"
// pending CAY-813 implementation, switch to #column directive
- context
- .append("' '")
- .append(javaType)
- .append("' '")
- .append(columnAlias)
- .append("' '")
- .append(columnAlias)
- .append("' " + dbAttribute.getType())
- .append(")");
+ context.append("' '").append(javaType).append("' '").append(columnAlias).append("' '").append(columnAlias)
+ .append("' " + dbAttribute.getType()).append(")");
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java?rev=1449474&r1=1449473&r2=1449474&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java Sun Feb 24 13:05:14 2013
@@ -24,8 +24,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.dba.QuotingSupport;
+import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.ejbql.EJBQLCompiledExpression;
import org.apache.cayenne.ejbql.EJBQLException;
import org.apache.cayenne.map.DbEntity;
@@ -49,7 +48,7 @@ public class EJBQLTranslationContext {
protected Map<String, Object> namedParameters;
protected Map<Integer, Object> positionalParameters;
private EJBQLTranslatorFactory translatorFactory;
- private QuotingSupport quotingSupport;
+ private QuotingStrategy quotingStrategy;
private EntityResolver entityResolver;
private List<Object> resultSetMetadata;
@@ -72,7 +71,7 @@ public class EJBQLTranslationContext {
public EJBQLTranslationContext(EntityResolver entityResolver, EJBQLQuery query,
EJBQLCompiledExpression compiledExpression,
- EJBQLTranslatorFactory translatorFactory) {
+ EJBQLTranslatorFactory translatorFactory, QuotingStrategy quotingStrategy) {
this.entityResolver = entityResolver;
this.compiledExpression = compiledExpression;
@@ -84,8 +83,7 @@ public class EJBQLTranslationContext {
this.usingAliases = true;
this.caseInsensitive = false;
this.queryMetadata = query.getMetaData(entityResolver);
-
- this.quotingSupport = ((JdbcEJBQLTranslatorFactory) translatorFactory).getQuotingSupport();
+ this.quotingStrategy = quotingStrategy;
// buffer stack will hold named buffers during translation in the order they were
// requested
@@ -444,8 +442,8 @@ public class EJBQLTranslationContext {
this.caseInsensitive = caseInsensitive;
}
- public QuotingSupport getQuotingSupport() {
- return this.quotingSupport;
+ public QuotingStrategy getQuotingStrategy() {
+ return quotingStrategy;
}
public void onSubselect() {
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JdbcEJBQLTranslatorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JdbcEJBQLTranslatorFactory.java?rev=1449474&r1=1449473&r2=1449474&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JdbcEJBQLTranslatorFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JdbcEJBQLTranslatorFactory.java Sun Feb 24 13:05:14 2013
@@ -18,9 +18,6 @@
****************************************************************/
package org.apache.cayenne.access.jdbc;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.DefaultQuotingStrategy;
-import org.apache.cayenne.dba.QuotingSupport;
import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
/**
@@ -34,20 +31,6 @@ public class JdbcEJBQLTranslatorFactory
protected boolean caseInsensitive = false;
- protected QuotingSupport quotingSupport;
-
- public JdbcEJBQLTranslatorFactory() {
- initQuoting();
- }
-
- protected void initQuoting() {
- quotingSupport = new QuotingSupport(new DefaultQuotingStrategy());
- }
-
- public QuotingSupport getQuotingSupport() {
- return this.quotingSupport;
- }
-
public EJBQLJoinAppender getJoinAppender(EJBQLTranslationContext context) {
EJBQLJoinAppender appender = (EJBQLJoinAppender) context
.getAttribute(JOIN_APPENDER_KEY);
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java?rev=1449474&r1=1449473&r2=1449474&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java Sun Feb 24 13:05:14 2013
@@ -23,6 +23,7 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.cayenne.configuration.server.ServerRuntime;
+import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.ejbql.EJBQLCompiledExpression;
import org.apache.cayenne.ejbql.EJBQLParser;
@@ -38,17 +39,16 @@ public class EJBQLSelectTranslatorTest e
@Inject
private ServerRuntime runtime;
+ @Inject
+ private DbAdapter adapter;
+
private SQLTemplate translateSelect(String ejbql) {
return translateSelect(ejbql, Collections.EMPTY_MAP);
}
- private SQLTemplate translateSelect(
- String ejbql,
- final Map<Integer, Object> queryParameters) {
+ private SQLTemplate translateSelect(String ejbql, final Map<Integer, Object> queryParameters) {
EJBQLParser parser = EJBQLParserFactory.getParser();
- EJBQLCompiledExpression select = parser.compile(ejbql, runtime
- .getDataDomain()
- .getEntityResolver());
+ EJBQLCompiledExpression select = parser.compile(ejbql, runtime.getDataDomain().getEntityResolver());
EJBQLQuery query = new EJBQLQuery(ejbql) {
@Override
@@ -57,9 +57,8 @@ public class EJBQLSelectTranslatorTest e
}
};
- EJBQLTranslationContext tr = new EJBQLTranslationContext(runtime
- .getDataDomain()
- .getEntityResolver(), query, select, new JdbcEJBQLTranslatorFactory());
+ EJBQLTranslationContext tr = new EJBQLTranslationContext(runtime.getDataDomain().getEntityResolver(), query,
+ select, new JdbcEJBQLTranslatorFactory(), adapter.getQuotingStrategy());
select.getExpression().visit(new EJBQLSelectTranslator(tr));
return tr.getQuery();
}
@@ -68,7 +67,8 @@ public class EJBQLSelectTranslatorTest e
SQLTemplate query = translateSelect("select a from Artist a");
String sql = query.getDefaultTemplate();
- // column order is unpredictable, just need to ensure that they are all there
+ // column order is unpredictable, just need to ensure that they are all
+ // there
assertTrue(sql, sql.startsWith("SELECT"));
assertTrue(sql, sql.indexOf("t0.ARTIST_ID") > 0);
assertTrue(sql, sql.indexOf("t0.ARTIST_NAME") > 0);
@@ -84,10 +84,8 @@ public class EJBQLSelectTranslatorTest e
assertTrue(sql, sql.startsWith("SELECT"));
- assertTrue(sql, sql
- .indexOf("INNER JOIN PAINTING t1 ON (t0.ARTIST_ID = t1.ARTIST_ID)") > 0);
- assertTrue(sql, sql
- .indexOf("INNER JOIN PAINTING t2 ON (t0.ARTIST_ID = t2.ARTIST_ID)") > 0);
+ assertTrue(sql, sql.indexOf("INNER JOIN PAINTING t1 ON (t0.ARTIST_ID = t1.ARTIST_ID)") > 0);
+ assertTrue(sql, sql.indexOf("INNER JOIN PAINTING t2 ON (t0.ARTIST_ID = t2.ARTIST_ID)") > 0);
}
public void testSelectImplicitColumnJoins() throws Exception {
@@ -97,7 +95,8 @@ public class EJBQLSelectTranslatorTest e
assertTrue(sql, sql.startsWith("SELECT"));
- // check that overlapping implicit and explicit joins did not result in duplicates
+ // check that overlapping implicit and explicit joins did not result in
+ // duplicates
assertTrue(sql, sql.contains("INNER JOIN GALLERY"));
assertTrue(sql, sql.contains("INNER JOIN PAINTING"));
@@ -123,8 +122,7 @@ public class EJBQLSelectTranslatorTest e
assertTrue(sql, sql.startsWith("SELECT"));
- assertTrue(sql, sql.endsWith(" FROM ARTIST t0 WHERE t0.ARTIST_NAME ="
- + " #bind('Dali' 'VARCHAR')"));
+ assertTrue(sql, sql.endsWith(" FROM ARTIST t0 WHERE t0.ARTIST_NAME =" + " #bind('Dali' 'VARCHAR')"));
}
public void testSelectFromWhereOrEqual() {
@@ -133,8 +131,7 @@ public class EJBQLSelectTranslatorTest e
String sql = query.getDefaultTemplate();
SQLTemplate query1 = translateSelect("select a from Artist a where a.artistName = 'Picasso' "
- + "or a.artistName = 'Malevich' "
- + "or a.artistName = 'Dali'");
+ + "or a.artistName = 'Malevich' " + "or a.artistName = 'Dali'");
String sql1 = query1.getDefaultTemplate();
assertTrue(sql, sql.startsWith("SELECT"));
@@ -153,8 +150,7 @@ public class EJBQLSelectTranslatorTest e
String sql = query.getDefaultTemplate();
SQLTemplate query1 = translateSelect("select a from Artist a where a.artistName = 'Picasso' "
- + "and a.artistName = 'Malevich' "
- + "and a.artistName = 'Dali'");
+ + "and a.artistName = 'Malevich' " + "and a.artistName = 'Dali'");
String sql1 = query1.getDefaultTemplate();
assertTrue(sql, sql.startsWith("SELECT"));
@@ -171,8 +167,7 @@ public class EJBQLSelectTranslatorTest e
String sql = query.getDefaultTemplate();
assertTrue(sql, sql.startsWith("SELECT"));
- assertTrue(sql, sql.endsWith("WHERE NOT "
- + "t0.ARTIST_NAME = #bind('Dali' 'VARCHAR')"));
+ assertTrue(sql, sql.endsWith("WHERE NOT " + "t0.ARTIST_NAME = #bind('Dali' 'VARCHAR')"));
}
public void testSelectFromWhereGreater() {
@@ -228,36 +223,31 @@ public class EJBQLSelectTranslatorTest e
SQLTemplate query = translateSelect("select p from Painting p where p.paintingTitle like 'Stuff'");
String sql = query.getDefaultTemplate();
- assertTrue(sql, sql.endsWith("WHERE t0.PAINTING_TITLE "
- + "LIKE #bind('Stuff' 'VARCHAR')"));
+ assertTrue(sql, sql.endsWith("WHERE t0.PAINTING_TITLE " + "LIKE #bind('Stuff' 'VARCHAR')"));
}
public void testSelectFromWhereNotLike() {
SQLTemplate query = translateSelect("select p from Painting p where p.paintingTitle NOT like 'Stuff'");
String sql = query.getDefaultTemplate();
- assertTrue(sql, sql.endsWith("WHERE t0.PAINTING_TITLE "
- + "NOT LIKE #bind('Stuff' 'VARCHAR')"));
+ assertTrue(sql, sql.endsWith("WHERE t0.PAINTING_TITLE " + "NOT LIKE #bind('Stuff' 'VARCHAR')"));
}
public void testSelectPositionalParameters() {
Map<Integer, Object> params = new HashMap<Integer, Object>();
params.put(new Integer(1), "X");
params.put(new Integer(2), "Y");
- SQLTemplate query = translateSelect(
- "select a from Artist a where a.artistName = ?1 or a.artistName = ?2",
+ SQLTemplate query = translateSelect("select a from Artist a where a.artistName = ?1 or a.artistName = ?2",
params);
String sql = query.getDefaultTemplate();
- assertTrue(sql, sql
- .endsWith("t0.ARTIST_NAME = #bind($id0) OR t0.ARTIST_NAME = #bind($id1)"));
+ assertTrue(sql, sql.endsWith("t0.ARTIST_NAME = #bind($id0) OR t0.ARTIST_NAME = #bind($id1)"));
}
public void testMax() {
SQLTemplate query = translateSelect("select max(p.estimatedPrice) from Painting p");
String sql = query.getDefaultTemplate();
- assertTrue(sql, sql.startsWith("SELECT "
- + "#result('MAX(t0.ESTIMATED_PRICE)' 'java.math.BigDecimal' 'sc0') "
+ assertTrue(sql, sql.startsWith("SELECT " + "#result('MAX(t0.ESTIMATED_PRICE)' 'java.math.BigDecimal' 'sc0') "
+ "FROM PAINTING t0"));
}
@@ -265,11 +255,9 @@ public class EJBQLSelectTranslatorTest e
SQLTemplate query = translateSelect("select sum( distinct p.estimatedPrice) from Painting p");
String sql = query.getDefaultTemplate();
- assertTrue(
- sql,
- sql
- .startsWith("SELECT #result('SUM(DISTINCT t0.ESTIMATED_PRICE)' 'java.math.BigDecimal' 'sc0') "
- + "FROM PAINTING t0"));
+ assertTrue(sql,
+ sql.startsWith("SELECT #result('SUM(DISTINCT t0.ESTIMATED_PRICE)' 'java.math.BigDecimal' 'sc0') "
+ + "FROM PAINTING t0"));
}
public void testColumnPaths() {
@@ -291,19 +279,17 @@ public class EJBQLSelectTranslatorTest e
return i;
}
- // if parameter value is null (in this test x := null) we will generate "IS NULL"
+ // if parameter value is null (in this test x := null) we will generate
+ // "IS NULL"
public void testEqualsNullParameter() {
String ejbql = "select p from Painting p WHERE p.toArtist=:x";
EJBQLParser parser = EJBQLParserFactory.getParser();
- EJBQLCompiledExpression select = parser.compile(ejbql, runtime
- .getDataDomain()
- .getEntityResolver());
+ EJBQLCompiledExpression select = parser.compile(ejbql, runtime.getDataDomain().getEntityResolver());
EJBQLQuery query = new EJBQLQuery(ejbql);
query.setParameter("x", null);
- EJBQLTranslationContext tr = new EJBQLTranslationContext(runtime
- .getDataDomain()
- .getEntityResolver(), query, select, new JdbcEJBQLTranslatorFactory());
+ EJBQLTranslationContext tr = new EJBQLTranslationContext(runtime.getDataDomain().getEntityResolver(), query,
+ select, new JdbcEJBQLTranslatorFactory(), adapter.getQuotingStrategy());
select.getExpression().visit(new EJBQLSelectTranslator(tr));
String sql = tr.getQuery().getDefaultTemplate();
assertTrue(sql, sql.endsWith("t0.ARTIST_ID IS NULL"));
@@ -313,19 +299,15 @@ public class EJBQLSelectTranslatorTest e
public void testEqualsNullAndNotNullParameter() {
String ejbql = "select p from Painting p WHERE p.toArtist=:x OR p.toArtist.artistName=:b";
EJBQLParser parser = EJBQLParserFactory.getParser();
- EJBQLCompiledExpression select = parser.compile(ejbql, runtime
- .getDataDomain()
- .getEntityResolver());
+ EJBQLCompiledExpression select = parser.compile(ejbql, runtime.getDataDomain().getEntityResolver());
EJBQLQuery query = new EJBQLQuery(ejbql);
query.setParameter("x", null);
query.setParameter("b", "Y");
- EJBQLTranslationContext tr = new EJBQLTranslationContext(runtime
- .getDataDomain()
- .getEntityResolver(), query, select, new JdbcEJBQLTranslatorFactory());
+ EJBQLTranslationContext tr = new EJBQLTranslationContext(runtime.getDataDomain().getEntityResolver(), query,
+ select, new JdbcEJBQLTranslatorFactory(), adapter.getQuotingStrategy());
select.getExpression().visit(new EJBQLSelectTranslator(tr));
String sql = tr.getQuery().getDefaultTemplate();
- assertTrue(sql, sql
- .endsWith("t0.ARTIST_ID IS NULL OR t1.ARTIST_NAME = #bind($id0)"));
+ assertTrue(sql, sql.endsWith("t0.ARTIST_ID IS NULL OR t1.ARTIST_NAME = #bind($id0)"));
}
}