org.apache.jdo.impl.jdoql.scope
Class ParameterTable

java.lang.Object
  extended byorg.apache.jdo.impl.jdoql.scope.AbstractValueTable
      extended byorg.apache.jdo.impl.jdoql.scope.ParameterTable
All Implemented Interfaces:
java.lang.Cloneable, java.io.Serializable, ValueTable

public class ParameterTable
extends AbstractValueTable

The query parameter table.

Author:
Michael Bouschen
See Also:
Serialized Form

Field Summary
(package private)  java.util.Map declMap
          Map of declarations.
protected static I18NHelper msg
          I18N support
(package private)  java.util.List names
          List of query parameter names.
(package private)  java.util.Map valueMap
          Map of values.
 
Constructor Summary
ParameterTable()
           
 
Method Summary
private  void checkCompatibility(java.lang.String name, java.lang.Object value)
          Checks the type compatibility of the specified value and throws a JDOQueryException if the value has an incompatible type.
protected  void checkDeclaredIdentifier(java.lang.String name, Declaration decl)
          Internal method to check whether the specified identifier is declared.
 void checkUnboundParams()
          Checks whether all query parameters are bound.
 void declare(Declaration decl)
          Adds a new declaration.
 ParameterTable getCopy()
          Returns a copy of this ParameterTable.
 java.lang.Object getValue(java.lang.String name)
          Returns the current value for the specified identifier.
 void initValueHandling()
          This method initializes the map of values for this ValueTable.
 boolean isCompatibleValue(java.lang.String name, java.lang.Object value)
          Checks whether the type of the specified value is compatible of the type of the identifier from its declaration.
 void setValue(java.lang.String name, java.lang.Object value)
          Sets the value for the specified identifier.
 void setValues(PersistenceManagerInternal queryPM, java.util.Map paramValues)
          Sets all query parameter values.
 void setValues(PersistenceManagerInternal queryPM, java.lang.Object[] paramValues)
          Sets all query parameter values.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

names

java.util.List names
List of query parameter names. The query parameter tables stores the query parameter names in an extra list to presever the order of parameter declarations.


declMap

java.util.Map declMap
Map of declarations. Key is the the name of the declared identifier, value is the Declaration node.


valueMap

transient java.util.Map valueMap
Map of values. This map includes a values entry for each declared identifier. Default value is UNDEFINED.


msg

protected static final I18NHelper msg
I18N support

Constructor Detail

ParameterTable

public ParameterTable()
Method Detail

declare

public void declare(Declaration decl)
Adds a new declaration. The value is initially set to UNDEFINED.

Specified by:
declare in interface ValueTable
Overrides:
declare in class AbstractValueTable
Parameters:
decl - the declaration node

getCopy

public ParameterTable getCopy()
Returns a copy of this ParameterTable.

Returns:
a copy of this ParameterTable.

checkDeclaredIdentifier

protected void checkDeclaredIdentifier(java.lang.String name,
                                       Declaration decl)
Internal method to check whether the specified identifier is declared.

Specified by:
checkDeclaredIdentifier in class AbstractValueTable

setValues

public void setValues(PersistenceManagerInternal queryPM,
                      java.lang.Object[] paramValues)
Sets all query parameter values. The order of declarations in declareParameters defines the order in the specified array of parameter values. The method checks the type compatibility of the query parameter values.

Parameters:
paramValues - the parameter values

setValues

public void setValues(PersistenceManagerInternal queryPM,
                      java.util.Map paramValues)
Sets all query parameter values. The values are taken from the specified map. The method assumes the key in the map to be the parameter name and the value in the map to be the parameter value.

Parameters:
paramValues - the parameter values

checkUnboundParams

public void checkUnboundParams()
Checks whether all query parameters are bound. If not a JDOQueryException is thrown.


checkCompatibility

private void checkCompatibility(java.lang.String name,
                                java.lang.Object value)
Checks the type compatibility of the specified value and throws a JDOQueryException if the value has an incompatible type.


initValueHandling

public void initValueHandling()
This method initializes the map of values for this ValueTable. It needs to be called prior to any use of an AbstractValueTable at query execution time.


setValue

public void setValue(java.lang.String name,
                     java.lang.Object value)
Sets the value for the specified identifier.

Specified by:
setValue in interface ValueTable
Parameters:
name - the name of the identifier
value - the current value of the identifier

getValue

public java.lang.Object getValue(java.lang.String name)
Returns the current value for the specified identifier.

Specified by:
getValue in interface ValueTable
Parameters:
name - the name of the identifier
Returns:
the current value of the identifier

isCompatibleValue

public boolean isCompatibleValue(java.lang.String name,
                                 java.lang.Object value)
Checks whether the type of the specified value is compatible of the type of the identifier from its declaration.

Specified by:
isCompatibleValue in interface ValueTable
Parameters:
name - the name of the identifier
value - the value to be checked
Returns:
true if the type of the value is compatible with the type of the identifier; false otherwise.