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/06/11 12:18:37 UTC
svn commit: r546073 -
/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/
Author: aadamchik
Date: Mon Jun 11 03:18:35 2007
New Revision: 546073
URL: http://svn.apache.org/viewvc?view=rev&rev=546073
Log:
refactoring of EJBQL translator - consistent use of the newly introduced "context" in child translators
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/EJBQLSelectColumnsTranslator.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/access/jdbc/EJBQLTranslationContext.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=546073&r1=546072&r2=546073
==============================================================================
--- 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 Jun 11 03:18:35 2007
@@ -31,10 +31,10 @@
*/
class EJBQLConditionTranslator extends EJBQLDelegatingVisitor {
- private EJBQLSelectTranslator parent;
+ private EJBQLTranslationContext context;
- EJBQLConditionTranslator(EJBQLSelectTranslator parent) {
- this.parent = parent;
+ EJBQLConditionTranslator(EJBQLTranslationContext context) {
+ this.context = context;
}
public boolean visitAnd(EJBQLExpression expression, int finishedChildIndex) {
@@ -47,15 +47,15 @@
switch (finishedChildIndex) {
case 0:
if (expression.isNegated()) {
- parent.getParent().getBuffer().append(" NOT");
+ context.append(" NOT");
}
- parent.getParent().getBuffer().append(" BETWEEN #bind(");
+ context.append(" BETWEEN #bind(");
break;
case 1:
- parent.getParent().getBuffer().append(") AND #bind(");
+ context.append(") AND #bind(");
break;
case 2:
- parent.getParent().getBuffer().append(")");
+ context.append(")");
break;
}
@@ -71,10 +71,10 @@
setDelegate(null);
switch (finishedChildIndex) {
case 0:
- parent.getParent().getBuffer().append(" #bindEqual(");
+ context.append(" #bindEqual(");
break;
case 1:
- parent.getParent().getBuffer().append(")");
+ context.append(")");
break;
}
@@ -82,7 +82,7 @@
}
public boolean visitNot(EJBQLExpression expression) {
- parent.getParent().getBuffer().append(" NOT");
+ context.append(" NOT");
return true;
}
@@ -90,10 +90,10 @@
setDelegate(null);
switch (finishedChildIndex) {
case 0:
- parent.getParent().getBuffer().append(" #bindNotEqual(");
+ context.append(" #bindNotEqual(");
break;
case 1:
- parent.getParent().getBuffer().append(")");
+ context.append(")");
break;
}
@@ -104,10 +104,10 @@
setDelegate(null);
switch (finishedChildIndex) {
case 0:
- parent.getParent().getBuffer().append(" > #bind(");
+ context.append(" > #bind(");
break;
case 1:
- parent.getParent().getBuffer().append(")");
+ context.append(")");
break;
}
@@ -118,10 +118,10 @@
setDelegate(null);
switch (finishedChildIndex) {
case 0:
- parent.getParent().getBuffer().append(" >= #bind(");
+ context.append(" >= #bind(");
break;
case 1:
- parent.getParent().getBuffer().append(")");
+ context.append(")");
break;
}
@@ -132,10 +132,10 @@
setDelegate(null);
switch (finishedChildIndex) {
case 0:
- parent.getParent().getBuffer().append(" <= #bind(");
+ context.append(" <= #bind(");
break;
case 1:
- parent.getParent().getBuffer().append(")");
+ context.append(")");
break;
}
@@ -146,10 +146,10 @@
setDelegate(null);
switch (finishedChildIndex) {
case 0:
- parent.getParent().getBuffer().append(" < #bind(");
+ context.append(" < #bind(");
break;
case 1:
- parent.getParent().getBuffer().append(")");
+ context.append(")");
break;
}
@@ -161,12 +161,12 @@
switch (finishedChildIndex) {
case 0:
if (expression.isNegated()) {
- parent.getParent().getBuffer().append(" NOT");
+ context.append(" NOT");
}
- parent.getParent().getBuffer().append(" LIKE #bind(");
+ context.append(" LIKE #bind(");
break;
case 1:
- parent.getParent().getBuffer().append(")");
+ context.append(")");
break;
}
@@ -176,7 +176,7 @@
protected void afterChild(EJBQLExpression e, String text, int childIndex) {
if (childIndex >= 0) {
if (childIndex + 1 < e.getChildrenCount()) {
- parent.getParent().getBuffer().append(text);
+ context.append(text);
}
// reset child-specific delegate
@@ -186,7 +186,7 @@
public boolean visitPath(EJBQLPath expression, int finishedChildIndex) {
if (finishedChildIndex < 0) {
- setDelegate(new EJBQLPathTranslator(parent));
+ setDelegate(new EJBQLPathTranslator(context));
return true;
}
else {
@@ -196,20 +196,19 @@
public boolean visitStringLiteral(EJBQLExpression expression) {
if (expression.getText() == null) {
- parent.getParent().getBuffer().append("null");
+ context.append("null");
}
else {
// note that String Literal text is already wrapped in single quotes, with
// quotes that are part of the string escaped.
- parent.getParent().getBuffer().append(expression.getText()).append(
- " 'VARCHAR'");
+ context.append(expression.getText()).append(" 'VARCHAR'");
}
return true;
}
public boolean visitIntegerLiteral(EJBQLExpression expression) {
if (expression.getText() == null) {
- parent.getParent().getBuffer().append("null");
+ context.append("null");
}
else {
Object value;
@@ -221,15 +220,15 @@
throw new EJBQLException("Invalid integer: " + expression.getText());
}
- String var = parent.getParent().bindParameter(value);
- parent.getParent().getBuffer().append('$').append(var).append(" 'INTEGER'");
+ String var = context.bindParameter(value);
+ context.append('$').append(var).append(" 'INTEGER'");
}
return true;
}
public boolean visitDecimalLiteral(EJBQLExpression expression) {
if (expression.getText() == null) {
- parent.getParent().getBuffer().append("null");
+ context.append("null");
}
else {
Object value;
@@ -241,12 +240,12 @@
throw new EJBQLException("Invalid decimal: " + expression.getText());
}
- String var = parent.getParent().bindParameter(value);
- parent.getParent().getBuffer().append('$').append(var).append(" 'DECIMAL'");
+ String var = context.bindParameter(value);
+ context.append('$').append(var).append(" 'DECIMAL'");
}
return true;
}
-
+
public boolean visitPatternValue(EJBQLExpression expression) {
// TODO: andrus 3/25/2007 - implement me
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=546073&r1=546072&r2=546073
==============================================================================
--- 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 Jun 11 03:18:35 2007
@@ -31,18 +31,18 @@
public class EJBQLFromTranslator extends EJBQLBaseVisitor {
- private EJBQLSelectTranslator parent;
+ private EJBQLTranslationContext context;
private String lastTableAlias;
- public EJBQLFromTranslator(EJBQLSelectTranslator parent) {
+ public EJBQLFromTranslator(EJBQLTranslationContext context) {
super(true);
- this.parent = parent;
+ this.context = context;
}
public boolean visitFromItem(EJBQLFromItem expression, int finishedChildIndex) {
if (finishedChildIndex < 0) {
if (lastTableAlias != null) {
- parent.getParent().getBuffer().append(',');
+ context.append(',');
}
lastTableAlias = appendTable(expression.getId());
@@ -83,14 +83,12 @@
}
String sourceAlias = lastTableAlias;
- StringBuffer buffer = parent.getParent().getBuffer();
- buffer.append(" ").append(semantics);
+ context.append(" ").append(semantics);
String targetAlias = appendTable(id);
- buffer.append(" ON (");
+ context.append(" ON (");
- ObjRelationship incoming = parent
- .getParent()
+ ObjRelationship incoming = context
.getCompiledExpression()
.getIncomingRelationship(id);
if (incoming == null) {
@@ -103,36 +101,40 @@
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());
+ context
+ .append(sourceAlias)
+ .append('.')
+ .append(dbJoin.getSourceName())
+ .append(" = ")
+ .append(targetAlias)
+ .append('.')
+ .append(dbJoin.getTargetName());
}
while (it.hasNext()) {
- buffer.append(", ");
+ context.append(", ");
DbJoin dbJoin = (DbJoin) it.next();
- buffer.append(sourceAlias).append('.').append(dbJoin.getSourceName()).append(
- " = ").append(targetAlias).append('.').append(dbJoin.getTargetName());
+ context
+ .append(sourceAlias)
+ .append('.')
+ .append(dbJoin.getSourceName())
+ .append(" = ")
+ .append(targetAlias)
+ .append('.')
+ .append(dbJoin.getTargetName());
}
- buffer.append(")");
+ context.append(")");
this.lastTableAlias = targetAlias;
}
private String appendTable(String id) {
- ClassDescriptor descriptor = parent
- .getParent()
- .getCompiledExpression()
- .getEntityDescriptor(id);
+ ClassDescriptor descriptor = context.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);
+ String alias = context.createAlias(id, tableName);
+ context.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=546073&r1=546072&r2=546073
==============================================================================
--- 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 Jun 11 03:18:35 2007
@@ -30,14 +30,14 @@
class EJBQLPathTranslator extends EJBQLBaseVisitor {
- private EJBQLSelectTranslator parent;
+ private EJBQLTranslationContext context;
private ObjEntity currentEntity;
private String lastPathComponent;
private String idPath;
- EJBQLPathTranslator(EJBQLSelectTranslator parent) {
+ EJBQLPathTranslator(EJBQLTranslationContext context) {
super(true);
- this.parent = parent;
+ this.context = context;
}
public boolean visitPath(EJBQLPath expression, int finishedChildIndex) {
@@ -55,10 +55,8 @@
}
public boolean visitIdentifier(EJBQLExpression expression) {
- ClassDescriptor descriptor = parent
- .getParent()
- .getCompiledExpression()
- .getEntityDescriptor(expression.getText());
+ ClassDescriptor descriptor = context.getCompiledExpression().getEntityDescriptor(
+ expression.getText());
if (descriptor == null) {
throw new EJBQLException("Invalid identification variable: "
+ expression.getText());
@@ -98,10 +96,8 @@
.getAttribute(lastPathComponent);
DbEntity table = currentEntity.getDbEntity();
- String alias = parent.getParent().createAlias(
- idPath,
- table.getFullyQualifiedName());
- parent.getParent().getBuffer().append(' ').append(alias).append('.').append(
+ String alias = context.createAlias(idPath, table.getFullyQualifiedName());
+ context.append(' ').append(alias).append('.').append(
attribute.getDbAttributeName());
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java?view=diff&rev=546073&r1=546072&r2=546073
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java Mon Jun 11 03:18:35 2007
@@ -18,13 +18,17 @@
****************************************************************/
package org.apache.cayenne.access.jdbc;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
import org.apache.cayenne.ejbql.EJBQLExpression;
import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbJoin;
import org.apache.cayenne.map.DbRelationship;
import org.apache.cayenne.map.ObjAttribute;
@@ -44,11 +48,11 @@
*/
class EJBQLSelectColumnsTranslator extends EJBQLBaseVisitor {
- private EJBQLSelectTranslator parent;
+ private EJBQLTranslationContext context;
- EJBQLSelectColumnsTranslator(EJBQLSelectTranslator parent) {
+ EJBQLSelectColumnsTranslator(EJBQLTranslationContext context) {
super(false);
- this.parent = parent;
+ this.context = context;
}
public boolean visitSelectExpression(EJBQLExpression expression) {
@@ -60,10 +64,8 @@
final String idVar = expression.getText();
// append all table columns
- ClassDescriptor descriptor = parent
- .getParent()
- .getCompiledExpression()
- .getEntityDescriptor(idVar);
+ ClassDescriptor descriptor = context.getCompiledExpression().getEntityDescriptor(
+ idVar);
PropertyVisitor visitor = new PropertyVisitor() {
@@ -83,7 +85,7 @@
"ObjAttribute has no DbAttribute: " + oa.getName());
}
- parent.appendColumn(idVar, dbAttr, oa.getType());
+ appendColumn(idVar, dbAttr, oa.getType());
}
}
return true;
@@ -109,7 +111,7 @@
DbJoin join = (DbJoin) joins.get(i);
DbAttribute src = join.getSource();
- parent.appendColumn(idVar, src);
+ appendColumn(idVar, src);
}
}
};
@@ -119,5 +121,41 @@
descriptor.visitAllProperties(visitor);
return true;
+ }
+
+ private void appendColumn(String identifier, DbAttribute column) {
+ appendColumn(identifier, column, TypesMapping.getJavaBySqlType(column.getType()));
+ }
+
+ private void appendColumn(String identifier, DbAttribute column, String javaType) {
+ DbEntity table = (DbEntity) column.getEntity();
+ String alias = context.createAlias(identifier, table.getFullyQualifiedName());
+ String columnName = alias + "." + column.getName();
+
+ Set columns = getColumns();
+
+ if (columns.add(columnName)) {
+ // using #result directive:
+ // 1. to ensure that DB default captalization rules won't lead to changing
+ // result columns capitalization, as #result() gives SQLTemplate a hint as to
+ // what name is expected by the caller.
+ // 2. to ensure proper type conversion
+ context.append(columns.size() > 1 ? ", " : " ").append("#result('").append(
+ columnName).append("' '").append(javaType).append("' '").append(
+ column.getName()).append("')");
+ }
+ }
+
+ private Set getColumns() {
+
+ String columnsKey = getClass().getName() + ":columns";
+ Set columns = (Set) context.getTranslationValue(columnsKey);
+
+ if (columns == null) {
+ columns = new HashSet();
+ context.putTranslationVariable(columnsKey, columns);
+ }
+
+ return columns;
}
}
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=546073&r1=546072&r2=546073
==============================================================================
--- 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 Jun 11 03:18:35 2007
@@ -18,14 +18,8 @@
****************************************************************/
package org.apache.cayenne.access.jdbc;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.ejbql.EJBQLDelegatingVisitor;
import org.apache.cayenne.ejbql.EJBQLExpression;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
/**
* A translator of EJBQL select statements into SQL.
@@ -35,70 +29,37 @@
*/
class EJBQLSelectTranslator extends EJBQLDelegatingVisitor {
- private EJBQLTranslationContext parent;
- private Set columns;
-
- EJBQLSelectTranslator(EJBQLTranslationContext parent) {
- this.parent = parent;
- }
-
- void appendColumn(String identifier, DbAttribute column) {
- appendColumn(identifier, column, TypesMapping.getJavaBySqlType(column.getType()));
- }
+ private EJBQLTranslationContext context;
- void appendColumn(String identifier, DbAttribute column, String javaType) {
- DbEntity table = (DbEntity) column.getEntity();
- String alias = parent.createAlias(identifier, table.getFullyQualifiedName());
- String columnName = alias + "." + column.getName();
-
- if (columns == null) {
- columns = new HashSet();
- }
-
- if (columns.add(columnName)) {
- // using #result directive:
- // 1. to ensure that DB default captalization rules won't lead to changing
- // result columns capitalization, as #result() gives SQLTemplate a hint as to
- // what name is expected by the caller.
- // 2. to ensure proper type conversion
- parent
- .getBuffer()
- .append(columns.size() > 1 ? ", " : " ")
- .append("#result('")
- .append(columnName)
- .append("' '")
- .append(javaType)
- .append("' '")
- .append(column.getName())
- .append("')");
- }
+ EJBQLSelectTranslator(EJBQLTranslationContext context) {
+ this.context = context;
}
- EJBQLTranslationContext getParent() {
- return parent;
+ EJBQLTranslationContext getContext() {
+ return context;
}
public boolean visitDistinct(EJBQLExpression expression) {
- parent.getBuffer().append(" DISTINCT");
+ context.append(" DISTINCT");
return true;
}
public boolean visitFrom(EJBQLExpression expression) {
- parent.getBuffer().append(" FROM");
- setDelegate(new EJBQLFromTranslator(this));
+ context.append(" FROM");
+ setDelegate(new EJBQLFromTranslator(context));
return true;
}
public boolean visitOrderBy(EJBQLExpression expression) {
- parent.getBuffer().append(" ORDER BY");
+ context.append(" ORDER BY");
setDelegate(new EJBQLSelectOrderByTranslator());
return true;
}
public boolean visitSelect(EJBQLExpression expression, int finishedChildIndex) {
if (finishedChildIndex < 0) {
- parent.getBuffer().append("SELECT");
- setDelegate(new EJBQLSelectColumnsTranslator(this));
+ context.append("SELECT");
+ setDelegate(new EJBQLSelectColumnsTranslator(context));
}
return true;
@@ -106,8 +67,8 @@
public boolean visitWhere(EJBQLExpression expression, int finishedChildIndex) {
if (finishedChildIndex < 0) {
- parent.getBuffer().append(" WHERE");
- setDelegate(new EJBQLConditionTranslator(this));
+ context.append(" WHERE");
+ setDelegate(new EJBQLConditionTranslator(context));
}
return true;
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java?view=diff&rev=546073&r1=546072&r2=546073
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java Mon Jun 11 03:18:35 2007
@@ -36,6 +36,7 @@
private Map bindingVariables;
private StringBuffer buffer;
private EJBQLCompiledExpression compiledExpression;
+ private Map translationVariables;
EJBQLTranslationContext(EJBQLCompiledExpression compiledExpression) {
this.compiledExpression = compiledExpression;
@@ -51,8 +52,33 @@
return query;
}
- StringBuffer getBuffer() {
- return buffer;
+ void putTranslationVariable(String var, Object value) {
+ if (translationVariables == null) {
+ translationVariables = new HashMap();
+ }
+
+ translationVariables.put(var, value);
+ }
+
+ Object getTranslationValue(String var) {
+ return translationVariables != null ? translationVariables.get(var) : null;
+ }
+
+ /**
+ * Appends a piece of SQL to the internal buffer.
+ */
+ EJBQLTranslationContext append(String chunk) {
+ buffer.append(chunk);
+ return this;
+ }
+
+ /**
+ * Appends a piece of SQL to the internal buffer.
+ */
+
+ public EJBQLTranslationContext append(char chunk) {
+ buffer.append(chunk);
+ return this;
}
EJBQLCompiledExpression getCompiledExpression() {