|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.datanucleus.store.query.Query
public abstract class Query
Abstract implementation for all queries in DataNucleus. Implementations of JDOQL, SQL, JPQL, etc should extend this. Parameters can be implicit (defined in the query via syntaxes such as ":name", "?1") or explicit (defined via declareParameters). They can also be named or numbered. When passing a map of parameters with values, they are keyed by String (named parameters) or Integer (numbered parameters).
| Nested Class Summary | |
|---|---|
class |
Query.SubqueryDefinition
Simple representation of a subquery, its candidate, params and variables. |
| Field Summary | |
|---|---|
static short |
BULK_DELETE
|
static short |
BULK_UPDATE
|
protected java.lang.Class |
candidateClass
The candidate class for this query. |
protected java.lang.String |
candidateClassName
Name of the candidate class (used when specified via Single-String). |
protected ClassLoaderResolver |
clr
|
protected QueryCompilation |
compilation
Query compilation (when using the generic query compiler). |
protected ExecutionContext |
ec
ExecutionContext. |
protected java.lang.String |
explicitParameters
Any explicit parameters defined for this query, comma separated. |
protected java.lang.String |
explicitVariables
Any explicit variables defined for this query, semicolon separated. |
protected java.util.Map<java.lang.String,java.lang.Object> |
extensions
Any extensions |
protected java.lang.String |
filter
The filter for the query. |
protected java.lang.String |
from
From clause of the query (optional). |
protected long |
fromInclNo
Query result range start position (inclusive). |
protected java.lang.String |
fromInclParam
Query result range lower limit (inclusive) as a parameter name. |
protected java.lang.String |
grouping
Grouping clause for the query, for use with aggregate expressions. |
protected java.lang.String |
having
Having clause for the query |
protected boolean |
ignoreCache
Whether to ignore dirty instances in the query. |
protected java.util.HashMap |
implicitParameters
Map of implicit parameters, keyed by the name/number. |
protected java.lang.String |
imports
Any import declarations for the types used in the query, semicolon separated. |
protected static Localiser |
LOCALISER
Localiser for messages. |
protected java.lang.String |
ordering
Ordering clause for the query, governing the order objects are returned. |
static short |
OTHER
|
protected java.lang.String[] |
parameterNames
Array of (explicit) parameter names. |
protected Imports |
parsedImports
The imports definition. |
protected java.util.HashSet<QueryResult> |
queryResults
All query results obtained from this query. |
protected java.lang.String |
range
String form of the query result range. |
protected java.lang.String |
result
Specification of the result of the query e.g aggregates etc. |
protected java.lang.Class |
resultClass
User-defined class that best represents the results of a query. |
protected java.lang.String |
resultClassName
Temporary variable for the name of the result class (may need resolving using imports). |
protected boolean |
resultDistinct
Whether the results are marked as distinct. |
static short |
SELECT
|
protected boolean |
subclasses
Whether to allow subclasses of the candidate class be returned. |
protected java.util.Map<java.lang.String,Query.SubqueryDefinition> |
subqueries
Any subqueries, keyed by the variable name that they represent. |
protected java.util.HashMap<java.lang.Thread,java.util.concurrent.FutureTask> |
tasks
Currently executing task for this query, keyed by the thread. |
protected long |
toExclNo
Query result range end position (exclusive). |
protected java.lang.String |
toExclParam
Query result range upper limit (exclusive) as a parameter name. |
protected short |
type
Type of query. |
protected boolean |
unique
Whether to return single value, or collection from the query. |
protected boolean |
unmodifiable
Whether the query can be modified |
protected java.lang.String |
update
UPDATE clause of a query. |
| Constructor Summary | |
|---|---|
Query(ExecutionContext ec)
Constructs a new query instance that uses the given object manager. |
|
| Method Summary | |
|---|---|
void |
addExtension(java.lang.String key,
java.lang.Object value)
Add a vendor-specific extension this query. |
void |
addSubquery(Query sub,
java.lang.String variableDecl,
java.lang.String candidateExpr,
java.util.Map paramMap)
Method to add a subquery to this query. |
protected void |
applyImplicitParameterValueToCompilation(java.lang.String name,
java.lang.Object value)
Convenience method to apply an implicit parameter value to the compilation symbol table. |
protected boolean |
applyRangeChecks()
Method to return if the query results should have the range checked and unnecessary rows discarded. |
protected void |
assertIsModifiable()
Method to throw an exception if the query is currently not modifiable. |
protected void |
assertSupportsCancel()
Method that will throw an UnsupportedOperationException if the query implementation doesn't
support cancelling queries. |
void |
cancel()
Method to cancel any currently running queries. |
void |
cancel(java.lang.Thread thread)
Method to cancel a running query in the specified Thread. |
protected void |
checkParameterTypesAgainstCompilation(java.util.Map parameterValues)
Method to do checks of the input parameters with respect to their types being consistent with the types of the parameters in the compilation. |
boolean |
checkUnusedParameters()
Whether the query compilation(s) should check for unused parameters. |
void |
close(java.lang.Object queryResult)
Close a query result and release any resources associated with it. |
void |
closeAll()
Close all query results associated with this Query instance, and release all resources associated with them. |
void |
compile()
Verify the elements of the query and provide a hint to the query to prepare and optimize an execution plan. |
protected abstract void |
compileInternal(java.util.Map parameterValues)
Method to compile the query. |
void |
declareExplicitParameters(java.lang.String parameters)
Method to define the explicit parameters. |
void |
declareExplicitVariables(java.lang.String variables)
Method to define the explicit variables for the query. |
void |
declareImports(java.lang.String imports)
Set the import statements to be used to identify the fully qualified name of variables or parameters. |
long |
deletePersistentAll()
Method to delete all objects found by this query, catering for cascade changes and updates to in-memory objects. |
long |
deletePersistentAll(java.util.Map parameters)
Method to delete all objects found by this query, catering for cascade changes and updates to in-memory objects. |
long |
deletePersistentAll(java.lang.Object[] parameterValues)
Method to delete all objects found by this query, catering for cascade changes and updates to in-memory objects. |
protected void |
discardCompiled()
Utility to remove any previous compilation of this Query. |
boolean |
equals(java.lang.Object obj)
Equality operator. |
java.lang.Object |
execute()
Execute the query and return the filtered results. |
boolean |
executeInSeparateThread()
Accessor for whether the execute the query in a separate thread. |
protected java.lang.Object |
executeQuery(java.util.Map parameters)
Method to execute the actual query. |
java.lang.Object |
executeWithArray(java.lang.Object[] parameterValues)
Execute the query and return the filtered results using the array of parameters. |
java.lang.Object |
executeWithMap(java.util.Map parameters)
Execute the query and return the filtered results using the map of parameters. |
boolean |
getBooleanExtensionProperty(java.lang.String name,
boolean resultIfNotSet)
Convenience accessor to return whether an extension is set (or whether the persistence property of the same name is set), and what is its boolean value. |
java.lang.Class |
getCandidateClass()
Accessor for the class of the candidate instances of the query. |
java.lang.String |
getCandidateClassName()
Accessor for the candidate class name. |
QueryCompilation |
getCompilation()
Accessor for the query compilation. |
java.lang.Integer |
getDatastoreReadTimeoutMillis()
Convenience accessor for the datastore read timeout (milliseconds). |
java.lang.Integer |
getDatastoreWriteTimeoutMillis()
Convenience accessor for the datastore write timeout (milliseconds). |
java.lang.String |
getExplicitParameters()
Accessor for the explicit parameters specification. |
java.lang.String |
getExplicitVariables()
Accessor for the explicit variables specification. |
java.lang.Object |
getExtension(java.lang.String key)
Accessor for the value of an extension for this query. |
java.util.Map<java.lang.String,java.lang.Object> |
getExtensions()
Accessor for the extensions defined for this query. |
FetchPlan |
getFetchPlan()
This method retrieves the fetch plan associated with the Query. |
java.lang.String |
getFilter()
Accessor for the filter specification. |
java.lang.String |
getFrom()
Accessor for the FROM clause of the query. |
java.lang.String |
getGrouping()
Accessor for the grouping string for the query. |
java.lang.String |
getHaving()
Accessor for the having string for the query. |
boolean |
getIgnoreCache()
Accessor for the ignoreCache option setting. |
java.util.Map |
getImplicitParameters()
Accessor for the implicit parameters. |
java.lang.String |
getImports()
Accessor for the imports specification. |
java.util.Map |
getInputParameters()
Accessor for the input parameters for this query. |
java.lang.String |
getLanguage()
Accessor for the query language. |
ExecutionContext |
getObjectManager()
Accessor for the ObjectManager associated with this Query. |
java.lang.String |
getOrdering()
Accessor for the ordering string for the query. |
protected java.util.Map |
getParameterMapForValues(java.lang.Object[] parameterValues)
Convenience method to convert the input parameters into a parameter map keyed by the parameter name. |
Imports |
getParsedImports()
Accessor for the parsed imports. |
QueryManager |
getQueryManager()
|
java.lang.String |
getRange()
Accessor for the range specification string. |
long |
getRangeFromIncl()
Accessor for the range lower limit (inclusive). |
java.lang.String |
getRangeFromInclParam()
Accessor for the range lower limit parameter (inclusive). |
long |
getRangeToExcl()
Accessor for the range upper limit (exclusive). |
java.lang.String |
getRangeToExclParam()
Accessor for the range upper limit parameter (exclusive). |
java.lang.String |
getResult()
Accessor for the result specification string. |
java.lang.Class |
getResultClass()
Accessor for the result class. |
java.lang.String |
getResultClassName()
|
boolean |
getResultDistinct()
Accessor for whether the results are distinct. |
java.lang.Boolean |
getSerializeRead()
Accessor for whether to serialise (lock) any read objects retrieved from this query. |
StoreManager |
getStoreManager()
Accessor for the StoreManager associated with this Query. |
Query.SubqueryDefinition |
getSubqueryForVariable(java.lang.String variableName)
Accessor for the subquery for the supplied variable. |
java.util.Set<java.lang.String> |
getSupportedExtensions()
Method to return the names of the extensions supported by this query. |
short |
getType()
Accessor for the query type. |
java.lang.String |
getUpdate()
Accessor for the UPDATE clause of the JPQL query. |
int |
hashCode()
Hashcode generator. |
boolean |
hasSubqueryForVariable(java.lang.String variableName)
Accessor for whether there is a subquery for the specified variable name. |
protected boolean |
isCompiled()
Method to return if the query is compiled. |
boolean |
isSubclasses()
Accessor for whether this query includes subclasses |
boolean |
isUnique()
Accessor for whether the query results are unique. |
boolean |
isUnmodifiable()
Accessor for unmodifiable. |
protected long |
performDeletePersistentAll(java.util.Map parameters)
Execute the query to delete persistent objects. |
protected abstract java.lang.Object |
performExecute(java.util.Map parameters)
Method to actually execute the query. |
protected java.lang.Object |
performExecuteInternal(java.lang.Object... args)
Method executing the query in the destination environment. |
protected java.lang.Object |
performExecuteTask(java.lang.Object... args)
Method to execute the query action as a separate task. |
protected void |
prepareDatastore()
Convenience method that will flush any outstanding updates to the datastore. |
java.lang.Class |
resolveClassDeclaration(java.lang.String classDecl)
Utility to resolve the declaration to a particular class. |
void |
setCandidateClassName(java.lang.String candidateClassName)
Convenience method to set the name of the candidate class. |
abstract void |
setCandidates(java.util.Collection pcs)
Set the candidate Collection to query. |
abstract void |
setCandidates(Extent pcs)
Set the candidate Extent to query. |
void |
setClass(java.lang.Class candidateClass)
Mutator for the class of the candidate instances of the query. |
void |
setCompilation(QueryCompilation compilation)
Method to set the generic compilation for this query. |
void |
setDatastoreReadTimeoutMillis(java.lang.Integer timeout)
Mutator to set the datastore read timeout for this query. |
void |
setDatastoreWriteTimeoutMillis(java.lang.Integer timeout)
Mutator to set the datastore write timeout for this query. |
void |
setExtensions(java.util.Map extensions)
Set multiple extensions, or use null to clear extensions. |
void |
setFetchPlan(FetchPlan fp)
Mutator for the FetchPlan of the query. |
void |
setFilter(java.lang.String filter)
Set the filter for the query. |
void |
setFrom(java.lang.String from)
Set the candidates to the query. |
void |
setGrouping(java.lang.String grouping)
Set the grouping specification for the result Collection. |
void |
setHaving(java.lang.String having)
Set the having specification for the result Collection. |
void |
setIgnoreCache(boolean ignoreCache)
Set the ignoreCache option. |
void |
setImplicitParameter(int position,
java.lang.Object value)
Method to set the value of a numbered implicit parameter where known before execution. |
void |
setImplicitParameter(java.lang.String name,
java.lang.Object value)
Method to set the value of a named implicit parameter where known before execution. |
void |
setOrdering(java.lang.String ordering)
Set the ordering specification for the result Collection. |
void |
setRange(long fromIncl,
long toExcl)
Set the range of the results. |
void |
setRange(java.lang.String range)
Set the range of the results. |
void |
setResult(java.lang.String result)
Set the result for the results. |
void |
setResultClass(java.lang.Class result_cls)
Set the result class for the results. |
void |
setResultClassName(java.lang.String resultClassName)
Method to set the result class name, direct from a single-string query. |
void |
setResultDistinct(boolean distinct)
Mark the result as distinct (or not). |
void |
setResultMetaData(QueryResultMetaData qrmd)
Method to set the MetaData defining the result. |
void |
setSerializeRead(java.lang.Boolean serialize)
Mutator for whether to serialise (lock) any read objects in this query. |
void |
setSubclasses(boolean subclasses)
Mutator for whether this query includes subclasses |
void |
setType(short type)
Mutator to set the query type. |
void |
setUnique(boolean unique)
Set the uniqueness of the results. |
void |
setUnmodifiable()
Mutator for unmodifiable. |
void |
setUpdate(java.lang.String update)
Set the UPDATE clause of the query. |
protected boolean |
shouldReturnSingleRow()
Convenience method to return whether the query should return a single row. |
protected boolean |
supportsTimeout()
Convenience method for whether this query supports timeouts. |
boolean |
useCaching()
Whether the query compilation(s) should be cached. |
protected boolean |
useFetchPlan()
Convenience accessor for whether to use the fetch plan with this query. |
boolean |
useResultsCaching()
Whether the results of the query should be cached. |
| Methods inherited from class java.lang.Object |
|---|
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
protected static final Localiser LOCALISER
protected final transient ExecutionContext ec
protected final transient ClassLoaderResolver clr
public static final short SELECT
public static final short BULK_UPDATE
public static final short BULK_DELETE
public static final short OTHER
protected short type
protected java.lang.Class candidateClass
protected java.lang.String candidateClassName
protected boolean subclasses
protected boolean unique
protected transient java.lang.String from
protected transient java.lang.String update
protected java.lang.String result
protected boolean resultDistinct
protected java.lang.Class resultClass
protected java.lang.String resultClassName
protected java.lang.String filter
protected java.lang.String imports
protected java.lang.String explicitVariables
protected java.lang.String explicitParameters
protected java.lang.String ordering
protected java.lang.String grouping
protected java.lang.String having
protected java.lang.String range
protected long fromInclNo
protected long toExclNo
protected java.lang.String fromInclParam
protected java.lang.String toExclParam
protected boolean unmodifiable
protected boolean ignoreCache
protected java.util.Map<java.lang.String,java.lang.Object> extensions
protected java.util.Map<java.lang.String,Query.SubqueryDefinition> subqueries
protected transient java.util.HashMap implicitParameters
protected transient Imports parsedImports
protected transient java.lang.String[] parameterNames
protected transient QueryCompilation compilation
protected transient java.util.HashSet<QueryResult> queryResults
protected transient java.util.HashMap<java.lang.Thread,java.util.concurrent.FutureTask> tasks
| Constructor Detail |
|---|
public Query(ExecutionContext ec)
ec - execution context| Method Detail |
|---|
public java.lang.String getLanguage()
protected void discardCompiled()
public void setCompilation(QueryCompilation compilation)
compilation - The compilationpublic boolean equals(java.lang.Object obj)
equals in class java.lang.Objectobj - Object to compare against
public int hashCode()
hashCode in class java.lang.Objectpublic short getType()
public void setType(short type)
type - The query typepublic StoreManager getStoreManager()
public ExecutionContext getObjectManager()
public void addExtension(java.lang.String key,
java.lang.Object value)
key - the extension keyvalue - the extension valuepublic void setExtensions(java.util.Map extensions)
extensions - addExtension(java.lang.String, java.lang.Object)public java.lang.Object getExtension(java.lang.String key)
key - The key
public java.util.Map<java.lang.String,java.lang.Object> getExtensions()
public boolean getBooleanExtensionProperty(java.lang.String name,
boolean resultIfNotSet)
name - The extension/property nameresultIfNotSet - The value to return if there is neither an extension nor a persistence
property of the same name
public java.util.Set<java.lang.String> getSupportedExtensions()
public FetchPlan getFetchPlan()
public void setFetchPlan(FetchPlan fp)
fp - The FetchPlanpublic void setUpdate(java.lang.String update)
update - the update clausepublic java.lang.String getUpdate()
public java.lang.Class getCandidateClass()
public void setClass(java.lang.Class candidateClass)
candidateClass - the Class of the candidate instances.public void setCandidateClassName(java.lang.String candidateClassName)
candidateClassName - Name of the candidate classpublic java.lang.String getCandidateClassName()
public void setFrom(java.lang.String from)
from - the candidatespublic java.lang.String getFrom()
public abstract void setCandidates(Extent pcs)
pcs - the Candidate Extent.public abstract void setCandidates(java.util.Collection pcs)
pcs - the Candidate collection.public void setFilter(java.lang.String filter)
filter - the query filter.public java.lang.String getFilter()
public void declareImports(java.lang.String imports)
imports - import statements separated by semicolons.public java.lang.String getImports()
public void declareExplicitParameters(java.lang.String parameters)
parameters - the list of parameters separated by commaspublic java.lang.String getExplicitParameters()
public void setImplicitParameter(java.lang.String name,
java.lang.Object value)
name - Name of the parametervalue - Value of the parameter
QueryInvalidParametersException - if the parameter is invalid
public void setImplicitParameter(int position,
java.lang.Object value)
position - Position of the parametervalue - Value of the parameter
QueryInvalidParametersException - if the parameter is invalid
protected void applyImplicitParameterValueToCompilation(java.lang.String name,
java.lang.Object value)
name - Name of the parametervalue - Value of the parameter
QueryInvalidParametersException - if the parameter doesn't exist in the query or if the type
of the parameter provided is inconsistent with the querypublic java.util.Map getImplicitParameters()
public void declareExplicitVariables(java.lang.String variables)
variables - the variables separated by semicolons.public java.lang.String getExplicitVariables()
public void setOrdering(java.lang.String ordering)
ordering - the ordering specification.public java.lang.String getOrdering()
public void setGrouping(java.lang.String grouping)
grouping - the grouping specification.public java.lang.String getGrouping()
public void setHaving(java.lang.String having)
having - the having specification.public java.lang.String getHaving()
public void setUnique(boolean unique)
unique - whether the result is uniquepublic boolean isUnique()
public void setRange(long fromIncl,
long toExcl)
fromIncl - From element no (inclusive) to returntoExcl - To element no (exclusive) to returnpublic void setRange(java.lang.String range)
range - Range stringpublic java.lang.String getRange()
public long getRangeFromIncl()
public long getRangeToExcl()
public java.lang.String getRangeFromInclParam()
public java.lang.String getRangeToExclParam()
public void setResult(java.lang.String result)
result - Comma-separated result expressionspublic java.lang.String getResult()
public void setResultDistinct(boolean distinct)
distinct - Whether to treat as distinctpublic boolean getResultDistinct()
public java.lang.String getResultClassName()
public void setResultClassName(java.lang.String resultClassName)
resultClassName - Name of the result classpublic void setResultClass(java.lang.Class result_cls)
result_cls - The result classpublic java.lang.Class getResultClass()
public void setResultMetaData(QueryResultMetaData qrmd)
qrmd - QueryResultMetaDatapublic void setIgnoreCache(boolean ignoreCache)
ignoreCache - the setting of the ignoreCache option.public boolean getIgnoreCache()
setIgnoreCache(boolean)public boolean isSubclasses()
public void setSubclasses(boolean subclasses)
subclasses - Where subclasses of the candidate class are to be included.public java.lang.Boolean getSerializeRead()
public void setSerializeRead(java.lang.Boolean serialize)
serialize - Whether to serialise (lock) the query objectspublic boolean isUnmodifiable()
protected void assertIsModifiable()
NucleusUserException - Thrown when it is unmodifiablepublic void setUnmodifiable()
public void addSubquery(Query sub,
java.lang.String variableDecl,
java.lang.String candidateExpr,
java.util.Map paramMap)
sub - The subqueryvariableDecl - Declaration of variablescandidateExpr - Candidate expressionparamMap - Map of parameters for this subquerypublic Query.SubqueryDefinition getSubqueryForVariable(java.lang.String variableName)
variableName - Name of the variable
public boolean hasSubqueryForVariable(java.lang.String variableName)
variableName - Name of the variable
protected void prepareDatastore()
public QueryCompilation getCompilation()
protected boolean isCompiled()
public void compile()
protected abstract void compileInternal(java.util.Map parameterValues)
parameterValues - Parameter values keyed by name (when compiling for execution)public Imports getParsedImports()
public java.lang.Object execute()
executeWithArray(Object[] parameters)public java.lang.Object executeWithArray(java.lang.Object[] parameterValues)
parameterValues - the Object array with all of the parameters.
NoQueryResultsException - Thrown if no results were returned from the query.executeQuery(Map parameters)public java.lang.Object executeWithMap(java.util.Map parameters)
parameters - the Map containing all of the parameters.
NoQueryResultsException - Thrown if no results were returned from the query.executeQuery(Map parameters)public java.util.Map getInputParameters()
protected boolean supportsTimeout()
public void setDatastoreReadTimeoutMillis(java.lang.Integer timeout)
timeout - The timeoutpublic java.lang.Integer getDatastoreReadTimeoutMillis()
public void setDatastoreWriteTimeoutMillis(java.lang.Integer timeout)
timeout - The timeoutpublic java.lang.Integer getDatastoreWriteTimeoutMillis()
public QueryManager getQueryManager()
protected java.lang.Object executeQuery(java.util.Map parameters)
parameters - Map of parameter values keyed by parameter name
NoQueryResultsException - Thrown if no results were returned from the query.
QueryNotUniqueException - Thrown if multiple results, yet expected oneprotected void assertSupportsCancel()
UnsupportedOperationException if the query implementation doesn't
support cancelling queries. Implementations that support the cancel operation should override this.
public void cancel()
assertSupportsCancel()
public void cancel(java.lang.Thread thread)
assertSupportsCancel()
thread - The threadprotected java.lang.Object performExecuteTask(java.lang.Object... args)
args - Arguments for execution of performExecuteInternal(), defined by each implementation
QueryTimeoutException - if the operation times out
QueryInterruptedException - if the operation is cancelled (by the user in another thread)protected java.lang.Object performExecuteInternal(java.lang.Object... args)
args - Arguments to the execution (defined by each implementation).
performExecuteTaskprotected abstract java.lang.Object performExecute(java.util.Map parameters)
parameters - Map containing the parameters.
protected boolean applyRangeChecks()
public long deletePersistentAll()
public long deletePersistentAll(java.lang.Object[] parameterValues)
parameterValues - the Object array with values of the parameters.
public long deletePersistentAll(java.util.Map parameters)
parameters - Map of parameters for the query
protected long performDeletePersistentAll(java.util.Map parameters)
parameters - the Map containing all of the parameters.
public void close(java.lang.Object queryResult)
queryResult - the result of execute(...) on this Query instance.public void closeAll()
protected boolean shouldReturnSingleRow()
protected java.util.Map getParameterMapForValues(java.lang.Object[] parameterValues)
parameterValues - Parameter values
protected boolean useFetchPlan()
public boolean useCaching()
public boolean useResultsCaching()
public boolean checkUnusedParameters()
public boolean executeInSeparateThread()
protected void checkParameterTypesAgainstCompilation(java.util.Map parameterValues)
parameterValues - The input parameter values keyed by their name (or position)public java.lang.Class resolveClassDeclaration(java.lang.String classDecl)
classDecl - The declaration
NucleusUserException - Thrown if the class cannot be resolved.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||