You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hj...@apache.org on 2014/10/26 20:27:35 UTC
[29/35] TAJO-1125: Separate logical plan and optimizer into a maven
module.
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/BitLength.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/BitLength.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/BitLength.java
index 3a5c216..c099c77 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/BitLength.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/BitLength.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/CharLength.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/CharLength.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/CharLength.java
index 76d3b55..b287c93 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/CharLength.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/CharLength.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Chr.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Chr.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Chr.java
index fac4b27..4d0a4a9 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Chr.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Chr.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Concat.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Concat.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Concat.java
index 50b1440..3268817 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Concat.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Concat.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Concat_ws.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Concat_ws.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Concat_ws.java
index d8e2113..4a723cb 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Concat_ws.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Concat_ws.java
@@ -25,7 +25,7 @@ import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.datum.TextDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Decode.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Decode.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Decode.java
index 13f0749..72d3501 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Decode.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Decode.java
@@ -25,7 +25,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Digest.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Digest.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Digest.java
index 163c6fe..3de914a 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Digest.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Digest.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Encode.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Encode.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Encode.java
index 0023ae6..4cdbc24 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Encode.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Encode.java
@@ -25,7 +25,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/FindInSet.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/FindInSet.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/FindInSet.java
index 0c3e221..ced7d4e 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/FindInSet.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/FindInSet.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/InitCap.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/InitCap.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/InitCap.java
index 4347dbb..35bb164 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/InitCap.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/InitCap.java
@@ -24,7 +24,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/LTrim.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/LTrim.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/LTrim.java
index db6b714..f345293 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/LTrim.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/LTrim.java
@@ -25,10 +25,10 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.eval.FunctionEval;
-import org.apache.tajo.engine.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
+import org.apache.tajo.plan.expr.FunctionEval;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.storage.Tuple;
/**
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Left.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Left.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Left.java
index 31469f5..bf3fbfb 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Left.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Left.java
@@ -24,7 +24,7 @@ import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.datum.TextDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Length.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Length.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Length.java
index 389f358..39bdd2f 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Length.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Length.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Locate.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Locate.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Locate.java
index 67ee389..7b70399 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Locate.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Locate.java
@@ -24,7 +24,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Lower.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Lower.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Lower.java
index 80c8192..7c1e33e 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Lower.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Lower.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Lpad.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
index bc0031e..58c0951 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
@@ -25,10 +25,10 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.eval.FunctionEval;
-import org.apache.tajo.engine.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
+import org.apache.tajo.plan.expr.FunctionEval;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.storage.Tuple;
/**
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Md5.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Md5.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Md5.java
index fb5f73c..f4cb7cb 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Md5.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Md5.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/OctetLength.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/OctetLength.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/OctetLength.java
index dc71907..cb5af15 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/OctetLength.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/OctetLength.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/QuoteIdent.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/QuoteIdent.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/QuoteIdent.java
index d5237d7..aaef10d 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/QuoteIdent.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/QuoteIdent.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/RTrim.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/RTrim.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/RTrim.java
index 9e3ff8d..8e295fa 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/RTrim.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/RTrim.java
@@ -25,10 +25,10 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.eval.FunctionEval;
-import org.apache.tajo.engine.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
+import org.apache.tajo.plan.expr.FunctionEval;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.storage.Tuple;
/**
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/RegexpReplace.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/RegexpReplace.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/RegexpReplace.java
index 2b59d34..da06f73 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/RegexpReplace.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/RegexpReplace.java
@@ -20,17 +20,20 @@ package org.apache.tajo.engine.function.string;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.engine.function.GeneralFunction;
import org.apache.tajo.common.TajoDataTypes;
-import org.apache.tajo.datum.*;
+import org.apache.tajo.datum.BooleanDatum;
+import org.apache.tajo.datum.Datum;
+import org.apache.tajo.datum.DatumFactory;
+import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.storage.Tuple;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import static org.apache.tajo.engine.eval.FunctionEval.ParamType;
+import static org.apache.tajo.plan.expr.FunctionEval.ParamType;
/**
* This function is defined as:
@@ -67,7 +70,7 @@ public class RegexpReplace extends GeneralFunction {
});
}
- public void init(ParamType [] paramTypes) {
+ public void init(ParamType[] paramTypes) {
if (paramTypes[0] == ParamType.NULL || paramTypes[1] == ParamType.NULL || paramTypes[2] == ParamType.NULL) {
isAlwaysNull = true;
} else if (paramTypes[1] == ParamType.CONSTANT) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Repeat.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Repeat.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Repeat.java
index 4c52a6e..c02ef66 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Repeat.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Repeat.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Reverse.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Reverse.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Reverse.java
index a77ba69..bf67294 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Reverse.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Reverse.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Right.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Right.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Right.java
index aa0dad0..68af423 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Right.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Right.java
@@ -24,7 +24,7 @@ import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.datum.TextDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Rpad.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
index 225777b..9d42848 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
@@ -25,10 +25,10 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.eval.FunctionEval;
-import org.apache.tajo.engine.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
+import org.apache.tajo.plan.expr.FunctionEval;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/SplitPart.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/SplitPart.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/SplitPart.java
index fd1de55..1c3be00 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/SplitPart.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/SplitPart.java
@@ -20,7 +20,7 @@ package org.apache.tajo.engine.function.string;
import org.apache.commons.lang.StringUtils;
import org.apache.tajo.catalog.Column;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/StrPos.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/StrPos.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/StrPos.java
index d6f88de..9c3e4f1 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/StrPos.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/StrPos.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/StrPosb.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/StrPosb.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/StrPosb.java
index 56fb3a1..c332006 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/StrPosb.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/StrPosb.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Substr.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Substr.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Substr.java
index 74492b1..7e4ddd6 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Substr.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Substr.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/ToBin.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/ToBin.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/ToBin.java
index 3048aa8..a9f85f3 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/ToBin.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/ToBin.java
@@ -22,7 +22,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/ToHex.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/ToHex.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/ToHex.java
index a8624ab..2e20008 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/ToHex.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/ToHex.java
@@ -24,7 +24,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Upper.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Upper.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Upper.java
index 47d38ba..fc6ff3a 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Upper.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/string/Upper.java
@@ -23,7 +23,7 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.engine.function.GeneralFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/window/Rank.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/window/Rank.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/window/Rank.java
index e461f9d..0df3f23 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/window/Rank.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/window/Rank.java
@@ -24,8 +24,8 @@ import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.Int8Datum;
-import org.apache.tajo.engine.function.FunctionContext;
-import org.apache.tajo.engine.function.WindowAggFunc;
+import org.apache.tajo.plan.function.FunctionContext;
+import org.apache.tajo.plan.function.WindowAggFunc;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/function/window/RowNumber.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/window/RowNumber.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/window/RowNumber.java
index 8b0943f..bd838f8 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/window/RowNumber.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/window/RowNumber.java
@@ -23,8 +23,8 @@ import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.Int8Datum;
-import org.apache.tajo.engine.function.FunctionContext;
-import org.apache.tajo.engine.function.WindowAggFunc;
+import org.apache.tajo.plan.function.FunctionContext;
+import org.apache.tajo.plan.function.WindowAggFunc;
import org.apache.tajo.engine.function.annotation.Description;
import org.apache.tajo.engine.function.annotation.ParamTypes;
import org.apache.tajo.storage.Tuple;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java b/tajo-core/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java
index 0340a32..57f2536 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java
@@ -22,16 +22,18 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.hadoop.fs.Path;
import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.function.Function;
import org.apache.tajo.catalog.json.FunctionAdapter;
import org.apache.tajo.catalog.json.TableMetaAdapter;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
-import org.apache.tajo.engine.eval.EvalNode;
-import org.apache.tajo.engine.function.AggFunction;
-import org.apache.tajo.engine.function.GeneralFunction;
-import org.apache.tajo.engine.planner.logical.LogicalNode;
+import org.apache.tajo.plan.expr.EvalNode;
+import org.apache.tajo.plan.function.AggFunction;
+import org.apache.tajo.plan.function.GeneralFunction;
+import org.apache.tajo.plan.logical.LogicalNode;
+import org.apache.tajo.function.Function;
import org.apache.tajo.json.*;
+import org.apache.tajo.plan.serder.EvalNodeAdapter;
+import org.apache.tajo.plan.serder.LogicalNodeAdapter;
import org.apache.tajo.util.TUtil;
import java.lang.reflect.Type;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/json/EvalNodeAdapter.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/json/EvalNodeAdapter.java b/tajo-core/src/main/java/org/apache/tajo/engine/json/EvalNodeAdapter.java
deleted file mode 100644
index 56600a6..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/json/EvalNodeAdapter.java
+++ /dev/null
@@ -1,50 +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.json;
-
-import com.google.gson.*;
-import org.apache.tajo.engine.eval.EvalNode;
-import org.apache.tajo.engine.eval.EvalType;
-import org.apache.tajo.json.GsonSerDerAdapter;
-
-import java.lang.reflect.Type;
-
-public class EvalNodeAdapter implements GsonSerDerAdapter<EvalNode> {
-
- @Override
- public EvalNode deserialize(JsonElement json, Type type,
- JsonDeserializationContext ctx) throws JsonParseException {
- JsonObject jsonObject = json.getAsJsonObject();
- String nodeName = jsonObject.get("type").getAsString();
- Class clazz = EvalType.valueOf(nodeName).getBaseClass();
- return ctx.deserialize(jsonObject.get("body"), clazz);
- }
-
- @Override
- public JsonElement serialize(EvalNode evalNode, Type type,
- JsonSerializationContext ctx) {
- JsonObject json = new JsonObject();
- json.addProperty("type", evalNode.getType().name());
- json.add("body", ctx.serialize(evalNode));
- return json;
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/json/LogicalNodeAdapter.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/json/LogicalNodeAdapter.java b/tajo-core/src/main/java/org/apache/tajo/engine/json/LogicalNodeAdapter.java
deleted file mode 100644
index e2becef..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/json/LogicalNodeAdapter.java
+++ /dev/null
@@ -1,50 +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.json;
-
-import com.google.gson.*;
-import org.apache.tajo.engine.planner.logical.LogicalNode;
-import org.apache.tajo.engine.planner.logical.NodeType;
-import org.apache.tajo.json.GsonSerDerAdapter;
-
-import java.lang.reflect.Type;
-
-public class LogicalNodeAdapter implements GsonSerDerAdapter<LogicalNode> {
-
- @Override
- public LogicalNode deserialize(JsonElement src, Type type,
- JsonDeserializationContext ctx) throws JsonParseException {
- JsonObject jsonObject = src.getAsJsonObject();
- String nodeName = jsonObject.get("type").getAsString();
- Class clazz = NodeType.valueOf(nodeName).getBaseClass();
- return ctx.deserialize(jsonObject.get("body"), clazz);
- }
-
- @Override
- public JsonElement serialize(LogicalNode src, Type typeOfSrc,
- JsonSerializationContext context) {
- JsonObject json = new JsonObject();
- json.addProperty("type", src.getType().name());
- json.add("body", context.serialize(src));
- return json;
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/EvalTreeOptimizationRule.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/EvalTreeOptimizationRule.java b/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/EvalTreeOptimizationRule.java
deleted file mode 100644
index 2f17663..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/EvalTreeOptimizationRule.java
+++ /dev/null
@@ -1,27 +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.optimizer.eval;
-
-import org.apache.tajo.engine.eval.EvalNode;
-import org.apache.tajo.engine.planner.LogicalPlanner;
-
-@Prioritized
-public interface EvalTreeOptimizationRule {
- public EvalNode optimize(LogicalPlanner.PlanContext context, EvalNode tree);
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/EvalTreeOptimizer.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/EvalTreeOptimizer.java b/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/EvalTreeOptimizer.java
deleted file mode 100644
index 3ed272e..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/EvalTreeOptimizer.java
+++ /dev/null
@@ -1,78 +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.optimizer.eval;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tajo.engine.eval.EvalNode;
-import org.apache.tajo.engine.planner.LogicalPlanner;
-import org.apache.tajo.util.ClassUtil;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
-
-public class EvalTreeOptimizer {
- private static final Log LOG = LogFactory.getLog(EvalTreeOptimizer.class);
-
- private List<EvalTreeOptimizationRule> rules = Lists.newArrayList();
-
- public EvalTreeOptimizer() {
- Set<Class> functionClasses = ClassUtil.findClasses(EvalTreeOptimizationRule.class,
- EvalTreeOptimizationRule.class.getPackage().getName() + ".rules");
-
- for (Class eachRule : functionClasses) {
- if (!EvalTreeOptimizationRule.class.isAssignableFrom(eachRule)) {
- continue;
- }
-
- EvalTreeOptimizationRule rule = null;
- try {
- rule = (EvalTreeOptimizationRule)eachRule.newInstance();
- } catch (Exception e) {
- LOG.warn(eachRule + " cannot instantiate EvalTreeOptimizerRule class because of " + e.getMessage());
- continue;
- }
- rules.add(rule);
- }
-
- Collections.sort(rules, new Comparator<EvalTreeOptimizationRule>() {
- @Override
- public int compare(EvalTreeOptimizationRule o1, EvalTreeOptimizationRule o2) {
- int priority1 = o1.getClass().getAnnotation(Prioritized.class).priority();
- int priority2 = o2.getClass().getAnnotation(Prioritized.class).priority();
- return priority1 - priority2;
- }
- });
- }
-
- public EvalNode optimize(LogicalPlanner.PlanContext context, EvalNode node) {
- Preconditions.checkNotNull(node);
-
- EvalNode optimized = node;
- for (EvalTreeOptimizationRule rule : rules) {
- optimized = rule.optimize(context, optimized);
- }
-
- return optimized;
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/Prioritized.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/Prioritized.java b/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/Prioritized.java
deleted file mode 100644
index 865d895..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/Prioritized.java
+++ /dev/null
@@ -1,30 +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.optimizer.eval;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface Prioritized {
- int priority() default 99;
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/rules/ConstantFolding.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/rules/ConstantFolding.java b/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/rules/ConstantFolding.java
deleted file mode 100644
index 8bcb0cd..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/rules/ConstantFolding.java
+++ /dev/null
@@ -1,92 +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.optimizer.eval.rules;
-
-import org.apache.tajo.engine.eval.*;
-import org.apache.tajo.engine.optimizer.eval.EvalTreeOptimizationRule;
-import org.apache.tajo.engine.optimizer.eval.Prioritized;
-import org.apache.tajo.engine.planner.LogicalPlanner;
-
-import java.util.Stack;
-
-@Prioritized(priority = 10)
-public class ConstantFolding extends SimpleEvalNodeVisitor<LogicalPlanner.PlanContext>
- implements EvalTreeOptimizationRule {
-
- @Override
- public EvalNode optimize(LogicalPlanner.PlanContext context, EvalNode evalNode) {
- return visit(context, evalNode, new Stack<EvalNode>());
- }
-
- @Override
- public EvalNode visitBinaryEval(LogicalPlanner.PlanContext context, Stack<EvalNode> stack, BinaryEval binaryEval) {
- stack.push(binaryEval);
- EvalNode lhs = visit(context, binaryEval.getLeftExpr(), stack);
- EvalNode rhs = visit(context, binaryEval.getRightExpr(), stack);
- stack.pop();
-
- if (!binaryEval.getLeftExpr().equals(lhs)) {
- binaryEval.setLeftExpr(lhs);
- }
- if (!binaryEval.getRightExpr().equals(rhs)) {
- binaryEval.setRightExpr(rhs);
- }
-
- if (lhs.getType() == EvalType.CONST && rhs.getType() == EvalType.CONST) {
- return new ConstEval(binaryEval.eval(null, null));
- }
-
- return binaryEval;
- }
-
- @Override
- public EvalNode visitUnaryEval(LogicalPlanner.PlanContext context, Stack<EvalNode> stack, UnaryEval unaryEval) {
- stack.push(unaryEval);
- EvalNode child = visit(context, unaryEval.getChild(), stack);
- stack.pop();
-
- if (child.getType() == EvalType.CONST) {
- return new ConstEval(unaryEval.eval(null, null));
- }
-
- return unaryEval;
- }
-
- @Override
- public EvalNode visitFuncCall(LogicalPlanner.PlanContext context, FunctionEval evalNode, Stack<EvalNode> stack) {
- boolean constantOfAllDescendents = true;
-
- if ("sleep".equals(evalNode.getFuncDesc().getFunctionName())) {
- constantOfAllDescendents = false;
- } else {
- if (evalNode.getArgs() != null) {
- for (EvalNode arg : evalNode.getArgs()) {
- arg = visit(context, arg, stack);
- constantOfAllDescendents &= (arg.getType() == EvalType.CONST);
- }
- }
- }
-
- if (constantOfAllDescendents && evalNode.getType() == EvalType.FUNCTION) {
- return new ConstEval(evalNode.eval(null, null));
- } else {
- return evalNode;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/rules/ConstantPropagation.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/rules/ConstantPropagation.java b/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/rules/ConstantPropagation.java
deleted file mode 100644
index c7c6bd0..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/optimizer/eval/rules/ConstantPropagation.java
+++ /dev/null
@@ -1,112 +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.optimizer.eval.rules;
-
-import org.apache.tajo.engine.eval.*;
-import org.apache.tajo.engine.optimizer.eval.EvalTreeOptimizationRule;
-import org.apache.tajo.engine.optimizer.eval.Prioritized;
-import org.apache.tajo.engine.planner.LogicalPlanner;
-
-import java.util.Stack;
-
-/**
- * It replaces all field references which actually point to constant values by constant values.
- * In order to maximize the effectiveness of constant folding, ConstantPropagation should be performed after
- * constant folding.
- */
-@Prioritized(priority = 15)
-public class ConstantPropagation extends SimpleEvalNodeVisitor<LogicalPlanner.PlanContext>
- implements EvalTreeOptimizationRule {
-
- @Override
- public EvalNode optimize(LogicalPlanner.PlanContext context, EvalNode evalNode) {
- if (evalNode.getType() == EvalType.FIELD) {
- FieldEval fieldEval = (FieldEval) evalNode;
-
- // if a reference points to a const value
- if (context.getQueryBlock().isConstReference(fieldEval.getName())) {
- return context.getQueryBlock().getConstByReference(fieldEval.getName());
- } else {
- return evalNode; // otherwise, it just returns.
- }
- } else {
- return visit(context, evalNode, new Stack<EvalNode>());
- }
- }
-
- @Override
- public EvalNode visitBinaryEval(LogicalPlanner.PlanContext context, Stack<EvalNode> stack, BinaryEval binaryEval) {
- stack.push(binaryEval);
-
- for (int i = 0; i < 2; i++) {
- if (binaryEval.getChild(i).getType() == EvalType.FIELD) {
- FieldEval fieldEval = (FieldEval) binaryEval.getChild(i);
- if (context.getQueryBlock().isConstReference(fieldEval.getName())) {
- binaryEval.setChild(i, context.getQueryBlock().getConstByReference(fieldEval.getName()));
- continue;
- }
- }
-
- visit(context, binaryEval.getChild(i), stack);
- }
-
- stack.pop();
-
- return binaryEval;
- }
-
- @Override
- public EvalNode visitUnaryEval(LogicalPlanner.PlanContext context, Stack<EvalNode> stack, UnaryEval unaryEval) {
- stack.push(unaryEval);
-
- if (unaryEval.getChild().getType() == EvalType.FIELD) {
- FieldEval fieldEval = (FieldEval) unaryEval.getChild();
- if (context.getQueryBlock().isConstReference(fieldEval.getName())) {
- unaryEval.setChild(context.getQueryBlock().getConstByReference(fieldEval.getName()));
- stack.pop();
- return unaryEval;
- }
- }
- visit(context, unaryEval.getChild(), stack);
- stack.pop();
-
- return unaryEval;
- }
-
- @Override
- public EvalNode visitFuncCall(LogicalPlanner.PlanContext context, FunctionEval function, Stack<EvalNode> stack) {
- stack.push(function);
-
- for (int i = 0; i < function.getArgs().length; i++) {
- if (function.getArgs()[i].getType() == EvalType.FIELD) {
- FieldEval fieldEval = (FieldEval) function.getArgs()[i];
- if (context.getQueryBlock().isConstReference(fieldEval.getName())) {
- function.setArg(i, context.getQueryBlock().getConstByReference(fieldEval.getName()));
- continue;
- }
- }
-
- visit(context, function.getArgs()[i], stack);
- }
-
- stack.pop();
-
- return function;
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLSyntaxError.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLSyntaxError.java b/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLSyntaxError.java
index d565509..e4bfc7c 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLSyntaxError.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLSyntaxError.java
@@ -19,7 +19,7 @@
package org.apache.tajo.engine.parser;
-import org.apache.tajo.engine.exception.InvalidQueryException;
+import org.apache.tajo.plan.InvalidQueryException;
public class SQLSyntaxError extends InvalidQueryException {
private static final long serialVersionUID = 5388279335175632066L;
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/plan/EvalTreeProtoDeserializer.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/plan/EvalTreeProtoDeserializer.java b/tajo-core/src/main/java/org/apache/tajo/engine/plan/EvalTreeProtoDeserializer.java
deleted file mode 100644
index b62e236..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/plan/EvalTreeProtoDeserializer.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Lisensed 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.plan;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.FunctionDesc;
-import org.apache.tajo.catalog.exception.NoSuchFunctionException;
-import org.apache.tajo.catalog.proto.CatalogProtos;
-import org.apache.tajo.datum.*;
-import org.apache.tajo.engine.eval.*;
-import org.apache.tajo.engine.function.AggFunction;
-import org.apache.tajo.engine.function.GeneralFunction;
-import org.apache.tajo.engine.plan.proto.PlanProto;
-import org.apache.tajo.exception.InternalException;
-
-import java.util.*;
-
-/**
- * It deserializes a serialized eval tree consisting of a number of EvalNodes.
- *
- * {@link org.apache.tajo.engine.plan.EvalTreeProtoSerializer} serializes an eval tree in a postfix traverse order.
- * So, this class firstly sorts all serialized eval nodes in ascending order of their sequence IDs. Then,
- * it sequentially restores each serialized node to EvalNode instance.
- *
- * @see org.apache.tajo.engine.plan.EvalTreeProtoSerializer
- */
-public class EvalTreeProtoDeserializer {
-
- public static EvalNode deserialize(PlanProto.EvalTree tree) {
- Map<Integer, EvalNode> evalNodeMap = Maps.newHashMap();
-
- // sort serialized eval nodes in an ascending order of their IDs.
- List<PlanProto.EvalNode> nodeList = Lists.newArrayList(tree.getNodesList());
- Collections.sort(nodeList, new Comparator<PlanProto.EvalNode>() {
- @Override
- public int compare(PlanProto.EvalNode o1, PlanProto.EvalNode o2) {
- return o1.getId() - o2.getId();
- }
- });
-
- EvalNode current = null;
-
- // The sorted order is the same of a postfix traverse order.
- // So, it sequentially transforms each serialized node into a EvalNode instance in a postfix order of
- // the original eval tree.
-
- Iterator<PlanProto.EvalNode> it = nodeList.iterator();
- while (it.hasNext()) {
- PlanProto.EvalNode protoNode = it.next();
-
- EvalType type = EvalType.valueOf(protoNode.getType().name());
-
- if (EvalType.isUnaryOperator(type)) {
- PlanProto.UnaryEval unaryProto = protoNode.getUnary();
- EvalNode child = evalNodeMap.get(unaryProto.getChildId());
-
- switch (type) {
- case NOT:
- current = new NotEval(child);
- break;
- case IS_NULL:
- current = new IsNullEval(unaryProto.getNegative(), child);
- break;
- case CAST:
- current = new CastEval(child, unaryProto.getCastingType());
- break;
- case SIGNED:
- current = new SignedEval(unaryProto.getNegative(), child);
- break;
- default:
- throw new RuntimeException("Unknown EvalType: " + type.name());
- }
-
- } else if (EvalType.isBinaryOperator(type)) {
- PlanProto.BinaryEval binProto = protoNode.getBinary();
- EvalNode lhs = evalNodeMap.get(binProto.getLhsId());
- EvalNode rhs = evalNodeMap.get(binProto.getRhsId());
-
- switch (type) {
- case IN:
- current = new InEval(lhs, (RowConstantEval) rhs, binProto.getNegative());
- break;
- default:
- current = new BinaryEval(type, lhs, rhs);
- }
-
- } else if (type == EvalType.CONST) {
- PlanProto.ConstEval constProto = protoNode.getConst();
- current = new ConstEval(deserialize(constProto.getValue()));
-
- } else if (type == EvalType.ROW_CONSTANT) {
- PlanProto.RowConstEval rowConstProto = protoNode.getRowConst();
- Datum[] values = new Datum[rowConstProto.getValuesCount()];
- for (int i = 0; i < rowConstProto.getValuesCount(); i++) {
- values[i] = deserialize(rowConstProto.getValues(i));
- }
- current = new RowConstantEval(values);
-
- } else if (type == EvalType.FIELD) {
- CatalogProtos.ColumnProto columnProto = protoNode.getField();
- current = new FieldEval(new Column(columnProto));
-
- } else if (type == EvalType.BETWEEN) {
- PlanProto.BetweenEval betweenProto = protoNode.getBetween();
- current = new BetweenPredicateEval(betweenProto.getNegative(), betweenProto.getSymmetric(),
- evalNodeMap.get(betweenProto.getPredicand()),
- evalNodeMap.get(betweenProto.getBegin()),
- evalNodeMap.get(betweenProto.getEnd()));
-
- } else if (type == EvalType.CASE) {
- PlanProto.CaseWhenEval caseWhenProto = protoNode.getCasewhen();
- CaseWhenEval caseWhenEval = new CaseWhenEval();
- for (int i = 0; i < caseWhenProto.getIfCondsCount(); i++) {
- caseWhenEval.addIfCond((CaseWhenEval.IfThenEval) evalNodeMap.get(caseWhenProto.getIfConds(i)));
- }
- if (caseWhenProto.hasElse()) {
- caseWhenEval.setElseResult(evalNodeMap.get(caseWhenProto.getElse()));
- }
- current = caseWhenEval;
-
- } else if (type == EvalType.IF_THEN) {
- PlanProto.IfCondEval ifCondProto = protoNode.getIfCond();
- current = new CaseWhenEval.IfThenEval(evalNodeMap.get(ifCondProto.getCondition()),
- evalNodeMap.get(ifCondProto.getThen()));
-
- } else if (EvalType.isFunction(type)) {
- PlanProto.FunctionEval funcProto = protoNode.getFunction();
-
- EvalNode [] params = new EvalNode[funcProto.getParamIdsCount()];
- for (int i = 0; i < funcProto.getParamIdsCount(); i++) {
- params[i] = evalNodeMap.get(funcProto.getParamIds(i));
- }
-
- FunctionDesc funcDesc = null;
- try {
- funcDesc = new FunctionDesc(funcProto.getFuncion());
- if (type == EvalType.FUNCTION) {
- GeneralFunction instance = (GeneralFunction) funcDesc.newInstance();
- current = new GeneralFunctionEval(new FunctionDesc(funcProto.getFuncion()), instance, params);
- } else if (type == EvalType.AGG_FUNCTION || type == EvalType.WINDOW_FUNCTION) {
- AggFunction instance = (AggFunction) funcDesc.newInstance();
- if (type == EvalType.AGG_FUNCTION) {
- current = new AggregationFunctionCallEval(new FunctionDesc(funcProto.getFuncion()), instance, params);
- } else {
- current = new WindowFunctionEval(new FunctionDesc(funcProto.getFuncion()), instance, params, null);
- }
- }
- } catch (ClassNotFoundException cnfe) {
- throw new NoSuchFunctionException(funcDesc.getFunctionName(), funcDesc.getParamTypes());
- } catch (InternalException ie) {
- throw new NoSuchFunctionException(funcDesc.getFunctionName(), funcDesc.getParamTypes());
- }
- } else {
- throw new RuntimeException("Unknown EvalType: " + type.name());
- }
-
- evalNodeMap.put(protoNode.getId(), current);
- }
-
- return current;
- }
-
- public static Datum deserialize(PlanProto.Datum datum) {
- switch (datum.getType()) {
- case BOOLEAN:
- return DatumFactory.createBool(datum.getBoolean());
- case CHAR:
- return DatumFactory.createChar(datum.getText());
- case INT1:
- case INT2:
- return DatumFactory.createInt2((short) datum.getInt4());
- case INT4:
- return DatumFactory.createInt4(datum.getInt4());
- case INT8:
- return DatumFactory.createInt8(datum.getInt8());
- case FLOAT4:
- return DatumFactory.createFloat4(datum.getFloat4());
- case FLOAT8:
- return DatumFactory.createFloat8(datum.getFloat8());
- case VARCHAR:
- case TEXT:
- return DatumFactory.createText(datum.getText());
- case TIMESTAMP:
- return new TimestampDatum(datum.getInt8());
- case DATE:
- return DatumFactory.createDate(datum.getInt4());
- case TIME:
- return DatumFactory.createTime(datum.getInt8());
- case BINARY:
- case BLOB:
- return DatumFactory.createBlob(datum.getBlob().toByteArray());
- case INTERVAL:
- return new IntervalDatum(datum.getInterval().getMonth(), datum.getInterval().getMsec());
- case NULL_TYPE:
- return NullDatum.get();
- default:
- throw new RuntimeException("Unknown data type: " + datum.getType().name());
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/plan/EvalTreeProtoSerializer.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/plan/EvalTreeProtoSerializer.java b/tajo-core/src/main/java/org/apache/tajo/engine/plan/EvalTreeProtoSerializer.java
deleted file mode 100644
index d2b6fd7..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/plan/EvalTreeProtoSerializer.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Lisensed 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.plan;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Maps;
-import com.google.protobuf.ByteString;
-import org.apache.tajo.datum.Datum;
-import org.apache.tajo.datum.IntervalDatum;
-import org.apache.tajo.engine.eval.*;
-import org.apache.tajo.engine.plan.proto.PlanProto;
-
-import java.util.Map;
-import java.util.Stack;
-
-/**
- * It traverses an eval tree consisting of a number of {@link org.apache.tajo.engine.eval.EvalNode}
- * in a postfix traverse order. The postfix traverse order guarantees that all child nodes of some node N
- * were already visited when the node N is visited. This manner makes tree serialization possible in a simple logic.
- */
-public class EvalTreeProtoSerializer
- extends SimpleEvalNodeVisitor<EvalTreeProtoSerializer.EvalTreeProtoBuilderContext> {
-
- private static final EvalTreeProtoSerializer instance;
-
- static {
- instance = new EvalTreeProtoSerializer();
- }
-
- public static class EvalTreeProtoBuilderContext {
- private int seqId = 0;
- private Map<EvalNode, Integer> idMap = Maps.newHashMap();
- private PlanProto.EvalTree.Builder treeBuilder = PlanProto.EvalTree.newBuilder();
- }
-
- public static PlanProto.EvalTree serialize(EvalNode evalNode) {
- EvalTreeProtoSerializer.EvalTreeProtoBuilderContext context =
- new EvalTreeProtoSerializer.EvalTreeProtoBuilderContext();
- instance.visit(context, evalNode, new Stack<EvalNode>());
- return context.treeBuilder.build();
- }
-
- /**
- * Return child's serialization IDs. Usually, 0 is used for a child id of unary node or left child of
- * binary node. 1 is used for right child of binary node. Between will use 0 as predicand, 1 as begin, and 2 as
- * end eval node. For more detail, you should refer to each EvalNode implementation.
- *
- * @param context Context
- * @param evalNode EvalNode
- * @return The array of IDs which points to stored EvalNode.
- * @see org.apache.tajo.engine.eval.EvalNode
- */
- private int [] registerGetChildIds(EvalTreeProtoBuilderContext context, EvalNode evalNode) {
- int [] childIds = new int[evalNode.childNum()];
- for (int i = 0; i < evalNode.childNum(); i++) {
- if (context.idMap.containsKey(evalNode.getChild(i))) {
- childIds[i] = context.idMap.get(evalNode.getChild(i));
- } else {
- childIds[i] = context.seqId++;
- }
- }
- return childIds;
- }
-
- private PlanProto.EvalNode.Builder createEvalBuilder(EvalTreeProtoBuilderContext context, EvalNode node) {
- int sid; // serialization sequence id
- if (context.idMap.containsKey(node)) {
- sid = context.idMap.get(node);
- } else {
- sid = context.seqId++;
- context.idMap.put(node, sid);
- }
-
- PlanProto.EvalNode.Builder nodeBuilder = PlanProto.EvalNode.newBuilder();
- nodeBuilder.setId(sid);
- nodeBuilder.setDataType(node.getValueType());
- nodeBuilder.setType(PlanProto.EvalType.valueOf(node.getType().name()));
- return nodeBuilder;
- }
-
- @Override
- public EvalNode visitUnaryEval(EvalTreeProtoBuilderContext context, Stack<EvalNode> stack, UnaryEval unary) {
- // visiting and registering childs
- super.visitUnaryEval(context, stack, unary);
- int [] childIds = registerGetChildIds(context, unary);
-
- // building itself
- PlanProto.UnaryEval.Builder unaryBuilder = PlanProto.UnaryEval.newBuilder();
- unaryBuilder.setChildId(childIds[0]);
- if (unary.getType() == EvalType.IS_NULL) {
- IsNullEval isNullEval = (IsNullEval) unary;
- unaryBuilder.setNegative(isNullEval.isNot());
- } else if (unary.getType() == EvalType.SIGNED) {
- SignedEval signedEval = (SignedEval) unary;
- unaryBuilder.setNegative(signedEval.isNegative());
- } else if (unary.getType() == EvalType.CAST) {
- CastEval castEval = (CastEval) unary;
- unaryBuilder.setCastingType(castEval.getValueType());
- }
-
- // registering itself and building EvalNode
- PlanProto.EvalNode.Builder builder = createEvalBuilder(context, unary);
- builder.setUnary(unaryBuilder);
- context.treeBuilder.addNodes(builder);
- return unary;
- }
-
- @Override
- public EvalNode visitBinaryEval(EvalTreeProtoBuilderContext context, Stack<EvalNode> stack, BinaryEval binary) {
- // visiting and registering childs
- super.visitBinaryEval(context, stack, binary);
- int [] childIds = registerGetChildIds(context, binary);
-
- // building itself
- PlanProto.BinaryEval.Builder binaryBuilder = PlanProto.BinaryEval.newBuilder();
- binaryBuilder.setLhsId(childIds[0]);
- binaryBuilder.setRhsId(childIds[1]);
-
- // registering itself and building EvalNode
- PlanProto.EvalNode.Builder builder = createEvalBuilder(context, binary);
- builder.setBinary(binaryBuilder);
- context.treeBuilder.addNodes(builder);
- return binary;
- }
-
- @Override
- public EvalNode visitConst(EvalTreeProtoBuilderContext context, ConstEval constant, Stack<EvalNode> stack) {
- PlanProto.EvalNode.Builder builder = createEvalBuilder(context, constant);
- builder.setConst(PlanProto.ConstEval.newBuilder().setValue(serialize(constant.getValue())));
- context.treeBuilder.addNodes(builder);
- return constant;
- }
-
- @Override
- public EvalNode visitRowConstant(EvalTreeProtoBuilderContext context, RowConstantEval rowConst,
- Stack<EvalNode> stack) {
-
- PlanProto.RowConstEval.Builder rowConstBuilder = PlanProto.RowConstEval.newBuilder();
- for (Datum d : rowConst.getValues()) {
- rowConstBuilder.addValues(serialize(d));
- }
-
- PlanProto.EvalNode.Builder builder = createEvalBuilder(context, rowConst);
- builder.setRowConst(rowConstBuilder);
- context.treeBuilder.addNodes(builder);
- return rowConst;
- }
-
- public EvalNode visitField(EvalTreeProtoBuilderContext context, Stack<EvalNode> stack, FieldEval field) {
- PlanProto.EvalNode.Builder builder = createEvalBuilder(context, field);
- builder.setField(field.getColumnRef().getProto());
- context.treeBuilder.addNodes(builder);
- return field;
- }
-
- public EvalNode visitBetween(EvalTreeProtoBuilderContext context, BetweenPredicateEval between,
- Stack<EvalNode> stack) {
- // visiting and registering childs
- super.visitBetween(context, between, stack);
- int [] childIds = registerGetChildIds(context, between);
- Preconditions.checkState(childIds.length == 3, "Between must have three childs, but there are " + childIds.length
- + " child nodes");
-
- // building itself
- PlanProto.BetweenEval.Builder betweenBuilder = PlanProto.BetweenEval.newBuilder();
- betweenBuilder.setNegative(between.isNot());
- betweenBuilder.setSymmetric(between.isSymmetric());
- betweenBuilder.setPredicand(childIds[0]);
- betweenBuilder.setBegin(childIds[1]);
- betweenBuilder.setEnd(childIds[2]);
-
- // registering itself and building EvalNode
- PlanProto.EvalNode.Builder builder = createEvalBuilder(context, between);
- builder.setBetween(betweenBuilder);
- context.treeBuilder.addNodes(builder);
- return between;
- }
-
- public EvalNode visitCaseWhen(EvalTreeProtoBuilderContext context, CaseWhenEval caseWhen, Stack<EvalNode> stack) {
- // visiting and registering childs
- super.visitCaseWhen(context, caseWhen, stack);
- int [] childIds = registerGetChildIds(context, caseWhen);
- Preconditions.checkState(childIds.length > 0, "Case When must have at least one child, but there is no child");
-
- // building itself
- PlanProto.CaseWhenEval.Builder caseWhenBuilder = PlanProto.CaseWhenEval.newBuilder();
- int ifCondsNum = childIds.length - (caseWhen.hasElse() ? 1 : 0);
- for (int i = 0; i < ifCondsNum; i++) {
- caseWhenBuilder.addIfConds(childIds[i]);
- }
- if (caseWhen.hasElse()) {
- caseWhenBuilder.setElse(childIds[childIds.length - 1]);
- }
-
- // registering itself and building EvalNode
- PlanProto.EvalNode.Builder builder = createEvalBuilder(context, caseWhen);
- builder.setCasewhen(caseWhenBuilder);
- context.treeBuilder.addNodes(builder);
-
- return caseWhen;
- }
-
- public EvalNode visitIfThen(EvalTreeProtoBuilderContext context, CaseWhenEval.IfThenEval ifCond,
- Stack<EvalNode> stack) {
- // visiting and registering childs
- super.visitIfThen(context, ifCond, stack);
- int [] childIds = registerGetChildIds(context, ifCond);
-
- // building itself
- PlanProto.IfCondEval.Builder ifCondBuilder = PlanProto.IfCondEval.newBuilder();
- ifCondBuilder.setCondition(childIds[0]);
- ifCondBuilder.setThen(childIds[1]);
-
- // registering itself and building EvalNode
- PlanProto.EvalNode.Builder builder = createEvalBuilder(context, ifCond);
- builder.setIfCond(ifCondBuilder);
- context.treeBuilder.addNodes(builder);
-
- return ifCond;
- }
-
- public EvalNode visitFuncCall(EvalTreeProtoBuilderContext context, FunctionEval function, Stack<EvalNode> stack) {
- // visiting and registering childs
- super.visitFuncCall(context, function, stack);
- int [] childIds = registerGetChildIds(context, function);
-
- // building itself
- PlanProto.FunctionEval.Builder funcBuilder = PlanProto.FunctionEval.newBuilder();
- funcBuilder.setFuncion(function.getFuncDesc().getProto());
- for (int i = 0; i < childIds.length; i++) {
- funcBuilder.addParamIds(childIds[i]);
- }
-
- // registering itself and building EvalNode
- PlanProto.EvalNode.Builder builder = createEvalBuilder(context, function);
- builder.setFunction(funcBuilder);
- context.treeBuilder.addNodes(builder);
-
- return function;
- }
-
- public static PlanProto.Datum serialize(Datum datum) {
- PlanProto.Datum.Builder builder = PlanProto.Datum.newBuilder();
-
- builder.setType(datum.type());
-
- switch (datum.type()) {
- case NULL_TYPE:
- break;
- case BOOLEAN:
- builder.setBoolean(datum.asBool());
- break;
- case INT1:
- case INT2:
- case INT4:
- case DATE:
- builder.setInt4(datum.asInt4());
- break;
- case INT8:
- case TIMESTAMP:
- case TIME:
- builder.setInt8(datum.asInt8());
- break;
- case FLOAT4:
- builder.setFloat4(datum.asFloat4());
- break;
- case FLOAT8:
- builder.setFloat8(datum.asFloat8());
- break;
- case CHAR:
- case VARCHAR:
- case TEXT:
- builder.setText(datum.asChars());
- break;
- case BINARY:
- case BLOB:
- builder.setBlob(ByteString.copyFrom(datum.asByteArray()));
- break;
- case INTERVAL:
- IntervalDatum interval = (IntervalDatum) datum;
- PlanProto.Interval.Builder intervalBuilder = PlanProto.Interval.newBuilder();
- intervalBuilder.setMonth(interval.getMonths());
- intervalBuilder.setMsec(interval.getMilliSeconds());
- builder.setInterval(intervalBuilder);
- break;
- default:
- throw new RuntimeException("Unknown data type: " + datum.type().name());
- }
-
- return builder.build();
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/b143f991/tajo-core/src/main/java/org/apache/tajo/engine/planner/AlgebraVisitor.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/AlgebraVisitor.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/AlgebraVisitor.java
deleted file mode 100644
index 8c3e606..0000000
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/AlgebraVisitor.java
+++ /dev/null
@@ -1,113 +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.planner;
-
-import org.apache.tajo.algebra.*;
-
-import java.util.Stack;
-
-public interface AlgebraVisitor<CONTEXT, RESULT> {
- // Relational Operators
- RESULT visitProjection(CONTEXT ctx, Stack<Expr> stack, Projection expr) throws PlanningException;
- RESULT visitLimit(CONTEXT ctx, Stack<Expr> stack, Limit expr) throws PlanningException;
- RESULT visitSort(CONTEXT ctx, Stack<Expr> stack, Sort expr) throws PlanningException;
- RESULT visitHaving(CONTEXT ctx, Stack<Expr> stack, Having expr) throws PlanningException;
- RESULT visitGroupBy(CONTEXT ctx, Stack<Expr> stack, Aggregation expr) throws PlanningException;
- RESULT visitJoin(CONTEXT ctx, Stack<Expr> stack, Join expr) throws PlanningException;
- RESULT visitFilter(CONTEXT ctx, Stack<Expr> stack, Selection expr) throws PlanningException;
- RESULT visitUnion(CONTEXT ctx, Stack<Expr> stack, SetOperation expr) throws PlanningException;
- RESULT visitExcept(CONTEXT ctx, Stack<Expr> stack, SetOperation expr) throws PlanningException;
- RESULT visitIntersect(CONTEXT ctx, Stack<Expr> stack, SetOperation expr) throws PlanningException;
- RESULT visitSimpleTableSubQuery(CONTEXT ctx, Stack<Expr> stack, SimpleTableSubQuery expr) throws PlanningException;
- RESULT visitTableSubQuery(CONTEXT ctx, Stack<Expr> stack, TablePrimarySubQuery expr) throws PlanningException;
- RESULT visitRelationList(CONTEXT ctx, Stack<Expr> stack, RelationList expr) throws PlanningException;
- RESULT visitRelation(CONTEXT ctx, Stack<Expr> stack, Relation expr) throws PlanningException;
- RESULT visitScalarSubQuery(CONTEXT ctx, Stack<Expr> stack, ScalarSubQuery expr) throws PlanningException;
- RESULT visitExplain(CONTEXT ctx, Stack<Expr> stack, Explain expr) throws PlanningException;
-
- // Data definition language
- RESULT visitCreateDatabase(CONTEXT ctx, Stack<Expr> stack, CreateDatabase expr) throws PlanningException;
- RESULT visitDropDatabase(CONTEXT ctx, Stack<Expr> stack, DropDatabase expr) throws PlanningException;
- RESULT visitCreateTable(CONTEXT ctx, Stack<Expr> stack, CreateTable expr) throws PlanningException;
- RESULT visitDropTable(CONTEXT ctx, Stack<Expr> stack, DropTable expr) throws PlanningException;
- RESULT visitAlterTablespace(CONTEXT ctx, Stack<Expr> stack, AlterTablespace expr) throws PlanningException;
- RESULT visitAlterTable(CONTEXT ctx, Stack<Expr> stack, AlterTable expr) throws PlanningException;
- RESULT visitTruncateTable(CONTEXT ctx, Stack<Expr> stack, TruncateTable expr) throws PlanningException;
-
- // Insert or Update
- RESULT visitInsert(CONTEXT ctx, Stack<Expr> stack, Insert expr) throws PlanningException;
-
- // Logical operators
- RESULT visitAnd(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
- RESULT visitOr(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
- RESULT visitNot(CONTEXT ctx, Stack<Expr> stack, NotExpr expr) throws PlanningException;
-
- // comparison predicates
- RESULT visitEquals(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
- RESULT visitNotEquals(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
- RESULT visitLessThan(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
- RESULT visitLessThanOrEquals(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
- RESULT visitGreaterThan(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
- RESULT visitGreaterThanOrEquals(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
-
- // Other Predicates
- RESULT visitBetween(CONTEXT ctx, Stack<Expr> stack, BetweenPredicate expr) throws PlanningException;
- RESULT visitCaseWhen(CONTEXT ctx, Stack<Expr> stack, CaseWhenPredicate expr) throws PlanningException;
- RESULT visitIsNullPredicate(CONTEXT ctx, Stack<Expr> stack, IsNullPredicate expr) throws PlanningException;
- RESULT visitInPredicate(CONTEXT ctx, Stack<Expr> stack, InPredicate expr) throws PlanningException;
- RESULT visitValueListExpr(CONTEXT ctx, Stack<Expr> stack, ValueListExpr expr) throws PlanningException;
- RESULT visitExistsPredicate(CONTEXT ctx, Stack<Expr> stack, ExistsPredicate expr) throws PlanningException;
-
- // String Operator or Pattern Matching Predicates
- RESULT visitLikePredicate(CONTEXT ctx, Stack<Expr> stack, PatternMatchPredicate expr) throws PlanningException;
- RESULT visitSimilarToPredicate(CONTEXT ctx, Stack<Expr> stack, PatternMatchPredicate expr) throws PlanningException;
- RESULT visitRegexpPredicate(CONTEXT ctx, Stack<Expr> stack, PatternMatchPredicate expr) throws PlanningException;
- RESULT visitConcatenate(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
-
- // arithmetic operators
- RESULT visitPlus(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
- RESULT visitMinus(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
- RESULT visitMultiply(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
- RESULT visitDivide(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
- RESULT visitModular(CONTEXT ctx, Stack<Expr> stack, BinaryOperator expr) throws PlanningException;
-
- // other expressions
- RESULT visitSign(CONTEXT ctx, Stack<Expr> stack, SignedExpr expr) throws PlanningException;
- RESULT visitColumnReference(CONTEXT ctx, Stack<Expr> stack, ColumnReferenceExpr expr) throws PlanningException;
- RESULT visitTargetExpr(CONTEXT ctx, Stack<Expr> stack, NamedExpr expr) throws PlanningException;
- RESULT visitQualifiedAsterisk(CONTEXT ctx, Stack<Expr> stack, QualifiedAsteriskExpr expr) throws PlanningException;
-
- // functions
- RESULT visitFunction(CONTEXT ctx, Stack<Expr> stack, FunctionExpr expr) throws PlanningException;
- RESULT visitGeneralSetFunction(CONTEXT ctx, Stack<Expr> stack, GeneralSetFunctionExpr expr)
- throws PlanningException;
- RESULT visitCountRowsFunction(CONTEXT ctx, Stack<Expr> stack, CountRowsFunctionExpr expr) throws PlanningException;
- RESULT visitWindowFunction(CONTEXT ctx, Stack<Expr> stack, WindowFunctionExpr expr) throws PlanningException;
-
- // Literal
- RESULT visitCastExpr(CONTEXT ctx, Stack<Expr> stack, CastExpr expr) throws PlanningException;
-
- RESULT visitDataType(CONTEXT ctx, Stack<Expr> stack, DataTypeExpr expr) throws PlanningException;
- RESULT visitLiteral(CONTEXT ctx, Stack<Expr> stack, LiteralValue expr) throws PlanningException;
- RESULT visitNullLiteral(CONTEXT ctx, Stack<Expr> stack, NullLiteral expr) throws PlanningException;
- RESULT visitTimestampLiteral(CONTEXT ctx, Stack<Expr> stack, TimestampLiteral expr) throws PlanningException;
- RESULT visitIntervalLiteral(CONTEXT ctx, Stack<Expr> stack, IntervalLiteral expr) throws PlanningException;
- RESULT visitTimeLiteral(CONTEXT ctx, Stack<Expr> stack, TimeLiteral expr) throws PlanningException;
- RESULT visitDateLiteral(CONTEXT ctx, Stack<Expr> stack, DateLiteral expr) throws PlanningException;
-}