You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2013/09/30 05:34:05 UTC
[2/2] git commit: TAJO-211: Implement regexp_replace function.
(hyunsik)
TAJO-211: Implement regexp_replace function. (hyunsik)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/406337d9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/406337d9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/406337d9
Branch: refs/heads/master
Commit: 406337d9d15e5f818d481060e1efd73c958fe26f
Parents: 135b27a
Author: Hyunsik Choi <hy...@apache.org>
Authored: Mon Sep 30 12:31:44 2013 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Mon Sep 30 12:31:44 2013 +0900
----------------------------------------------------------------------
CHANGES.txt | 2 +
.../tajo/catalog/function/AggFunction.java | 51 ------
.../tajo/catalog/function/FunctionContext.java | 22 ---
.../tajo/catalog/function/GeneralFunction.java | 43 -----
.../tajo/catalog/json/CatalogGsonHelper.java | 5 -
.../apache/tajo/catalog/TestFunctionDesc.java | 16 +-
.../org/apache/tajo/catalog/TestCatalog.java | 27 +---
.../tajo/engine/eval/AggFuncCallEval.java | 103 ------------
.../eval/AggregationFunctionCallEval.java | 103 ++++++++++++
.../tajo/engine/eval/BasicEvalNodeVisitor.java | 10 +-
.../tajo/engine/eval/EvalNodeVisitor2.java | 4 +-
.../apache/tajo/engine/eval/EvalTreeUtil.java | 10 +-
.../org/apache/tajo/engine/eval/EvalType.java | 4 +-
.../apache/tajo/engine/eval/FuncCallEval.java | 90 -----------
.../org/apache/tajo/engine/eval/FuncEval.java | 141 ----------------
.../apache/tajo/engine/eval/FunctionEval.java | 162 +++++++++++++++++++
.../tajo/engine/eval/GeneralFunctionEval.java | 91 +++++++++++
.../tajo/engine/function/AggFunction.java | 52 ++++++
.../apache/tajo/engine/function/Country.java | 6 +-
.../tajo/engine/function/FunctionContext.java | 22 +++
.../tajo/engine/function/GeneralFunction.java | 50 ++++++
.../apache/tajo/engine/function/InCountry.java | 6 +-
.../tajo/engine/function/builtin/AvgDouble.java | 4 +-
.../tajo/engine/function/builtin/AvgFloat.java | 4 +-
.../tajo/engine/function/builtin/AvgInt.java | 4 +-
.../tajo/engine/function/builtin/AvgLong.java | 4 +-
.../tajo/engine/function/builtin/CountRows.java | 4 +-
.../engine/function/builtin/CountValue.java | 2 +-
.../function/builtin/CountValueDistinct.java | 2 +-
.../tajo/engine/function/builtin/Date.java | 7 +-
.../tajo/engine/function/builtin/MaxDouble.java | 4 +-
.../tajo/engine/function/builtin/MaxFloat.java | 4 +-
.../tajo/engine/function/builtin/MaxInt.java | 4 +-
.../tajo/engine/function/builtin/MaxLong.java | 4 +-
.../tajo/engine/function/builtin/MinDouble.java | 4 +-
.../tajo/engine/function/builtin/MinFloat.java | 4 +-
.../tajo/engine/function/builtin/MinInt.java | 4 +-
.../tajo/engine/function/builtin/MinLong.java | 4 +-
.../tajo/engine/function/builtin/MinString.java | 4 +-
.../tajo/engine/function/builtin/RandomInt.java | 4 +-
.../tajo/engine/function/builtin/SumDouble.java | 4 +-
.../tajo/engine/function/builtin/SumFloat.java | 4 +-
.../tajo/engine/function/builtin/SumInt.java | 4 +-
.../tajo/engine/function/builtin/SumLong.java | 4 +-
.../tajo/engine/function/builtin/Today.java | 5 +-
.../engine/function/string/RegexpReplace.java | 104 ++++++++++++
.../tajo/engine/function/string/SplitPart.java | 5 +-
.../apache/tajo/engine/json/CoreGsonHelper.java | 4 +-
.../apache/tajo/engine/planner/LogicalPlan.java | 4 +-
.../tajo/engine/planner/LogicalPlanner.java | 12 +-
.../apache/tajo/engine/planner/PlannerUtil.java | 14 +-
.../org/apache/tajo/master/GlobalPlanner.java | 6 +-
.../java/org/apache/tajo/master/TajoMaster.java | 10 ++
.../apache/tajo/engine/eval/TestEvalTree.java | 2 +-
.../tajo/engine/eval/TestEvalTreeUtil.java | 4 +-
.../tajo/engine/function/TestAggFunction.java | 1 -
.../TestStringOperatorsAndFunctions.java | 26 +++
.../planner/physical/TestPhysicalPlanner.java | 10 +-
.../tajo/storage/json/StorageGsonHelper.java | 7 -
59 files changed, 724 insertions(+), 597 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 419e492..a148c20 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -4,6 +4,8 @@ Release 0.2.0 - unreleased
NEW FEATURES
+ TAJO-211: Implement regexp_replace function. (hyunsik)
+
TAJO-212: Implement type cast expresion. (hyunsik)
TAJO-206: Implement String concatenation operator (||). (hyunsik)
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/AggFunction.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/AggFunction.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/AggFunction.java
deleted file mode 100644
index 6eb6a8b..0000000
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/AggFunction.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * 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.tajo.catalog.function;
-
-import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.json.CatalogGsonHelper;
-import org.apache.tajo.common.TajoDataTypes.DataType;
-import org.apache.tajo.datum.Datum;
-import org.apache.tajo.storage.Tuple;
-
-public abstract class AggFunction<T extends Datum> extends Function<T> {
-
- public AggFunction(Column[] definedArgs) {
- super(definedArgs);
- }
-
- public abstract FunctionContext newContext();
-
- public abstract void eval(FunctionContext ctx, Tuple params);
-
- public void merge(FunctionContext ctx, Tuple part) {
- eval(ctx, part);
- }
-
- public abstract Datum getPartialResult(FunctionContext ctx);
-
- public abstract DataType [] getPartialResultType();
-
- public abstract T terminate(FunctionContext ctx);
-
- @Override
- public String toJson() {
- return CatalogGsonHelper.toJson(this, AggFunction.class);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/FunctionContext.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/FunctionContext.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/FunctionContext.java
deleted file mode 100644
index 39f60dd..0000000
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/FunctionContext.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * 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.tajo.catalog.function;
-
-public interface FunctionContext {
-}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/GeneralFunction.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/GeneralFunction.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/GeneralFunction.java
deleted file mode 100644
index 7f639ae..0000000
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/GeneralFunction.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 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.tajo.catalog.function;
-
-import org.apache.tajo.json.GsonObject;
-import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.json.CatalogGsonHelper;
-import org.apache.tajo.datum.Datum;
-import org.apache.tajo.storage.Tuple;
-
-public abstract class GeneralFunction<T extends Datum> extends Function<T> implements GsonObject {
- public GeneralFunction(Column[] definedArgs) {
- super(definedArgs);
- }
-
- public abstract Datum eval(Tuple params);
-
- public enum Type {
- AGG,
- GENERAL
- }
-
- @Override
- public String toJson() {
- return CatalogGsonHelper.toJson(this, GeneralFunction.class);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/CatalogGsonHelper.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/CatalogGsonHelper.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/CatalogGsonHelper.java
index a3e9e94..9f031f4 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/CatalogGsonHelper.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/CatalogGsonHelper.java
@@ -21,12 +21,9 @@ package org.apache.tajo.catalog.json;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.hadoop.fs.Path;
-import org.apache.tajo.json.GsonObject;
import org.apache.tajo.catalog.TableDesc;
import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.catalog.function.AggFunction;
import org.apache.tajo.catalog.function.Function;
-import org.apache.tajo.catalog.function.GeneralFunction;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.json.*;
@@ -49,8 +46,6 @@ public class CatalogGsonHelper {
adapters.put(TableDesc.class, new TableDescAdapter());
adapters.put(TableMeta.class, new TableMetaAdapter());
adapters.put(Function.class, new FunctionAdapter());
- adapters.put(GeneralFunction.class, new FunctionAdapter());
- adapters.put(AggFunction.class, new FunctionAdapter());
adapters.put(Datum.class, new DatumAdapter());
adapters.put(DataType.class, new DataTypeAdapter());
return adapters;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestFunctionDesc.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestFunctionDesc.java b/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestFunctionDesc.java
index 1ede050..8359453 100644
--- a/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestFunctionDesc.java
+++ b/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestFunctionDesc.java
@@ -18,15 +18,12 @@
package org.apache.tajo.catalog;
-import org.apache.tajo.catalog.function.GeneralFunction;
+import org.apache.tajo.catalog.function.Function;
import org.apache.tajo.catalog.json.CatalogGsonHelper;
import org.apache.tajo.catalog.proto.CatalogProtos.FunctionDescProto;
import org.apache.tajo.catalog.proto.CatalogProtos.FunctionType;
import org.apache.tajo.common.TajoDataTypes.Type;
-import org.apache.tajo.datum.Datum;
-import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.exception.InternalException;
-import org.apache.tajo.storage.Tuple;
import org.apache.tajo.util.CommonTestingUtil;
import org.apache.tajo.util.FileUtil;
import org.junit.Test;
@@ -39,7 +36,7 @@ import static org.junit.Assert.*;
public class TestFunctionDesc {
private static final String TEST_PATH = "target/test-data/TestFunctionDesc";
- public static class TestSum extends GeneralFunction {
+ public static class TestSum extends Function {
private Integer x;
private Integer y;
@@ -48,15 +45,8 @@ public class TestFunctionDesc {
new Column("arg2", org.apache.tajo.common.TajoDataTypes.Type.INT4) });
}
- @Override
- public Datum eval(Tuple params) {
- x = params.get(0).asInt4();
- y = params.get(1).asInt4();
- return DatumFactory.createInt4(x + y);
- }
-
public String toJSON() {
- return CatalogGsonHelper.toJson(this, GeneralFunction.class);
+ return CatalogGsonHelper.toJson(this, Function.class);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
index bc3bf4b..6c42439 100644
--- a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
+++ b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
@@ -19,18 +19,16 @@
package org.apache.tajo.catalog;
import org.apache.hadoop.fs.Path;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.apache.tajo.catalog.function.GeneralFunction;
+import org.apache.tajo.catalog.function.Function;
import org.apache.tajo.catalog.proto.CatalogProtos.FunctionType;
import org.apache.tajo.catalog.proto.CatalogProtos.IndexMethod;
import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.conf.TajoConf;
-import org.apache.tajo.datum.Datum;
-import org.apache.tajo.storage.Tuple;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
import java.io.IOException;
@@ -82,8 +80,6 @@ public class TestCatalog {
catalog.addTable(meta);
assertTrue(catalog.existsTable("getTable"));
- TableDesc meta2 = catalog.getTableDesc("getTable");
-
catalog.deleteTable("getTable");
assertFalse(catalog.existsTable("getTable"));
}
@@ -145,7 +141,7 @@ public class TestCatalog {
catalog.deleteTable(desc.getName());
}
- public static class TestFunc1 extends GeneralFunction {
+ public static class TestFunc1 extends Function {
public TestFunc1() {
super(
new Column [] {
@@ -153,15 +149,9 @@ public class TestCatalog {
}
);
}
-
- @Override
- public Datum eval(Tuple params) {
- return params.get(0);
- }
}
- public static class TestFunc2 extends GeneralFunction {
- private Datum param;
+ public static class TestFunc2 extends Function {
public TestFunc2() {
super(
new Column [] {
@@ -170,11 +160,6 @@ public class TestCatalog {
}
);
}
-
- @Override
- public Datum eval(Tuple params) {
- return params.get(1);
- }
}
@Test
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggFuncCallEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggFuncCallEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggFuncCallEval.java
deleted file mode 100644
index 1282d1d..0000000
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggFuncCallEval.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * 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.tajo.engine.eval;
-
-import com.google.gson.annotations.Expose;
-import org.apache.tajo.catalog.FunctionDesc;
-import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
-import org.apache.tajo.common.TajoDataTypes.DataType;
-import org.apache.tajo.datum.Datum;
-import org.apache.tajo.storage.Tuple;
-import org.apache.tajo.storage.VTuple;
-
-public class AggFuncCallEval extends FuncEval implements Cloneable {
- @Expose protected AggFunction instance;
- @Expose boolean firstPhase = false;
- private Tuple params;
-
- public AggFuncCallEval(FunctionDesc desc, AggFunction instance, EvalNode[] givenArgs) {
- super(EvalType.AGG_FUNCTION, desc, givenArgs);
- this.instance = instance;
- }
-
- @Override
- public EvalContext newContext() {
- return new AggFunctionCtx(argEvals, instance.newContext());
- }
-
- @Override
- public void eval(EvalContext ctx, Schema schema, Tuple tuple) {
- AggFunctionCtx localCtx = (AggFunctionCtx) ctx;
- if (params == null) {
- this.params = new VTuple(argEvals.length);
- }
-
- if (argEvals != null) {
- params.clear();
-
- for (int i = 0; i < argEvals.length; i++) {
- argEvals[i].eval(localCtx.argCtxs[i], schema, tuple);
- params.put(i, argEvals[i].terminate(localCtx.argCtxs[i]));
- }
- }
-
- if (firstPhase) {
- instance.eval(localCtx.funcCtx, params);
- } else {
- instance.merge(localCtx.funcCtx, params);
- }
- }
-
- @Override
- public Datum terminate(EvalContext ctx) {
- if (firstPhase) {
- return instance.getPartialResult(((AggFunctionCtx)ctx).funcCtx);
- } else {
- return instance.terminate(((AggFunctionCtx)ctx).funcCtx);
- }
- }
-
- @Override
- public DataType[] getValueType() {
- if (firstPhase) {
- return instance.getPartialResultType();
- } else {
- return funcDesc.getReturnType();
- }
- }
-
- public Object clone() throws CloneNotSupportedException {
- return super.clone();
- }
-
- public void setFirstPhase() {
- this.firstPhase = true;
- }
-
- protected class AggFunctionCtx extends FuncCallCtx {
- FunctionContext funcCtx;
-
- AggFunctionCtx(EvalNode [] argEvals, FunctionContext funcCtx) {
- super(argEvals);
- this.funcCtx = funcCtx;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggregationFunctionCallEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggregationFunctionCallEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggregationFunctionCallEval.java
new file mode 100644
index 0000000..3f7431e
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggregationFunctionCallEval.java
@@ -0,0 +1,103 @@
+/**
+ * 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.tajo.engine.eval;
+
+import com.google.gson.annotations.Expose;
+import org.apache.tajo.catalog.FunctionDesc;
+import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
+import org.apache.tajo.common.TajoDataTypes.DataType;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.storage.VTuple;
+
+public class AggregationFunctionCallEval extends FunctionEval implements Cloneable {
+ @Expose protected AggFunction instance;
+ @Expose boolean firstPhase = false;
+ private Tuple params;
+
+ public AggregationFunctionCallEval(FunctionDesc desc, AggFunction instance, EvalNode[] givenArgs) {
+ super(EvalType.AGG_FUNCTION, desc, givenArgs);
+ this.instance = instance;
+ }
+
+ @Override
+ public EvalContext newContext() {
+ return new AggFunctionCtx(argEvals, instance.newContext());
+ }
+
+ @Override
+ public void eval(EvalContext ctx, Schema schema, Tuple tuple) {
+ AggFunctionCtx localCtx = (AggFunctionCtx) ctx;
+ if (params == null) {
+ this.params = new VTuple(argEvals.length);
+ }
+
+ if (argEvals != null) {
+ params.clear();
+
+ for (int i = 0; i < argEvals.length; i++) {
+ argEvals[i].eval(localCtx.argCtxs[i], schema, tuple);
+ params.put(i, argEvals[i].terminate(localCtx.argCtxs[i]));
+ }
+ }
+
+ if (firstPhase) {
+ instance.eval(localCtx.funcCtx, params);
+ } else {
+ instance.merge(localCtx.funcCtx, params);
+ }
+ }
+
+ @Override
+ public Datum terminate(EvalContext ctx) {
+ if (firstPhase) {
+ return instance.getPartialResult(((AggFunctionCtx)ctx).funcCtx);
+ } else {
+ return instance.terminate(((AggFunctionCtx)ctx).funcCtx);
+ }
+ }
+
+ @Override
+ public DataType[] getValueType() {
+ if (firstPhase) {
+ return instance.getPartialResultType();
+ } else {
+ return funcDesc.getReturnType();
+ }
+ }
+
+ public Object clone() throws CloneNotSupportedException {
+ return super.clone();
+ }
+
+ public void setFirstPhase() {
+ this.firstPhase = true;
+ }
+
+ protected class AggFunctionCtx extends FuncCallCtx {
+ FunctionContext funcCtx;
+
+ AggFunctionCtx(EvalNode [] argEvals, FunctionContext funcCtx) {
+ super(argEvals);
+ this.funcCtx = funcCtx;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BasicEvalNodeVisitor.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BasicEvalNodeVisitor.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BasicEvalNodeVisitor.java
index 205e452..9755716 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BasicEvalNodeVisitor.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BasicEvalNodeVisitor.java
@@ -111,10 +111,10 @@ public class BasicEvalNodeVisitor<CONTEXT, RESULT> implements EvalNodeVisitor2<C
// Functions
case FUNCTION:
- result = visitFuncCall(context, stack, (FuncCallEval) evalNode);
+ result = visitFuncCall(context, stack, (GeneralFunctionEval) evalNode);
break;
case AGG_FUNCTION:
- result = visitAggrFuncCall(context, stack, (AggFuncCallEval) evalNode);
+ result = visitAggrFuncCall(context, stack, (AggregationFunctionCallEval) evalNode);
break;
default:
@@ -132,7 +132,7 @@ public class BasicEvalNodeVisitor<CONTEXT, RESULT> implements EvalNodeVisitor2<C
return result;
}
- private RESULT visitDefaultFunctionEval(CONTEXT context, Stack<EvalNode> stack, FuncEval functionEval) {
+ private RESULT visitDefaultFunctionEval(CONTEXT context, Stack<EvalNode> stack, FunctionEval functionEval) {
RESULT result = null;
stack.push(functionEval);
for (EvalNode arg : functionEval.getArgs()) {
@@ -287,12 +287,12 @@ public class BasicEvalNodeVisitor<CONTEXT, RESULT> implements EvalNodeVisitor2<C
}
@Override
- public RESULT visitFuncCall(CONTEXT context, Stack<EvalNode> stack, FuncCallEval evalNode) {
+ public RESULT visitFuncCall(CONTEXT context, Stack<EvalNode> stack, GeneralFunctionEval evalNode) {
return visitDefaultFunctionEval(context, stack, evalNode);
}
@Override
- public RESULT visitAggrFuncCall(CONTEXT context, Stack<EvalNode> stack, AggFuncCallEval evalNode) {
+ public RESULT visitAggrFuncCall(CONTEXT context, Stack<EvalNode> stack, AggregationFunctionCallEval evalNode) {
return visitDefaultFunctionEval(context, stack, evalNode);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalNodeVisitor2.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalNodeVisitor2.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalNodeVisitor2.java
index 5c48008..209f45d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalNodeVisitor2.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalNodeVisitor2.java
@@ -60,6 +60,6 @@ public interface EvalNodeVisitor2<CONTEXT, RESULT> {
RESULT visitRegex(CONTEXT context, Stack<EvalNode> stack, RegexPredicateEval evalNode);
// Functions
- RESULT visitFuncCall(CONTEXT context, Stack<EvalNode> stack, FuncCallEval evalNode);
- RESULT visitAggrFuncCall(CONTEXT context, Stack<EvalNode> stack, AggFuncCallEval evalNode);
+ RESULT visitFuncCall(CONTEXT context, Stack<EvalNode> stack, GeneralFunctionEval evalNode);
+ RESULT visitAggrFuncCall(CONTEXT context, Stack<EvalNode> stack, AggregationFunctionCallEval evalNode);
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalTreeUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalTreeUtil.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalTreeUtil.java
index 6be0996..d8a0a82 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalTreeUtil.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalTreeUtil.java
@@ -326,25 +326,25 @@ public class EvalTreeUtil {
}
}
- public static List<AggFuncCallEval> findDistinctAggFunction(EvalNode expr) {
+ public static List<AggregationFunctionCallEval> findDistinctAggFunction(EvalNode expr) {
AllAggFunctionFinder finder = new AllAggFunctionFinder();
expr.postOrder(finder);
return Lists.newArrayList(finder.getAggregationFunction());
}
public static class AllAggFunctionFinder implements EvalNodeVisitor {
- private Set<AggFuncCallEval> aggFucntions = Sets.newHashSet();
- private AggFuncCallEval field = null;
+ private Set<AggregationFunctionCallEval> aggFucntions = Sets.newHashSet();
+ private AggregationFunctionCallEval field = null;
@Override
public void visit(EvalNode node) {
if (node.getType() == EvalType.AGG_FUNCTION) {
- field = (AggFuncCallEval) node;
+ field = (AggregationFunctionCallEval) node;
aggFucntions.add(field);
}
}
- public Set<AggFuncCallEval> getAggregationFunction() {
+ public Set<AggregationFunctionCallEval> getAggregationFunction() {
return this.aggFucntions;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalType.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalType.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalType.java
index 9f81b05..cd80b3a 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalType.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalType.java
@@ -39,8 +39,8 @@ public enum EvalType {
DIVIDE(BinaryEval.class, "/"),
// Function
- AGG_FUNCTION(AggFuncCallEval.class),
- FUNCTION(FuncCallEval.class),
+ AGG_FUNCTION(AggregationFunctionCallEval.class),
+ FUNCTION(GeneralFunctionEval.class),
// String operator or pattern matching predicates
LIKE(LikePredicateEval.class),
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncCallEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncCallEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncCallEval.java
deleted file mode 100644
index 2e7faaa..0000000
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncCallEval.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * 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.tajo.engine.eval;
-
-import com.google.common.base.Objects;
-import com.google.gson.annotations.Expose;
-import org.apache.tajo.catalog.FunctionDesc;
-import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.function.GeneralFunction;
-import org.apache.tajo.datum.Datum;
-import org.apache.tajo.storage.Tuple;
-import org.apache.tajo.storage.VTuple;
-import org.apache.tajo.util.TUtil;
-
-public class FuncCallEval extends FuncEval {
- @Expose protected GeneralFunction instance;
- private Tuple tuple;
- private Tuple params = null;
- private Schema schema;
-
- public FuncCallEval(FunctionDesc desc, GeneralFunction instance, EvalNode [] givenArgs) {
- super(EvalType.FUNCTION, desc, givenArgs);
- this.instance = instance;
- }
-
- /* (non-Javadoc)
- * @see nta.query.executor.eval.Expr#evalVal(Tuple)
- */
- @Override
- public void eval(EvalContext ctx, Schema schema, Tuple tuple) {
- this.schema = schema;
- this.tuple = tuple;
- }
-
- @Override
- public Datum terminate(EvalContext ctx) {
- FuncCallCtx localCtx = (FuncCallCtx) ctx;
- if (this.params == null) {
- params = new VTuple(argEvals.length);
- }
-
- if(argEvals != null) {
- params.clear();
- for(int i=0;i < argEvals.length; i++) {
- argEvals[i].eval(localCtx.argCtxs[i], schema, tuple);
- params.put(i, argEvals[i].terminate(localCtx.argCtxs[i]));
- }
- }
- return instance.eval(params);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof FuncCallEval) {
- FuncCallEval other = (FuncCallEval) obj;
- return super.equals(other) &&
- TUtil.checkEquals(instance, other.instance);
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(funcDesc, instance);
- }
-
- @Override
- public Object clone() throws CloneNotSupportedException {
- FuncCallEval eval = (FuncCallEval) super.clone();
- eval.instance = (GeneralFunction) instance.clone();
- return eval;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncEval.java
deleted file mode 100644
index afadaad..0000000
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncEval.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * 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.tajo.engine.eval;
-
-import com.google.common.base.Objects;
-import com.google.gson.annotations.Expose;
-import org.apache.tajo.catalog.FunctionDesc;
-import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.common.TajoDataTypes.DataType;
-import org.apache.tajo.datum.Datum;
-import org.apache.tajo.storage.Tuple;
-import org.apache.tajo.util.TUtil;
-
-import static org.apache.tajo.catalog.proto.CatalogProtos.FunctionType.DISTINCT_AGGREGATION;
-import static org.apache.tajo.catalog.proto.CatalogProtos.FunctionType.DISTINCT_UDA;
-
-public abstract class FuncEval extends EvalNode implements Cloneable {
- @Expose protected FunctionDesc funcDesc;
- @Expose protected EvalNode [] argEvals;
-
- public FuncEval(EvalType type, FunctionDesc funcDesc, EvalNode[] argEvals) {
- super(type);
- this.funcDesc = funcDesc;
- this.argEvals = argEvals;
- }
-
- public boolean isDistinct() {
- return funcDesc.getFuncType() == DISTINCT_AGGREGATION || funcDesc.getFuncType() == DISTINCT_UDA;
- }
-
- @Override
- public EvalContext newContext() {
- FuncCallCtx newCtx = new FuncCallCtx(argEvals);
- return newCtx;
- }
-
- public EvalNode [] getArgs() {
- return this.argEvals;
- }
-
- public void setArgs(EvalNode [] args) {
- this.argEvals = args;
- }
-
- public DataType [] getValueType() {
- return this.funcDesc.getReturnType();
- }
-
- @Override
- public abstract void eval(EvalContext ctx, Schema schema, Tuple tuple);
-
- public abstract Datum terminate(EvalContext ctx);
-
- @Override
- public String getName() {
- return funcDesc.getSignature();
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- for(int i=0; i < argEvals.length; i++) {
- sb.append(argEvals[i]);
- if(i+1 < argEvals.length)
- sb.append(",");
- }
- return funcDesc.getSignature()+"("+sb+")";
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof FuncEval) {
- FuncEval other = (FuncEval) obj;
-
- boolean b1 = this.type == other.type;
- boolean b2 = TUtil.checkEquals(funcDesc, other.funcDesc);
- boolean b3 = TUtil.checkEquals(argEvals, other.argEvals);
- return b1 && b2 && b3;
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(funcDesc, argEvals);
- }
-
- @Override
- public Object clone() throws CloneNotSupportedException {
- FuncEval eval = (FuncEval) super.clone();
- eval.funcDesc = (FunctionDesc) funcDesc.clone();
- eval.argEvals = new EvalNode[argEvals.length];
- for (int i = 0; i < argEvals.length; i++) {
- eval.argEvals[i] = (EvalNode) argEvals[i].clone();
- }
- return eval;
- }
-
- @Override
- public void preOrder(EvalNodeVisitor visitor) {
- for (EvalNode eval : argEvals) {
- eval.postOrder(visitor);
- }
- visitor.visit(this);
- }
-
- @Override
- public void postOrder(EvalNodeVisitor visitor) {
- for (EvalNode eval : argEvals) {
- eval.postOrder(visitor);
- }
- visitor.visit(this);
- }
-
- protected class FuncCallCtx implements EvalContext {
- EvalContext [] argCtxs;
- FuncCallCtx(EvalNode [] argEvals) {
- argCtxs = new EvalContext[argEvals.length];
- for (int i = 0; i < argEvals.length; i++) {
- argCtxs[i] = argEvals[i].newContext();
- }
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FunctionEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FunctionEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FunctionEval.java
new file mode 100644
index 0000000..eea2b9c
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FunctionEval.java
@@ -0,0 +1,162 @@
+/**
+ * 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.tajo.engine.eval;
+
+import com.google.common.base.Objects;
+import com.google.gson.annotations.Expose;
+import org.apache.tajo.catalog.FunctionDesc;
+import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.common.TajoDataTypes;
+import org.apache.tajo.common.TajoDataTypes.DataType;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.util.TUtil;
+
+import static org.apache.tajo.catalog.proto.CatalogProtos.FunctionType.DISTINCT_AGGREGATION;
+import static org.apache.tajo.catalog.proto.CatalogProtos.FunctionType.DISTINCT_UDA;
+
+public abstract class FunctionEval extends EvalNode implements Cloneable {
+ public static enum ParamType {
+ CONSTANT, VARIABLE, NULL
+ }
+
+ @Expose protected FunctionDesc funcDesc;
+ @Expose protected EvalNode [] argEvals;
+
+ public FunctionEval(EvalType type, FunctionDesc funcDesc, EvalNode[] argEvals) {
+ super(type);
+ this.funcDesc = funcDesc;
+ this.argEvals = argEvals;
+ }
+
+ public ParamType [] getParamType() {
+ ParamType [] paramTypes = new ParamType[argEvals.length];
+ for (int i = 0; i < argEvals.length; i++) {
+ if (argEvals[i].getType() == EvalType.CONST) {
+ if (argEvals[i].getValueType()[0].getType() == TajoDataTypes.Type.NULL) {
+ paramTypes[i] = ParamType.NULL;
+ } else {
+ paramTypes[i] = ParamType.CONSTANT;
+ }
+ } else {
+ paramTypes[i] = ParamType.VARIABLE;
+ }
+ }
+ return paramTypes;
+ }
+
+ public boolean isDistinct() {
+ return funcDesc.getFuncType() == DISTINCT_AGGREGATION || funcDesc.getFuncType() == DISTINCT_UDA;
+ }
+
+ @Override
+ public EvalContext newContext() {
+ FuncCallCtx newCtx = new FuncCallCtx(argEvals);
+ return newCtx;
+ }
+
+ public EvalNode [] getArgs() {
+ return this.argEvals;
+ }
+
+ public void setArgs(EvalNode [] args) {
+ this.argEvals = args;
+ }
+
+ public DataType [] getValueType() {
+ return this.funcDesc.getReturnType();
+ }
+
+ @Override
+ public abstract void eval(EvalContext ctx, Schema schema, Tuple tuple);
+
+ public abstract Datum terminate(EvalContext ctx);
+
+ @Override
+ public String getName() {
+ return funcDesc.getSignature();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ for(int i=0; i < argEvals.length; i++) {
+ sb.append(argEvals[i]);
+ if(i+1 < argEvals.length)
+ sb.append(",");
+ }
+ return funcDesc.getSignature()+"("+sb+")";
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof FunctionEval) {
+ FunctionEval other = (FunctionEval) obj;
+
+ boolean b1 = this.type == other.type;
+ boolean b2 = TUtil.checkEquals(funcDesc, other.funcDesc);
+ boolean b3 = TUtil.checkEquals(argEvals, other.argEvals);
+ return b1 && b2 && b3;
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(funcDesc, argEvals);
+ }
+
+ @Override
+ public Object clone() throws CloneNotSupportedException {
+ FunctionEval eval = (FunctionEval) super.clone();
+ eval.funcDesc = (FunctionDesc) funcDesc.clone();
+ eval.argEvals = new EvalNode[argEvals.length];
+ for (int i = 0; i < argEvals.length; i++) {
+ eval.argEvals[i] = (EvalNode) argEvals[i].clone();
+ }
+ return eval;
+ }
+
+ @Override
+ public void preOrder(EvalNodeVisitor visitor) {
+ for (EvalNode eval : argEvals) {
+ eval.postOrder(visitor);
+ }
+ visitor.visit(this);
+ }
+
+ @Override
+ public void postOrder(EvalNodeVisitor visitor) {
+ for (EvalNode eval : argEvals) {
+ eval.postOrder(visitor);
+ }
+ visitor.visit(this);
+ }
+
+ protected class FuncCallCtx implements EvalContext {
+ EvalContext [] argCtxs;
+ FuncCallCtx(EvalNode [] argEvals) {
+ argCtxs = new EvalContext[argEvals.length];
+ for (int i = 0; i < argEvals.length; i++) {
+ argCtxs[i] = argEvals[i].newContext();
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/GeneralFunctionEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/GeneralFunctionEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/GeneralFunctionEval.java
new file mode 100644
index 0000000..aeb68aa
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/GeneralFunctionEval.java
@@ -0,0 +1,91 @@
+/**
+ * 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.tajo.engine.eval;
+
+import com.google.common.base.Objects;
+import com.google.gson.annotations.Expose;
+import org.apache.tajo.catalog.FunctionDesc;
+import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.storage.VTuple;
+import org.apache.tajo.util.TUtil;
+
+public class GeneralFunctionEval extends FunctionEval {
+ @Expose protected GeneralFunction instance;
+ private Tuple tuple;
+ private Tuple params = null;
+ private Schema schema;
+
+ public GeneralFunctionEval(FunctionDesc desc, GeneralFunction instance, EvalNode[] givenArgs) {
+ super(EvalType.FUNCTION, desc, givenArgs);
+ this.instance = instance;
+ this.instance.init(getParamType());
+ }
+
+ /* (non-Javadoc)
+ * @see nta.query.executor.eval.Expr#evalVal(Tuple)
+ */
+ @Override
+ public void eval(EvalContext ctx, Schema schema, Tuple tuple) {
+ this.schema = schema;
+ this.tuple = tuple;
+ }
+
+ @Override
+ public Datum terminate(EvalContext ctx) {
+ FuncCallCtx localCtx = (FuncCallCtx) ctx;
+ if (this.params == null) {
+ params = new VTuple(argEvals.length);
+ }
+
+ if(argEvals != null) {
+ params.clear();
+ for(int i=0;i < argEvals.length; i++) {
+ argEvals[i].eval(localCtx.argCtxs[i], schema, tuple);
+ params.put(i, argEvals[i].terminate(localCtx.argCtxs[i]));
+ }
+ }
+ return instance.eval(params);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof GeneralFunctionEval) {
+ GeneralFunctionEval other = (GeneralFunctionEval) obj;
+ return super.equals(other) &&
+ TUtil.checkEquals(instance, other.instance);
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(funcDesc, instance);
+ }
+
+ @Override
+ public Object clone() throws CloneNotSupportedException {
+ GeneralFunctionEval eval = (GeneralFunctionEval) super.clone();
+ eval.instance = (GeneralFunction) instance.clone();
+ return eval;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/AggFunction.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/AggFunction.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/AggFunction.java
new file mode 100644
index 0000000..a79df8e
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/AggFunction.java
@@ -0,0 +1,52 @@
+/**
+ * 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.tajo.engine.function;
+
+import org.apache.tajo.catalog.Column;
+import org.apache.tajo.catalog.function.Function;
+import org.apache.tajo.catalog.json.CatalogGsonHelper;
+import org.apache.tajo.common.TajoDataTypes.DataType;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.storage.Tuple;
+
+public abstract class AggFunction<T extends Datum> extends Function<T> {
+
+ public AggFunction(Column[] definedArgs) {
+ super(definedArgs);
+ }
+
+ public abstract FunctionContext newContext();
+
+ public abstract void eval(FunctionContext ctx, Tuple params);
+
+ public void merge(FunctionContext ctx, Tuple part) {
+ eval(ctx, part);
+ }
+
+ public abstract Datum getPartialResult(FunctionContext ctx);
+
+ public abstract DataType [] getPartialResultType();
+
+ public abstract T terminate(FunctionContext ctx);
+
+ @Override
+ public String toJson() {
+ return CatalogGsonHelper.toJson(this, AggFunction.class);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/Country.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/Country.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/Country.java
index fe0c6c1..672a358 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/Country.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/Country.java
@@ -19,22 +19,20 @@
package org.apache.tajo.engine.function;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.GeneralFunction;
-import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.TextDatum;
import org.apache.tajo.storage.Tuple;
import org.apache.tajo.util.GeoUtil;
import static org.apache.tajo.common.TajoDataTypes.Type.TEXT;
-public class Country extends GeneralFunction<TextDatum> {
+public class Country extends GeneralFunction {
public Country() {
super(new Column[] {new Column("addr", TEXT)});
}
@Override
- public Datum eval(Tuple params) {
+ public TextDatum eval(Tuple params) {
return new TextDatum(GeoUtil.getCountryCode(params.get(0).asChars()));
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/FunctionContext.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/FunctionContext.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/FunctionContext.java
new file mode 100644
index 0000000..076c8ec
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/FunctionContext.java
@@ -0,0 +1,22 @@
+/**
+ * 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.tajo.engine.function;
+
+public interface FunctionContext {
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/GeneralFunction.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/GeneralFunction.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/GeneralFunction.java
new file mode 100644
index 0000000..aa43b12
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/GeneralFunction.java
@@ -0,0 +1,50 @@
+/**
+ * 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.tajo.engine.function;
+
+import org.apache.tajo.catalog.Column;
+import org.apache.tajo.catalog.function.Function;
+import org.apache.tajo.catalog.json.CatalogGsonHelper;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.engine.eval.FunctionEval;
+import org.apache.tajo.json.GsonObject;
+import org.apache.tajo.storage.Tuple;
+
+public abstract class GeneralFunction extends Function implements GsonObject {
+ public GeneralFunction(Column[] definedArgs) {
+ super(definedArgs);
+ }
+
+ /**
+ * This method gives hints to an actual function instance.
+ */
+ public void init(FunctionEval.ParamType [] paramTypes) {}
+
+ public abstract Datum eval(Tuple params);
+
+ public enum Type {
+ AGG,
+ GENERAL
+ }
+
+ @Override
+ public String toJson() {
+ return CatalogGsonHelper.toJson(this, GeneralFunction.class);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/InCountry.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/InCountry.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/InCountry.java
index 75c52f1..0043a12 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/InCountry.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/InCountry.java
@@ -19,14 +19,12 @@
package org.apache.tajo.engine.function;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.GeneralFunction;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.BooleanDatum;
-import org.apache.tajo.datum.Datum;
import org.apache.tajo.storage.Tuple;
import org.apache.tajo.util.GeoUtil;
-public class InCountry extends GeneralFunction<BooleanDatum> {
+public class InCountry extends GeneralFunction {
public InCountry() {
super(new Column[] {new Column("addr", TajoDataTypes.Type.TEXT),
@@ -34,7 +32,7 @@ public class InCountry extends GeneralFunction<BooleanDatum> {
}
@Override
- public Datum eval(Tuple params) {
+ public BooleanDatum eval(Tuple params) {
String addr = params.get(0).asChars();
String otherCode = params.get(1).asChars();
String thisCode = GeoUtil.getCountryCode(addr);
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgDouble.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgDouble.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgDouble.java
index 44ad3b1..5441726 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgDouble.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgDouble.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.ArrayDatum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgFloat.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgFloat.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgFloat.java
index c1ac80c..a245eab 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgFloat.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgFloat.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.ArrayDatum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgInt.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgInt.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgInt.java
index f7f528e..c34c890 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgInt.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgInt.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.ArrayDatum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgLong.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgLong.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgLong.java
index bc7e984..1dc2084 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgLong.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/AvgLong.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.ArrayDatum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountRows.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountRows.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountRows.java
index 41d27e0..8f97ccc 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountRows.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountRows.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountValue.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountValue.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountValue.java
index 608c612..5959197 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountValue.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountValue.java
@@ -19,7 +19,7 @@
package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountValueDistinct.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountValueDistinct.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountValueDistinct.java
index 05850be..4c4900b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountValueDistinct.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/CountValueDistinct.java
@@ -19,7 +19,7 @@
package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/Date.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/Date.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/Date.java
index e3f4af6..cbc789c 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/Date.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/Date.java
@@ -21,8 +21,7 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.GeneralFunction;
-import org.apache.tajo.datum.Datum;
+import org.apache.tajo.engine.function.GeneralFunction;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.Int8Datum;
import org.apache.tajo.storage.Tuple;
@@ -32,7 +31,7 @@ import java.text.SimpleDateFormat;
import static org.apache.tajo.common.TajoDataTypes.Type.TEXT;
-public class Date extends GeneralFunction<Int8Datum> {
+public class Date extends GeneralFunction {
private final Log LOG = LogFactory.getLog(Date.class);
private final static String dateFormat = "dd/MM/yyyy HH:mm:ss";
@@ -41,7 +40,7 @@ public class Date extends GeneralFunction<Int8Datum> {
}
@Override
- public Datum eval(Tuple params) {
+ public Int8Datum eval(Tuple params) {
try {
return DatumFactory.createInt8(new SimpleDateFormat(dateFormat)
.parse(params.get(0).asChars()).getTime());
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxDouble.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxDouble.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxDouble.java
index 419362e..0410150 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxDouble.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxDouble.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxFloat.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxFloat.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxFloat.java
index 9a85faf..d25288d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxFloat.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxFloat.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxInt.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxInt.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxInt.java
index 34ef0f5..75889e7 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxInt.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxInt.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxLong.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxLong.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxLong.java
index 1364cf1..24e7b07 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxLong.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MaxLong.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinDouble.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinDouble.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinDouble.java
index 5a7a604..72af4a3 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinDouble.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinDouble.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinFloat.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinFloat.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinFloat.java
index 302a586..1937f07 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinFloat.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinFloat.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinInt.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinInt.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinInt.java
index 4aff484..13d3745 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinInt.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinInt.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinLong.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinLong.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinLong.java
index 932b88e..8641895 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinLong.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinLong.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinString.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinString.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinString.java
index 4a5f258..f771229 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinString.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/MinString.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/RandomInt.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/RandomInt.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/RandomInt.java
index 3ffddfe..304bd44 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/RandomInt.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/RandomInt.java
@@ -19,7 +19,7 @@
package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.GeneralFunction;
+import org.apache.tajo.engine.function.GeneralFunction;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.storage.Tuple;
@@ -28,7 +28,7 @@ import java.util.Random;
import static org.apache.tajo.common.TajoDataTypes.Type.INT4;
-public class RandomInt extends GeneralFunction<Datum> {
+public class RandomInt extends GeneralFunction {
private Random random;
public RandomInt() {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumDouble.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumDouble.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumDouble.java
index 277a3bf..c10cf1d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumDouble.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumDouble.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumFloat.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumFloat.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumFloat.java
index 251c98d..40842e8 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumFloat.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumFloat.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumInt.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumInt.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumInt.java
index c1e607b..19b58b4 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumInt.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumInt.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumLong.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumLong.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumLong.java
index 3e800a5..260566e 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumLong.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/SumLong.java
@@ -20,8 +20,8 @@ package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.AggFunction;
-import org.apache.tajo.catalog.function.FunctionContext;
+import org.apache.tajo.engine.function.AggFunction;
+import org.apache.tajo.engine.function.FunctionContext;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/406337d9/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/Today.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/Today.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/Today.java
index c6a8518..e283c2f 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/Today.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/builtin/Today.java
@@ -19,13 +19,12 @@
package org.apache.tajo.engine.function.builtin;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.function.GeneralFunction;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
-import org.apache.tajo.datum.Int8Datum;
+import org.apache.tajo.engine.function.GeneralFunction;
import org.apache.tajo.storage.Tuple;
-public class Today extends GeneralFunction<Int8Datum> {
+public class Today extends GeneralFunction {
public Today() {
super(new Column[] {});