abstract class ValidatorImpl extends Object implements Validator
Validator.
Uses a stack to help us guess the type of our parent expression before we've completely resolved our children -- necessary, unfortunately, when figuring out whether the "*" operator denotes multiplication or crossjoin.
Keeps track of which nodes have already been resolved, so we don't
try to resolve nodes which have already been resolved. (That would not
be wrong, but can cause resolution to be an O(2^N)
operation.)
The concrete implementing class needs to implement
Validator.getQuery() and defineParameter(Parameter).
| Modifier and Type | Field and Description |
|---|---|
protected ArrayStack<QueryPart> |
stack |
| Modifier | Constructor and Description |
|---|---|
protected |
ValidatorImpl(FunTable funTable)
Creates a ValidatorImpl.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
alwaysResolveFunDef()
Whether to resolve function name and arguments to a function definition
each time a node is validated, not just the first time.
|
boolean |
canConvert(int ordinal,
Exp fromExp,
int to,
List<Resolver.Conversion> conversions)
Returns whether we can convert an argument to a parameter type.
|
Parameter |
createOrLookupParam(boolean definition,
String name,
Type type,
Exp defaultExp,
String description)
Creates or retrieves the parameter corresponding to a "Parameter" or
"ParamRef" function call.
|
protected abstract void |
defineParameter(Parameter param)
Defines a parameter.
|
FunDef |
getDef(Exp[] args,
String funName,
Syntax syntax)
Resolves a function call to a particular function.
|
FunTable |
getFunTable()
Returns the table of function and operator definitions.
|
boolean |
requiresExpression()
Returns whether the current context requires an expression.
|
(package private) boolean |
requiresExpression(UnresolvedFunCall funCall,
int k)
Returns whether the
kth argument to a function call
has to be an expression. |
Exp |
validate(Exp exp,
boolean scalar)
Validates an expression, and returns the expression it resolves to.
|
void |
validate(Formula formula)
Validates a formula.
|
void |
validate(MemberProperty memberProperty)
Validates a child member property.
|
void |
validate(ParameterExpr parameterExpr)
Validates a usage of a parameter.
|
void |
validate(QueryAxis axis)
Validates an axis.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetQuery, getSchemaReaderprotected final ArrayStack<QueryPart> stack
protected ValidatorImpl(FunTable funTable)
funTable - Function tablepublic Exp validate(Exp exp, boolean scalar)
Validatorpublic void validate(ParameterExpr parameterExpr)
ValidatorIt must resolve to the same object (although sub-objects may change).
public void validate(MemberProperty memberProperty)
ValidatorIt must resolve to the same object (although sub-objects may change).
public void validate(QueryAxis axis)
Validatorpublic void validate(Formula formula)
Validatorpublic FunDef getDef(Exp[] args, String funName, Syntax syntax)
Validatorpublic boolean alwaysResolveFunDef()
ValidatorDefault implementation returns false.
alwaysResolveFunDef in interface Validatorpublic boolean canConvert(int ordinal,
Exp fromExp,
int to,
List<Resolver.Conversion> conversions)
ValidatorcanConvert in interface Validatorordinal - argument ordinalfromExp - argument typeto - parameter typeconversions - List of conversions performed;
method adds an element for each non-trivial conversion (for
example, converting a member to a level).public boolean requiresExpression()
ValidatorrequiresExpression in interface Validatorboolean requiresExpression(UnresolvedFunCall funCall, int k)
kth argument to a function call
has to be an expression.public FunTable getFunTable()
ValidatorgetFunTable in interface Validatorpublic Parameter createOrLookupParam(boolean definition, String name, Type type, Exp defaultExp, String description)
ValidatorcreateOrLookupParam in interface Validatorprotected abstract void defineParameter(Parameter param)
param - Parameter