net.sf.saffron.oj.rel
Class BuiltinAggregation.MinMax
java.lang.Object
|
+--net.sf.saffron.oj.rel.BuiltinAggregation
|
+--net.sf.saffron.oj.rel.BuiltinAggregation.MinMax
- All Implemented Interfaces:
- Aggregation
- Enclosing class:
- BuiltinAggregation
- static class BuiltinAggregation.MinMax
- extends BuiltinAggregation
MinMax
implements the "min" and "max" aggregator
functions, returning the returns the smallest/largest of the values
which go into it. There are 3 forms:
-
sum(primitive type)
-
values are compared using <
-
sum(
Comparable
)
-
values are compared using
Comparable.compareTo(java.lang.Object)
-
sum(
Comparator
, Object
)
-
the
Comparator.compare(java.lang.Object, java.lang.Object)
method of the comparator is
used to compare pairs of objects. The comparator is a startup
argument, and must therefore be constant for the duration of the
aggregation.
Methods inherited from class net.sf.saffron.oj.rel.BuiltinAggregation |
count, count, count, count, create, getParameterTypes, getReturnType, implementMerge, implementStartAndNext, lookup, max, max, max, min, min, min, sum, sum |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
MINMAX_INVALID
static final int MINMAX_INVALID
- See Also:
- Constant Field Values
MINMAX_PRIMITIVE
static final int MINMAX_PRIMITIVE
- See Also:
- Constant Field Values
MINMAX_COMPARABLE
static final int MINMAX_COMPARABLE
- See Also:
- Constant Field Values
MINMAX_COMPARATOR
static final int MINMAX_COMPARATOR
- See Also:
- Constant Field Values
argTypes
private OJClass[] argTypes
isMin
private boolean isMin
kind
private int kind
BuiltinAggregation.MinMax
BuiltinAggregation.MinMax(OJClass[] argTypes,
boolean isMin)
getParameterTypes
public OJClass[] getParameterTypes()
- Specified by:
getParameterTypes
in class BuiltinAggregation
getReturnType
public OJClass getReturnType()
- Specified by:
getReturnType
in class BuiltinAggregation
getStartParameterTypes
public OJClass[] getStartParameterTypes()
canMerge
public boolean canMerge()
- Description copied from interface:
Aggregation
- Whether this aggregation can merge together two accumulators.
count
can (you just add the accumulators);
avg
and Nth
cannot.
- Specified by:
canMerge
in interface Aggregation
- Overrides:
canMerge
in class BuiltinAggregation
implementNext
public void implementNext(RelImplementor implementor,
SaffronRel rel,
Expression accumulator,
int[] args)
- Description copied from interface:
Aggregation
- Generates (into the current statement list, gleaned by calling
implementor
's RelImplementor.getStatementList()
method) the piece of code
which gets called each time an extra row is seen. For
sum(x)
, this looks like
((net.sf.saffron.runtime.Holder.int_Holder) accumulator).value +=
x
.
- Parameters:
implementor
- a callback object which knows how to generate thingsrel
- the relational expression which is generating this codeaccumulator
- the expression which holds the totalargs
- the ordinals of the fields of the child row which are
arguments to this aggregation
implementResult
public Expression implementResult(Expression accumulator)
- Description copied from interface:
Aggregation
- Generates the expression which gets called when a total is complete.
For
sum(x)
, this looks like
((saffron.runtime.Holder.int_Holder) accumulator).value
.
implementStart
public Expression implementStart(RelImplementor implementor,
SaffronRel rel,
int[] args)
- Description copied from interface:
Aggregation
- Generates the expression which gets called when a new total is created.
For
sum(x)
, this looks like new
saffron.runtime.Holder.int_Holder(0)
.
getKind
static int getKind(OJClass[] argTypes)
getName
String getName()
- Specified by:
getName
in class BuiltinAggregation