/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.addthis.hydra.data.query;
import javax.annotation.Syntax;
import com.addthis.hydra.data.query.op.OpChangePoints;
import com.addthis.hydra.data.query.op.OpCompare;
import com.addthis.hydra.data.query.op.OpContains;
import com.addthis.hydra.data.query.op.OpDateFormat;
import com.addthis.hydra.data.query.op.OpDePivot;
import com.addthis.hydra.data.query.op.OpDiff;
import com.addthis.hydra.data.query.op.OpDiskSort;
import com.addthis.hydra.data.query.op.OpDisorder;
import com.addthis.hydra.data.query.op.OpFill;
import com.addthis.hydra.data.query.op.OpFilter;
import com.addthis.hydra.data.query.op.OpFold;
import com.addthis.hydra.data.query.op.OpFrequencyTable;
import com.addthis.hydra.data.query.op.OpGather;
import com.addthis.hydra.data.query.op.OpGroupBy;
import com.addthis.hydra.data.query.op.OpHistogram;
import com.addthis.hydra.data.query.op.OpHistogramExplicit;
import com.addthis.hydra.data.query.op.OpHoltWinters;
import com.addthis.hydra.data.query.op.OpLimit;
import com.addthis.hydra.data.query.op.OpMap;
import com.addthis.hydra.data.query.op.OpMedian;
import com.addthis.hydra.data.query.op.OpMerge;
import com.addthis.hydra.data.query.op.OpNoDup;
import com.addthis.hydra.data.query.op.OpNumber;
import com.addthis.hydra.data.query.op.OpOrder;
import com.addthis.hydra.data.query.op.OpOrderMap;
import com.addthis.hydra.data.query.op.OpPercentileDistribution;
import com.addthis.hydra.data.query.op.OpPercentileRank;
import com.addthis.hydra.data.query.op.OpPivot;
import com.addthis.hydra.data.query.op.OpRMap;
import com.addthis.hydra.data.query.op.OpRandomFail;
import com.addthis.hydra.data.query.op.OpRange;
import com.addthis.hydra.data.query.op.OpRemoveSingletons;
import com.addthis.hydra.data.query.op.OpReverse;
import com.addthis.hydra.data.query.op.OpRoll;
import com.addthis.hydra.data.query.op.OpSeen;
import com.addthis.hydra.data.query.op.OpSkip;
import com.addthis.hydra.data.query.op.OpSleep;
import com.addthis.hydra.data.query.op.OpString;
import com.addthis.hydra.data.query.op.OpTitle;
import com.addthis.hydra.data.query.op.OpTranspose;
import io.netty.channel.ChannelProgressivePromise;
enum Op {
AVG {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpRoll.AvgOpRoll(args, opPromise);
}
},
CHANGEPOINTS {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpChangePoints(processor.tableFactory(), args, opPromise);
}
},
COMPARE {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpCompare(args, opPromise);
}
},
CONTAINS {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpContains(args, opPromise);
}
},
DATEF {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpDateFormat(args, opPromise);
}
},
DELTA {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpRoll.DeltaOpRoll(args, opPromise);
}
},
DEPIVOT {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpDePivot(args, opPromise);
}
},
DIFF {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpDiff(processor.tableFactory(), args, opPromise);
}
},
DISORDER {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpDisorder(processor.tableFactory(), args, opPromise);
}
},
DSORT {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpDiskSort(args, processor.tempDir(), opPromise);
}
},
FILL {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpFill(args, opPromise);
}
},
FILTER {
@Override
QueryOp build(QueryOpProcessor processor,
@Syntax("HOCON") String args,
ChannelProgressivePromise opPromise) {
return new OpFilter(args, opPromise);
}
},
FOLD {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpFold(args, opPromise);
}
},
FTABLE {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpFrequencyTable(processor.tableFactory(), args, opPromise);
}
},
GATHER {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpGather(args, processor.memTip(), processor.rowTip(),
processor.tempDir().toString(), opPromise);
}
},
HISTO {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpHistogram(args, opPromise);
}
},
HISTO2 {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpHistogramExplicit(args, opPromise);
}
},
HOLTWINTERS {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpHoltWinters(processor.tableFactory(), args, opPromise);
}
},
DISTRIBUTION {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpPercentileDistribution(processor::createBundle, args, opPromise);
}
},
GROUPBY {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpGroupBy(processor, args, opPromise);
}
},
LIMIT {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpLimit(args, opPromise);
}
},
MAP {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpMap(args, opPromise);
}
},
RMAP {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpRMap(args, opPromise);
}
},
MAX {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpRoll.MaxOpRoll(args, opPromise);
}
},
MEDIAN {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpMedian(processor.tableFactory(), opPromise);
}
},
MERGE {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpMerge(args, opPromise);
}
},
MIN {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpRoll.MinOpRoll(args, opPromise);
}
},
NUM {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpNumber(args, opPromise);
}
},
MATH {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return NUM.build(processor, args, opPromise);
}
},
NODUP {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpNoDup(opPromise);
}
},
ORDER {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpOrder(args, opPromise);
}
},
ORDERMAP {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpOrderMap(args, opPromise);
}
},
PAD {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpFill(args, true, opPromise);
}
},
PERCENTRANK {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpPercentileRank(processor.tableFactory(), args, opPromise);
}
},
PIVOT {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpPivot(processor.tableFactory(), args, opPromise);
}
},
RANGE {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpRange(processor.tableFactory(), args, opPromise);
}
},
REVERSE {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpReverse(processor.tableFactory(), opPromise);
}
},
RMSING {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpRemoveSingletons(processor.tableFactory(), args, opPromise);
}
},
RNDFAIL {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpRandomFail(args, opPromise);
}
},
SEEN {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpSeen(processor.tableFactory(), args, opPromise);
}
},
SKIP {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpSkip(args, opPromise);
}
},
SLEEP {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpSleep(args, opPromise);
}
},
SORT {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpDiskSort(args, processor.tempDir(), opPromise);
}
},
STR {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpString(args, opPromise);
}
},
SUM {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpRoll.SumOpRoll(args, opPromise);
}
},
TOP {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return GATHER.build(processor, args, opPromise);
}
},
TITLE {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpTitle(args, opPromise);
}
},
TRANS {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return new OpTranspose(processor.tableFactory(), opPromise);
}
},
T {
@Override
QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise) {
return TRANS.build(processor, args, opPromise);
}
};
abstract QueryOp build(QueryOpProcessor processor,
String args,
ChannelProgressivePromise opPromise);
}