blob: 1248ca1fc8bb46d9669b8ff0d30d3d57f6abb72b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.pig.test.utils;
import java.io.IOException;
import org.apache.pig.AccumulatorEvalFunc;
import org.apache.pig.AlgebraicEvalFunc;
import org.apache.pig.EvalFunc;
import org.apache.pig.Accumulator;
import org.apache.pig.Algebraic;
import org.apache.pig.builtin.COUNT;
import org.apache.pig.builtin.LongSum;
import org.apache.pig.data.Tuple;
public class HelperEvalFuncUtils {
public static class AlgCOUNT extends AlgFunc<Long> {
public AlgCOUNT() {
super(new COUNT());
}
}
public static class AccCOUNT extends AccFunc<Long> {
public AccCOUNT() {
super(new COUNT());
}
}
public static class BasicCOUNT extends BasicFunc<Long> {
public BasicCOUNT() {
super(new COUNT());
}
}
public static class AlgSUM extends AlgFunc<Long> {
public AlgSUM() {
super(new LongSum());
}
}
public static class AccSUM extends AccFunc<Long> {
public AccSUM() {
super(new LongSum());
}
}
public static class BasicSUM extends BasicFunc<Long> {
public BasicSUM() {
super(new LongSum());
}
}
public static class AlgFunc<T> extends AlgebraicEvalFunc<T> {
Algebraic f;
public AlgFunc(Algebraic f) {
this.f=f;
}
@Override
public String getInitial() {
if (f==null) {
return LongSum.Initial.class.getName();
}
return f.getInitial();
}
@Override
public String getIntermed() {
if (f==null) {
return LongSum.Intermediate.class.getName();
}
return f.getIntermed();
}
@Override
public String getFinal() {
if (f==null) {
return LongSum.Final.class.getName();
}
return f.getFinal();
}
}
public static class AccFunc<T> extends AccumulatorEvalFunc<T> {
Accumulator<T> f;
public AccFunc(Accumulator<T> f) {
this.f=f;
}
@Override
public T getValue() {
return f.getValue();
}
@Override
public void accumulate(Tuple input) throws IOException {
f.accumulate(input);
}
@Override
public void cleanup() {
f.cleanup();
}
}
public static class BasicFunc<T> extends EvalFunc<T> {
EvalFunc<T> f;
public BasicFunc(EvalFunc<T> f) {
this.f=f;
}
@Override
public T exec(Tuple input) throws IOException {
return f.exec(input);
}
}
public static class AccLongCountWithConstructor extends AccFunc<Long> {
public AccLongCountWithConstructor(String mult) {
super(new AlgLongCountWithConstructor(mult));
}
}
public static class BasicLongCountWithConstructor extends BasicFunc<Long> {
public BasicLongCountWithConstructor(String mult) {
super(new AlgLongCountWithConstructor(mult));
}
}
//this exists to make sure that constructors work properly with AlgebraicEvalFunc
public static class AlgLongCountWithConstructor extends AlgebraicEvalFunc<Long> {
//this will inflate the count by the given factor
public AlgLongCountWithConstructor(String mult) {
super(mult);
}
public static class Initial extends COUNT.Initial {
long mult=1;
public Initial() {}
public Initial(String mult) {
this.mult = Long.parseLong(mult);
}
public Tuple exec(Tuple input) throws IOException {
Tuple t = super.exec(input);
t.set(0,((Long)t.get(0))*mult);
return t;
}
}
public static class Intermed extends COUNT.Intermediate {
public Intermed() {}
public Intermed(String mult) {}
}
public static class Final extends COUNT.Final {
public Final() {}
public Final(String mult) {}
}
@Override
public String getInitial() {
return Initial.class.getName();
}
@Override
public String getIntermed() {
return Intermed.class.getName();
}
@Override
public String getFinal() {
return Final.class.getName();
}
}
}