EclipseLink 1.0_1.0M2 API Reference - Incubation

org.eclipse.persistence.expressions
Class ExpressionBuilder

java.lang.Object
  extended by ObjectExpression
      extended by org.eclipse.persistence.expressions.ExpressionBuilder

public class ExpressionBuilder
extends ObjectExpression

Purpose: Allow for instances of expression to be created. Expressions are Java object-level representations of SQL "where" clauses. The expressions attempt to mirror Java code as closely as possible.

Example:

ExpressionBuilder employee = new ExpressionBuilder(); employee.get("firstName").equal("Bob").and(employee.get("lastName").equal("Smith")) >> equivalent Java code: (employee.getFirstName().equals("Bob")) && (employee.getLastName().equals("Smith")) >> equivalent SQL: (F_NAME = 'Bob') AND (L_NAME = 'Smith')

See Also:
Expression

Field Summary
protected  DatabaseTable aliasedViewTable
           
protected  java.lang.Class queryClass
           
protected  AbstractSession session
           
protected  SQLSelectStatement statement
           
protected  DatabaseTable viewTable
           
protected  boolean wasAdditionJoinCriteriaUsed
           
protected  boolean wasQueryClassSetInternally
           
 
Constructor Summary
ExpressionBuilder()
          PUBLIC: Create a new ExpressionBuilder.
ExpressionBuilder(java.lang.Class queryClass)
          ADVANCED: Create a new ExpressionBuilder representing instances of the argument class.
 
Method Summary
 DatabaseTable aliasForTable(DatabaseTable table)
          INTERNAL: Find the alias for a given table.
 int assignTableAliasesStartingAt(int initialValue)
          INTERNAL: Assign aliases to any tables which I own.
 java.lang.String descriptionOfNodeType()
          INTERNAL: Used for debug printing.
 boolean doesNotRepresentAnObjectInTheQuery()
          INTERNAL: There are cases (which we might want to eliminate?)
 boolean equals(java.lang.Object expression)
          INTERNAL: Return if the expression is equal to the other.
 DatabaseTable getAliasedViewTable()
          INTERNAL:
 ExpressionBuilder getBuilder()
          INTERNAL: Return the expression builder which is the ultimate base of this expression, or null if there isn't one (shouldn't happen if we start from a root)
 ClassDescriptor getDescriptor()
          INTERNAL: Only usable after the session and class have been set.
 java.lang.Class getQueryClass()
          INTERNAL:
 AbstractSession getSession()
          INTERNAL:
 SQLSelectStatement getStatement()
          INTERNAL: Return the statement that expression is for.
 DatabaseTable getViewTable()
          INTERNAL:
 boolean hasViewTable()
          INTERNAL:
 boolean isExpressionBuilder()
          INTERNAL:
 Expression normalize(ExpressionNormalizer normalizer)
          INTERNAL: Normalize the expression into a printable structure.
 void printJava(ExpressionJavaPrinter printer)
          INTERNAL: Print java
 Expression rebuildOn(Expression newBase)
          INTERNAL: This expression is built on a different base than the one we want.
protected  Expression registerIn(java.util.Dictionary alreadyDone)
          INTERNAL: Override Expression.registerIn to check if the new base expression has already been provided for the clone.
 void setQueryClass(java.lang.Class queryClass)
          INTERNAL: Set the class which this node represents.
 void setSession(AbstractSession session)
          INTERNAL: Set the session in which we expect this expression to be translated.
 void setStatement(SQLSelectStatement statement)
          INTERNAL: Set the statement that expression is for.
 void setViewTable(DatabaseTable theTable)
          INTERNAL: This expression represents something read through a view table.
 void setWasAdditionJoinCriteriaUsed(boolean joinCriteriaUsed)
          INTERNAL: If the additional Join Criteria for the class this builder represents has been added to the statement then mark this as true.
 Expression twistedForBaseAndContext(Expression newBase, Expression context)
          INTERNAL: Rebuild myself against the base, with the values of parameters supplied by the context expression.
 java.lang.Object valueFromObject(java.lang.Object object, AbstractSession session, AbstractRecord translationRow, int valueHolderPolicy, boolean isObjectUnregistered)
          INTERNAL: The expression builder represent the entire object, just return it.
 boolean wasAdditionJoinCriteriaUsed()
          INTERNAL: If the additional Join Criteria for the class this builder represents has been added to the statement this method will return true;
 boolean wasQueryClassSetInternally()
          INTERNAL: Returns true if TopLink set the query class as appoased to the customer.
 void writeDescriptionOn(java.io.BufferedWriter writer)
          INTERNAL: For debug printing purposes.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

session

protected transient AbstractSession session

queryClass

protected java.lang.Class queryClass

statement

protected SQLSelectStatement statement

viewTable

protected DatabaseTable viewTable

aliasedViewTable

protected DatabaseTable aliasedViewTable

wasQueryClassSetInternally

protected boolean wasQueryClassSetInternally

wasAdditionJoinCriteriaUsed

protected boolean wasAdditionJoinCriteriaUsed
Constructor Detail

ExpressionBuilder

public ExpressionBuilder()
PUBLIC: Create a new ExpressionBuilder.


ExpressionBuilder

public ExpressionBuilder(java.lang.Class queryClass)
ADVANCED: Create a new ExpressionBuilder representing instances of the argument class. This can be used for the purpose of parallel expressions. This is a type of query that searches on the relationship between to un-related objects.

Method Detail

equals

public boolean equals(java.lang.Object expression)
INTERNAL: Return if the expression is equal to the other. This is used to allow dynamic expression's SQL to be cached.


aliasForTable

public DatabaseTable aliasForTable(DatabaseTable table)
INTERNAL: Find the alias for a given table. Handle the special case where we are bogus and it should be aliased against our derived tables instead.


assignTableAliasesStartingAt

public int assignTableAliasesStartingAt(int initialValue)
INTERNAL: Assign aliases to any tables which I own. Start with t(initialValue), and return the new value of the counter , i.e. if initialValue is one and I have tables ADDRESS and EMPLOYEE I will assign them t1 and t2 respectively, and return 3.


descriptionOfNodeType

public java.lang.String descriptionOfNodeType()
INTERNAL: Used for debug printing.


doesNotRepresentAnObjectInTheQuery

public boolean doesNotRepresentAnObjectInTheQuery()
INTERNAL: There are cases (which we might want to eliminate?) where the expression builder doesn't actually correspond to an object to be read. Mostly this is the case where it's a data query in terms of tables, and the builder is only there to provide a base. It might be better to make tables able to serve as their own base, but it's very nice to have a known unique, shared base. In the meantime, this is a special case to make sure the builder doesn't get tables assigned.


getAliasedViewTable

public DatabaseTable getAliasedViewTable()
INTERNAL:


getBuilder

public ExpressionBuilder getBuilder()
INTERNAL: Return the expression builder which is the ultimate base of this expression, or null if there isn't one (shouldn't happen if we start from a root)


getDescriptor

public ClassDescriptor getDescriptor()
INTERNAL: Only usable after the session and class have been set. Return the descriptor for the class this node represents.


getQueryClass

public java.lang.Class getQueryClass()
INTERNAL:


getSession

public AbstractSession getSession()
INTERNAL:


getStatement

public SQLSelectStatement getStatement()
INTERNAL: Return the statement that expression is for. This is used for the context in subselects.


getViewTable

public DatabaseTable getViewTable()
INTERNAL:


hasViewTable

public boolean hasViewTable()
INTERNAL:


isExpressionBuilder

public boolean isExpressionBuilder()
INTERNAL:


normalize

public Expression normalize(ExpressionNormalizer normalizer)
INTERNAL: Normalize the expression into a printable structure. Any joins must be added to form a new root.


printJava

public void printJava(ExpressionJavaPrinter printer)
INTERNAL: Print java


rebuildOn

public Expression rebuildOn(Expression newBase)
INTERNAL: This expression is built on a different base than the one we want. Rebuild it and return the root of the new tree This assumes that the original expression has only a single builder.


registerIn

protected Expression registerIn(java.util.Dictionary alreadyDone)
INTERNAL: Override Expression.registerIn to check if the new base expression has already been provided for the clone.

See Also:
Expression.cloneUsing(Expression)
Related Bugs:
2637484 INVALID QUERY KEY EXCEPTION THROWN USING BATCH READS AND PARALLEL EXPRESSIONS

setQueryClass

public void setQueryClass(java.lang.Class queryClass)
INTERNAL: Set the class which this node represents.


setSession

public void setSession(AbstractSession session)
INTERNAL: Set the session in which we expect this expression to be translated.


setStatement

public void setStatement(SQLSelectStatement statement)
INTERNAL: Set the statement that expression is for. This is used for the context in subselects.


setViewTable

public void setViewTable(DatabaseTable theTable)
INTERNAL: This expression represents something read through a view table.


setWasAdditionJoinCriteriaUsed

public void setWasAdditionJoinCriteriaUsed(boolean joinCriteriaUsed)
INTERNAL: If the additional Join Criteria for the class this builder represents has been added to the statement then mark this as true. This will prevent TopLink from adding it again at normalization


twistedForBaseAndContext

public Expression twistedForBaseAndContext(Expression newBase,
                                           Expression context)
INTERNAL: Rebuild myself against the base, with the values of parameters supplied by the context expression. This is used for transforming a standalone expression (e.g. the join criteria of a mapping) into part of some larger expression. You normally would not call this directly, instead calling twist See the comment there for more details"

Parameters:
newBase -
context -
Returns:

valueFromObject

public java.lang.Object valueFromObject(java.lang.Object object,
                                        AbstractSession session,
                                        AbstractRecord translationRow,
                                        int valueHolderPolicy,
                                        boolean isObjectUnregistered)
INTERNAL: The expression builder represent the entire object, just return it.


wasAdditionJoinCriteriaUsed

public boolean wasAdditionJoinCriteriaUsed()
INTERNAL: If the additional Join Criteria for the class this builder represents has been added to the statement this method will return true;


wasQueryClassSetInternally

public boolean wasQueryClassSetInternally()
INTERNAL: Returns true if TopLink set the query class as appoased to the customer. This is important in determining if this Expression should be treated as a parallel expression during normalization


writeDescriptionOn

public void writeDescriptionOn(java.io.BufferedWriter writer)
                        throws java.io.IOException
INTERNAL: For debug printing purposes.

Throws:
java.io.IOException

EclipseLink 1.0_1.0M2 API Reference - Incubation