org.datanucleus.query.compiler
Class JavaQueryCompiler

java.lang.Object
  extended by org.datanucleus.query.compiler.JavaQueryCompiler
All Implemented Interfaces:
SymbolResolver
Direct Known Subclasses:
JDOQLCompiler, JPQLCompiler

public abstract class JavaQueryCompiler
extends java.lang.Object
implements SymbolResolver

Typical implementation of a compiler for a java-based query language. The constructor takes in the components of the query, and the method compile() compiles it returning the compiled query, for use elsewhere.

Each "Expression" is effectively a tree of Expressions. You can navigate through each expression based on their type. For example, a DyadicExpression has a "left" and "right" and an operator between them. The left could also be a DyadicExpression, so you would navigate to its left/right components etc etc.


Field Summary
protected  java.lang.String candidateAlias
          Alias for the primary candidate.
protected  java.lang.String candidateAliasOrig
          Default candidate alias in use (only set when in a subquery and the same as the outer query).
protected  java.lang.Class candidateClass
          Primary candidate class (if defined).
protected  java.util.Collection candidates
           
protected  boolean caseSensitiveAliases
           
protected  ClassLoaderResolver clr
           
protected  java.lang.String filter
           
protected  java.lang.String from
           
protected  java.lang.String grouping
           
protected  java.lang.String having
           
protected  Imports imports
           
protected static Localiser LOCALISER
          Localisation utility for output messages
protected  MetaDataManager metaDataManager
           
protected  java.lang.String ordering
           
protected  java.lang.String parameters
           
protected  int parameterSubstitutionNumber
           
protected  java.util.Map<java.lang.Object,java.lang.String> parameterSubtitutionMap
           
protected  JavaQueryCompiler parentCompiler
           
protected  Parser parser
          Parser specific to the type of query being compiled.
protected  java.util.Map<java.lang.String,java.lang.String> queryMethodAliasByPrefix
           
protected  java.lang.String result
           
protected  SymbolTable symtbl
          Compiled Symbol Table.
protected  java.lang.String update
           
protected  java.lang.String variables
           
 
Constructor Summary
JavaQueryCompiler(MetaDataManager metaDataManager, ClassLoaderResolver clr, java.lang.String from, java.lang.Class candidateClass, java.util.Collection candidates, java.lang.String filter, Imports imports, java.lang.String ordering, java.lang.String result, java.lang.String grouping, java.lang.String having, java.lang.String params, java.lang.String variables, java.lang.String update)
           
 
Method Summary
abstract  QueryCompilation compile(java.util.Map parameters, java.util.Map subqueryMap)
          Method to compile the query.
 void compileCandidatesParametersVariables(java.util.Map parameters)
          Compile the candidates, variables and parameters.
 Expression compileFilter()
          Compile the filter and return the compiled expression.
protected  Expression[] compileFrom()
          Method to compile the "from" clause (if present for the query language).
 Expression[] compileGrouping()
           
 Expression compileHaving()
           
 Expression[] compileOrdering()
           
 Expression[] compileResult()
           
 Expression[] compileUpdate()
           
abstract  java.lang.String getLanguage()
          Accessor for the query language name.
 java.lang.Class getPrimaryClass()
          Accessor for the candidate class of the query.
 java.lang.Class getType(java.util.List tuples)
           
protected abstract  boolean isKeyword(java.lang.String name)
          Method to return if the supplied name is a keyword.
 java.lang.Class resolveClass(java.lang.String className)
          Method to perform a lookup of the class name from the input name.
 void setLinkToParentQuery(JavaQueryCompiler parentCompiler, java.util.Map paramSubstitutionMap)
          Method to set the linkage to the parent query.
protected  void swapCandidateAliasNodeName(Node node)
          Convenience method that takes the input node and if it is set to the original candidate alias then swaps the value to the candidate alias.
protected  Node swapSubqueryParameters(Node node)
          Convenience method that takes the input node if it is a parameter node swaps the node to be
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.datanucleus.query.symbol.SymbolResolver
caseSensitiveSymbolNames, supportsImplicitVariables
 

Field Detail

LOCALISER

protected static final Localiser LOCALISER
Localisation utility for output messages


parentCompiler

protected JavaQueryCompiler parentCompiler

parameterSubtitutionMap

protected java.util.Map<java.lang.Object,java.lang.String> parameterSubtitutionMap

parameterSubstitutionNumber

protected int parameterSubstitutionNumber

metaDataManager

protected final MetaDataManager metaDataManager

clr

protected final ClassLoaderResolver clr

caseSensitiveAliases

protected boolean caseSensitiveAliases

candidateClass

protected java.lang.Class candidateClass
Primary candidate class (if defined).


candidateAlias

protected java.lang.String candidateAlias
Alias for the primary candidate. Default to "this" (JDOQL) but can be set.


candidateAliasOrig

protected java.lang.String candidateAliasOrig
Default candidate alias in use (only set when in a subquery and the same as the outer query).


from

protected java.lang.String from

candidates

protected java.util.Collection candidates

update

protected java.lang.String update

filter

protected java.lang.String filter

ordering

protected java.lang.String ordering

parameters

protected java.lang.String parameters

variables

protected java.lang.String variables

grouping

protected java.lang.String grouping

having

protected java.lang.String having

result

protected java.lang.String result

imports

protected Imports imports

symtbl

protected SymbolTable symtbl
Compiled Symbol Table.


parser

protected Parser parser
Parser specific to the type of query being compiled.


queryMethodAliasByPrefix

protected java.util.Map<java.lang.String,java.lang.String> queryMethodAliasByPrefix
Constructor Detail

JavaQueryCompiler

public JavaQueryCompiler(MetaDataManager metaDataManager,
                         ClassLoaderResolver clr,
                         java.lang.String from,
                         java.lang.Class candidateClass,
                         java.util.Collection candidates,
                         java.lang.String filter,
                         Imports imports,
                         java.lang.String ordering,
                         java.lang.String result,
                         java.lang.String grouping,
                         java.lang.String having,
                         java.lang.String params,
                         java.lang.String variables,
                         java.lang.String update)
Method Detail

getLanguage

public abstract java.lang.String getLanguage()
Accessor for the query language name.

Returns:
Name of the query language.

setLinkToParentQuery

public void setLinkToParentQuery(JavaQueryCompiler parentCompiler,
                                 java.util.Map paramSubstitutionMap)
Method to set the linkage to the parent query.

Parameters:
parentCompiler - Compiler for the parent query
paramSubstitutionMap - Map of parameters in this subquery and what they are in the parent query.

compile

public abstract QueryCompilation compile(java.util.Map parameters,
                                         java.util.Map subqueryMap)
Method to compile the query.

Parameters:
parameters - The parameter values keyed by name.
subqueryMap - Map of subqueries keyed by the subquery name
Returns:
The query compilation

compileCandidatesParametersVariables

public void compileCandidatesParametersVariables(java.util.Map parameters)
Compile the candidates, variables and parameters.

Parameters:
parameters - Map of parameter values keyed by their name

compileFrom

protected Expression[] compileFrom()
Method to compile the "from" clause (if present for the query language).


compileUpdate

public Expression[] compileUpdate()

compileFilter

public Expression compileFilter()
Compile the filter and return the compiled expression.

Returns:
The compiled expression

swapCandidateAliasNodeName

protected void swapCandidateAliasNodeName(Node node)
Convenience method that takes the input node and if it is set to the original candidate alias then swaps the value to the candidate alias. This is for the situation where we have a subquery which had no alias defined so defaults to "this" (the same as the outer query), so we change the subquery alias from "this" to "sub_this".

Parameters:
node - The node to process

swapSubqueryParameters

protected Node swapSubqueryParameters(Node node)
Convenience method that takes the input node if it is a parameter node swaps the node to be

Parameters:
node - The node to process

compileResult

public Expression[] compileResult()

compileGrouping

public Expression[] compileGrouping()

compileHaving

public Expression compileHaving()

compileOrdering

public Expression[] compileOrdering()

getPrimaryClass

public java.lang.Class getPrimaryClass()
Description copied from interface: SymbolResolver
Accessor for the candidate class of the query.

Specified by:
getPrimaryClass in interface SymbolResolver
Returns:
The candidate class

resolveClass

public java.lang.Class resolveClass(java.lang.String className)
Method to perform a lookup of the class name from the input name. Makes use of the query "imports" and the lookup to "entity name".

Specified by:
resolveClass in interface SymbolResolver
Parameters:
className - Name of the class
Returns:
The class corresponding to this name
Throws:
ClassNotResolvedException - thrown if not resolvable using imports or entity name

getType

public java.lang.Class getType(java.util.List tuples)
Specified by:
getType in interface SymbolResolver

isKeyword

protected abstract boolean isKeyword(java.lang.String name)
Method to return if the supplied name is a keyword. Keywords can only appear at particular places in a query so we need to detect for valid queries.

Parameters:
name - The name
Returns:
Whether it is a keyword


Copyright © 2011. All Rights Reserved.