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 2014/01/20 05:30:20 UTC

[2/3] TAJO-409: Add explored and explained annotations to Tajo function system. (SeongHwa Ahn via hyunsik)

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Cbrt.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Cbrt.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Cbrt.java
index a805351..b85fe58 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Cbrt.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Cbrt.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * FLOAT8 cbrt(value FLOAT8)
  */
+@Description(
+  functionName = "cbrt",
+  description = "Cube root",
+  example = "> SELECT cbrt(27.0);\n"
+      + "3",
+  returnType = TajoDataTypes.Type.FLOAT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8})}
+)
 public class Cbrt extends GeneralFunction {
   public Cbrt() {
     super(new Column[] {
-      new Column("value", TajoDataTypes.Type.FLOAT8)
+      new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Ceil.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Ceil.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Ceil.java
index 5a593bc..cca7f60 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Ceil.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Ceil.java
@@ -24,17 +24,29 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
  * Function definition
  *
- * INT8 ceil(value FLOAT8)
+ * INT8 ceil(value FLOAT4/FLOAT8)
  */
+@Description(
+  functionName = "ceil",
+  synonyms = {"ceiling"},
+  description = "Smallest integer not less than argument.",
+  example = "> SELECT ceil(-42.8);\n"
+          + "-42",
+  returnType = TajoDataTypes.Type.INT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4}),
+          @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8})}
+)
 public class Ceil extends GeneralFunction {
   public Ceil() {
     super(new Column[] {
-      new Column("value", TajoDataTypes.Type.FLOAT8)
+      new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 
@@ -47,4 +59,5 @@ public class Ceil extends GeneralFunction {
 
     return DatumFactory.createInt8((long)Math.ceil(valueDatum.asFloat8()));
   }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Cos.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Cos.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Cos.java
index 44194b2..997784a 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Cos.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Cos.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,18 @@ import org.apache.tajo.storage.Tuple;
  *
  * Float8 cos(value FLOAT8)
  */
+@Description(
+  functionName = "cos",
+  description = "Cosine.",
+  example = "> SELECT cos(x);",
+  returnType = TajoDataTypes.Type.FLOAT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4}),
+          @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8})}
+)
 public class Cos extends GeneralFunction {
   public Cos() {
     super(new Column[] {
-        new Column("value", TajoDataTypes.Type.FLOAT8)
+        new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Degrees.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Degrees.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Degrees.java
index e9e4932..cd5fd2f 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Degrees.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Degrees.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * FLOAT8 degrees(value FLOAT8)
  */
+@Description(
+  functionName = "degrees",
+  description = "Radians to degrees",
+  example = "> SELECT degrees(0.5);\n"
+      + "28.6478897565412",
+  returnType = TajoDataTypes.Type.FLOAT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8})}
+)
 public class Degrees extends GeneralFunction {
   public Degrees() {
     super(new Column[] {
-      new Column("value", TajoDataTypes.Type.FLOAT8)
+      new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Div.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Div.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Div.java
index 7bf2d20..d904a2c 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Div.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Div.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,11 +33,23 @@ import org.apache.tajo.storage.Tuple;
  *
  * INT8 div(value INT8, value INT8)
  */
+@Description(
+  functionName = "div",
+  description = "Division(integer division truncates results)",
+  example = "> SELECT div(4, 2);\n"
+    + "2",
+  returnType = TajoDataTypes.Type.INT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.INT8, TajoDataTypes.Type.INT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT8, TajoDataTypes.Type.INT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT4, TajoDataTypes.Type.INT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT4, TajoDataTypes.Type.INT4})
+  }
+)
 public class Div extends GeneralFunction {
   public Div() {
     super(new Column[] {
-      new Column("value1", TajoDataTypes.Type.INT8),
-      new Column("value2", TajoDataTypes.Type.INT8)
+      new Column("x", TajoDataTypes.Type.INT8),
+      new Column("y", TajoDataTypes.Type.INT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Exp.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Exp.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Exp.java
index 5614809..3c3b07c 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Exp.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Exp.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * FLOAT8 exp(value FLOAT8)
  */
+@Description(
+  functionName = "exp",
+  description = "Exponential",
+  example = "> SELECT exp(1.0);\n"
+      + "2.71828182845905",
+  returnType = TajoDataTypes.Type.FLOAT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8})}
+)
 public class Exp extends GeneralFunction {
   public Exp() {
     super(new Column[] {
-      new Column("value", TajoDataTypes.Type.FLOAT8)
+      new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Floor.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Floor.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Floor.java
index e48a733..7e4cee0 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Floor.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Floor.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * INT8 floor(value FLOAT8)
  */
+@Description(
+  functionName = "floor",
+  description = " Largest integer not greater than argument.",
+  example = "> SELECT floor(-42.8);\n" +
+      "-43",
+  returnType = TajoDataTypes.Type.INT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4}),
+          @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8})}
+)
 public class Floor extends GeneralFunction {
   public Floor() {
     super(new Column[] {
-      new Column("value", TajoDataTypes.Type.FLOAT8)
+      new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Mod.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Mod.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Mod.java
index 0878464..c748a2d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Mod.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Mod.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,11 +33,23 @@ import org.apache.tajo.storage.Tuple;
  *
  * INT8 mod(value INT8, value INT8)
  */
+@Description(
+  functionName = "mod",
+  description = "Remainder of y/x",
+  example = "> SELECT mod(9, 4);\n" +
+            "1",
+  returnType = TajoDataTypes.Type.INT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.INT8, TajoDataTypes.Type.INT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT8, TajoDataTypes.Type.INT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT4, TajoDataTypes.Type.INT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT4, TajoDataTypes.Type.INT4})
+  }
+)
 public class Mod extends GeneralFunction {
   public Mod() {
     super(new Column[] {
-      new Column("value1", TajoDataTypes.Type.INT8),
-      new Column("value2", TajoDataTypes.Type.INT8)
+      new Column("y", TajoDataTypes.Type.INT8),
+      new Column("x", TajoDataTypes.Type.INT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Pi.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Pi.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Pi.java
index 5074439..abc06b5 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Pi.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Pi.java
@@ -18,12 +18,12 @@
 
 package org.apache.tajo.engine.function.math;
 
-import org.apache.tajo.catalog.Column;
 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,11 +31,17 @@ import org.apache.tajo.storage.Tuple;
  *
  * INT8 ceil(value FLOAT8)
  */
+@Description(
+  functionName = "pi",
+  description = "\"π\" constant",
+  example = "> SELECT pi();\n"
+          + "3.14159265358979",
+  returnType = TajoDataTypes.Type.FLOAT8,
+  paramTypes = {@ParamTypes(paramTypes = {})}
+)
 public class Pi extends GeneralFunction {
   public Pi() {
-    super(new Column[] {
-      new Column("value", TajoDataTypes.Type.NULL_TYPE)
-    });
+    super(NoArgs);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Pow.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Pow.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Pow.java
index a999ab2..101e508 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Pow.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Pow.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,11 +33,35 @@ import org.apache.tajo.storage.Tuple;
  *
  * Float8 pow(value FLOAT8, value FLOAT8)
  */
+@Description(
+  functionName = "pow",
+  description = "x raised to the power of y",
+  example = "> SELECT pow(9.0, 3.0)\n"
+           + "729",
+  returnType = TajoDataTypes.Type.FLOAT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4, TajoDataTypes.Type.FLOAT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4, TajoDataTypes.Type.FLOAT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8, TajoDataTypes.Type.FLOAT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8, TajoDataTypes.Type.FLOAT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT4, TajoDataTypes.Type.INT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT4, TajoDataTypes.Type.INT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT8, TajoDataTypes.Type.INT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT8, TajoDataTypes.Type.INT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT4, TajoDataTypes.Type.FLOAT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT4, TajoDataTypes.Type.FLOAT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT8, TajoDataTypes.Type.FLOAT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT8, TajoDataTypes.Type.FLOAT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4, TajoDataTypes.Type.INT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4, TajoDataTypes.Type.INT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8, TajoDataTypes.Type.INT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8, TajoDataTypes.Type.INT8})
+  }
+)
 public class Pow extends GeneralFunction {
   public Pow() {
     super(new Column[] {
-        new Column("value", TajoDataTypes.Type.FLOAT8),
-        new Column("value", TajoDataTypes.Type.FLOAT8)
+        new Column("x", TajoDataTypes.Type.FLOAT8),
+        new Column("y", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Radians.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Radians.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Radians.java
index 97ac9c4..a8bf363 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Radians.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Radians.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,20 @@ import org.apache.tajo.storage.Tuple;
  *
  * FLOAT8 radians(value FLOAT8)
  */
+@Description(
+  functionName = "radians",
+  description = "Degrees to radians",
+  example = "> SELECT radians(45.0)\n"
+      + "0.785398163397448",
+  returnType = TajoDataTypes.Type.FLOAT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4})
+  }
+)
 public class Radians extends GeneralFunction {
   public Radians() {
     super(new Column[] {
-      new Column("value", TajoDataTypes.Type.FLOAT8)
+      new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Round.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Round.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Round.java
index e033df0..9740888 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Round.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Round.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * INT8 round(value FLOAT8)
  */
+@Description(
+  functionName = "round",
+  description = "Round to nearest integer.",
+  example = "> SELECT round(42.4)\n"
+          + "42",
+  returnType = TajoDataTypes.Type.INT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4}),
+          @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8})}
+)
 public class Round extends GeneralFunction {
   public Round() {
     super(new Column[] {
-      new Column("value", TajoDataTypes.Type.FLOAT8)
+      new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sign.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sign.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sign.java
index 0f9d466..f9c49bf 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sign.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sign.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,22 @@ import org.apache.tajo.storage.Tuple;
  *
  * FLOAT8 sign(value FLOAT8)
  */
+@Description(
+  functionName = "sign",
+  description = "sign of the argument (-1, 0, +1)",
+  example = "> SELECT sign(-8.4);\n"
+          + "-1",
+  returnType = TajoDataTypes.Type.FLOAT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT4})
+  }
+)
 public class Sign extends GeneralFunction {
   public Sign() {
     super(new Column[] {
-      new Column("value", TajoDataTypes.Type.FLOAT8)
+      new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sin.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sin.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sin.java
index 928625c..31d56b4 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sin.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sin.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,18 @@ import org.apache.tajo.storage.Tuple;
  *
  * Float8 sin(value FLOAT8)
  */
+@Description(
+  functionName = "sin",
+  description = "Sine.",
+  example = "> SELECT sin(x);",
+  returnType = TajoDataTypes.Type.FLOAT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4}),
+          @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8})}
+)
 public class Sin extends GeneralFunction {
   public Sin() {
     super(new Column[] {
-        new Column("value", TajoDataTypes.Type.FLOAT8)
+        new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sqrt.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sqrt.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sqrt.java
index 35fa04c..aba33f4 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sqrt.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Sqrt.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,20 @@ import org.apache.tajo.storage.Tuple;
  *
  * FLOAT8 sqrt(value FLOAT8)
  */
+@Description(
+  functionName = "sqrt",
+  description = "Square root",
+  example = "> SELECT sqrt(2.0);\n"
+          + "1.4142135623731",
+  returnType = TajoDataTypes.Type.FLOAT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4})
+  }
+)
 public class Sqrt extends GeneralFunction {
   public Sqrt() {
     super(new Column[] {
-      new Column("value", TajoDataTypes.Type.FLOAT8)
+      new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Tan.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Tan.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Tan.java
index d06461b..d551d8b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Tan.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/math/Tan.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,11 +33,18 @@ import org.apache.tajo.storage.Tuple;
  *
  * Float8 tan(value FLOAT8)
  */
-
+@Description(
+  functionName = "tan",
+  description = "Tangent.",
+  example = "> SELECT tan(x);",
+  returnType = TajoDataTypes.Type.FLOAT8,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT4}),
+          @ParamTypes(paramTypes = {TajoDataTypes.Type.FLOAT8})}
+)
 public class Tan extends GeneralFunction {
   public Tan() {
     super(new Column[] {
-        new Column("value", TajoDataTypes.Type.FLOAT8)
+        new Column("x", TajoDataTypes.Type.FLOAT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Ascii.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Ascii.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Ascii.java
index 12070f9..ecb32a4 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Ascii.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Ascii.java
@@ -18,13 +18,14 @@
 
 package org.apache.tajo.engine.function.string;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.tajo.catalog.Column;
 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -32,13 +33,22 @@ import org.apache.tajo.storage.Tuple;
  *
  * int4 ascii(string text)
  */
-
+@Description(
+  functionName = "ascii",
+  description = "ASCII code of the first character of the argument.",
+  detail = "For UTF8 returns the Unicode code point of the character.\n"
+        + "For other multibyte encodings, the argument must be an ASCII character.",
+  example = "> SELECT ascii('x');\n"
+          + "120",
+  returnType = TajoDataTypes.Type.INT4,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT})}
+)
 public class Ascii extends GeneralFunction {
 
 
   public Ascii() {
     super(new Column[]{
-            new Column("text", TajoDataTypes.Type.TEXT)
+            new Column("char", TajoDataTypes.Type.TEXT)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BTrim.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BTrim.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BTrim.java
index 7206a81..b7c5611 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BTrim.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BTrim.java
@@ -27,6 +27,8 @@ 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.storage.Tuple;
 
 /**
@@ -34,12 +36,24 @@ import org.apache.tajo.storage.Tuple;
  *
  * text btrim(string text [, characters text])
  */
+@Description(
+  functionName = "trim",
+  synonyms = {"btrim"},
+  description = " Remove the longest string consisting only of "
+          + " characters in characters (a space by default) "
+          + "from the start and end of string.",
+  example = "> SELECT trim('xyxtrimyyx', 'xy');\n"
+          + "trim",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT}),
+          @ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,TajoDataTypes.Type.TEXT})}
+)
 public class BTrim extends GeneralFunction {
   @Expose private boolean hasTrimCharacters;
 
   public BTrim() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT),
+        new Column("string", TajoDataTypes.Type.TEXT),
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BitLength.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BitLength.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BitLength.java
index 3a84f5b..3a5c216 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BitLength.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/BitLength.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,18 @@ import org.apache.tajo.storage.Tuple;
  *
  * INT4 bit_length(string text)
  */
+@Description(
+  functionName = "bit_length",
+  description = "Number of bits in string",
+  example = "> SELECT bit_length('jose');\n"
+          + "32",
+  returnType = TajoDataTypes.Type.INT4,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT})}
+)
 public class BitLength extends GeneralFunction {
   public BitLength() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT)
+        new Column("string", TajoDataTypes.Type.TEXT)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/CharLength.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/CharLength.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/CharLength.java
index ffe461a..76d3b55 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/CharLength.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/CharLength.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * INT4 char_length(string text) or INT4 character_length(string text)
  */
+@Description(
+  functionName = "char_length",
+  synonyms = {"character_length"},
+  description = "Number of characters in string",
+  example = "> SELECT char_length('jose');\n"
+          + "4",
+  returnType = TajoDataTypes.Type.INT4,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT})}
+)
 public class CharLength extends GeneralFunction {
   public CharLength() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT)
+        new Column("string", TajoDataTypes.Type.TEXT)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Chr.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Chr.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Chr.java
index 05a7a86..fac4b27 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Chr.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Chr.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,11 +33,20 @@ import org.apache.tajo.storage.Tuple;
  *
  * char chr(value int4)
  */
-
+@Description(
+  functionName = "chr",
+  description = "Character with the given code.",
+  detail = "For UTF8 the argument is treated as a Unicode code point. "
+    + "For other multibyte encodings the argument must designate an ASCII character.",
+  example = "> SELECT chr(65);\n"
+          + "A",
+  returnType = TajoDataTypes.Type.CHAR,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.INT4})}
+)
 public class Chr extends GeneralFunction {
   public Chr() {
     super(new Column[]{
-            new Column("text", TajoDataTypes.Type.INT4)
+            new Column("n", TajoDataTypes.Type.INT4)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Decode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Decode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Decode.java
index 33e8030..13f0749 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Decode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Decode.java
@@ -26,6 +26,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 
@@ -34,10 +36,20 @@ import org.apache.tajo.storage.Tuple;
  *
  * bytearray decode(string text, format text)
  */
+@Description(
+  functionName = "decode",
+  description = "Decode binary data from textual representation in string. "
+          + "Options for format are same as in encode.",
+  detail = "format is one of 'base64', 'hex'",
+  example = "> SELECT decode('MTIzAAE=', 'base64');\n"
+          + "\\x3132330001",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.TEXT})}
+)
 public class Decode extends GeneralFunction {
   public Decode() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT),
+        new Column("string", TajoDataTypes.Type.TEXT),
         new Column("format", TajoDataTypes.Type.TEXT)
     });
   }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Encode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Encode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Encode.java
index 938d6c0..0023ae6 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Encode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Encode.java
@@ -26,6 +26,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 
@@ -34,10 +36,20 @@ import org.apache.tajo.storage.Tuple;
  *
  * bytearray encode(data bytea, format text)
  */
+@Description(
+  functionName = "encode",
+  description = "Encode binary data into a textual representation.",
+  detail = "Supported formats are: base64, hex, escape. escape converts zero bytes and "
+        + "high-bit-set bytes to octal sequences (\\nnn) and doubles backslashes.",
+  example = "> SELECT encode(E'123\\\\000\\\\001', 'base64');\n"
+          + "MTIzAAE=",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.TEXT})}
+)
 public class Encode extends GeneralFunction {
   public Encode() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT),
+        new Column("string", TajoDataTypes.Type.TEXT),
         new Column("format", TajoDataTypes.Type.TEXT)
     });
   }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/FindInSet.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/FindInSet.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/FindInSet.java
index 17df825..0c3e221 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/FindInSet.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/FindInSet.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -37,10 +39,20 @@ import org.apache.tajo.storage.Tuple;
  * SELECT find_in_set('cr','crt,c,cr,c,def') FROM src LIMIT 1;\n"
  * -> result: 3
  */
+@Description(
+  functionName = "find_in_set",
+  description = "Returns the first occurrence of str in str_array where str_array is a comma-delimited string",
+  detail = "Returns null if either argument is null.\n"
+      + "Returns 0 if the first argument has any commas.",
+  example = "> SELECT find_in_set('cr','crt,c,cr,c,def');\n"
+          + "3",
+  returnType = TajoDataTypes.Type.INT4,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.TEXT})}
+)
 public class FindInSet extends GeneralFunction {
   public FindInSet() {
     super(new Column[]{
-        new Column("text", TajoDataTypes.Type.TEXT),
+        new Column("string", TajoDataTypes.Type.TEXT),
         new Column("str_array", TajoDataTypes.Type.TEXT)
     });
   }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/InitCap.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/InitCap.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/InitCap.java
index e2158fb..4347dbb 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/InitCap.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/InitCap.java
@@ -25,6 +25,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -32,10 +34,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * text initcap(string text)
  */
+@Description(
+  functionName = "initcap",
+  description = "Convert the first letter of each word to upper case "
+          + " and the rest to lower case..",
+  example = "> SELECT initcap('hi THOMAS');\n"
+          + "Hi Thomas",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT})}
+)
 public class InitCap extends GeneralFunction {
   public InitCap() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT)
+        new Column("string", TajoDataTypes.Type.TEXT)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/LTrim.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/LTrim.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/LTrim.java
index ece01f3..db6b714 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/LTrim.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/LTrim.java
@@ -27,6 +27,8 @@ 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.storage.Tuple;
 
 /**
@@ -34,6 +36,17 @@ import org.apache.tajo.storage.Tuple;
  *
  * text ltrim(string text [, characters text])
  */
+@Description(
+  functionName = "ltrim",
+  description = "Remove the longest string containing only "
+          + "characters from characters (a space by default) "
+          + "from the start of string.",
+  example = "> SELECT ltrim('zzzytrim', 'xyz');\n"
+          + "trim",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT}),
+          @ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,TajoDataTypes.Type.TEXT})}
+)
 public class LTrim extends GeneralFunction {
   @Expose private boolean hasTrimCharacters;
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Left.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Left.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Left.java
index 3d25cd8..31469f5 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Left.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Left.java
@@ -25,6 +25,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -32,10 +34,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * text left(string text, int size)
  */
+@Description(
+  functionName = "left",
+  description = "First n characters in the string.",
+  example = "> SELECT left('ABC', 2);\n"
+          + "AB",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,
+          TajoDataTypes.Type.INT4})}
+)
 public class Left extends GeneralFunction {
   public Left() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT),
+        new Column("string", TajoDataTypes.Type.TEXT),
         new Column("size", TajoDataTypes.Type.INT4)
     });
   }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Length.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Length.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Length.java
index 5c8b689..389f358 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Length.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Length.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,11 +33,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * INT4 length(string text)
  */
+@Description(
+  functionName = "length",
+  description = "Number of characters in string.",
+  example = "> SELECT length('Tajo');\n"
+          + "4",
+  returnType = TajoDataTypes.Type.INT4,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT})}
+)
 public class Length  extends GeneralFunction {
 
   public Length() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT)
+        new Column("string", TajoDataTypes.Type.TEXT)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Locate.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Locate.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Locate.java
index 704d944..67ee389 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Locate.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Locate.java
@@ -25,6 +25,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -32,6 +34,16 @@ import org.apache.tajo.storage.Tuple;
  * 
  * INT4 locate(string TEXT, substr TEXT, [, pos INT4])
  */
+@Description(
+  functionName = "locate",
+  description = "Location of specified substring",
+  example = "> SELECT locate('high', 'ig')\n"
+          + "2",
+  returnType = TajoDataTypes.Type.INT4,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.TEXT}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.TEXT, TajoDataTypes.Type.INT4})
+  }
+)
 public class Locate extends GeneralFunction {
   public Locate() {
     super(new Column[] {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lower.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lower.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lower.java
index 551afcd..80c8192 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lower.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lower.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,6 +33,14 @@ import org.apache.tajo.storage.Tuple;
  *
  * text lower(string text)
  */
+@Description(
+  functionName = "lower",
+  description = "Convert string to lower case",
+  example = "> SELECT lower('ToM');\n"
+          + "tom",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT})}
+)
 public class Lower extends GeneralFunction {
   public Lower() {
     super(new Column[] {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lpad.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
index 4d5a8f8..8b5b96b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
@@ -27,21 +27,32 @@ 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.storage.Tuple;
 
-
 /**
  * Function definition
  *
  * text lpad(string text, length int [, fill text])
  */
+@Description(
+  functionName = "lpad",
+  description = "Fill up the string to length length by prepending the characters fill (a space by default)",
+  detail = "If the string is already longer than length then it is truncated (on the right)",
+  example = "> SELECT lpad('hi', 5, 'xy');\n"
+      + "xyxhi",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.INT4, TajoDataTypes.Type.TEXT})}
+)
 public class Lpad extends GeneralFunction {
   @Expose private boolean hasFillCharacters;
 
   public Lpad() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT),
-        new Column("length", TajoDataTypes.Type.INT4)
+        new Column("string", TajoDataTypes.Type.TEXT),
+        new Column("length", TajoDataTypes.Type.INT4),
+        new Column("fill_text", TajoDataTypes.Type.TEXT)
     });
   }
 
@@ -56,23 +67,23 @@ public class Lpad extends GeneralFunction {
     Datum datum = params.get(0);
     Datum lengthDatum = params.get(1);
 
-    if(datum instanceof NullDatum) return NullDatum.get();
-    if(lengthDatum instanceof NullDatum) return NullDatum.get();
+    if (datum instanceof NullDatum) return NullDatum.get();
+    if (lengthDatum instanceof NullDatum) return NullDatum.get();
 
-    Datum fillText=NullDatum.get();
+    Datum fillText = NullDatum.get();
 
-    if(hasFillCharacters) {
-      fillText=params.get(2);
-    }
-    else {
-      fillText=DatumFactory.createText(" ");
+    if (hasFillCharacters) {
+      fillText = params.get(2);
+    } else {
+      fillText = DatumFactory.createText(" ");
     }
 
     int templen = lengthDatum.asInt4() - datum.asChars().length();
 
-    if(templen<=0)
+    if (templen <= 0) {
       return DatumFactory.createText(datum.asChars().substring(0,lengthDatum.asInt4()));
-
-    return DatumFactory.createText(StringUtils.leftPad(datum.asChars(), lengthDatum.asInt4(), fillText.asChars()));
+    } else {
+      return DatumFactory.createText(StringUtils.leftPad(datum.asChars(), lengthDatum.asInt4(), fillText.asChars()));
+    }
   }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Md5.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Md5.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Md5.java
index fc1db8d..fb5f73c 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Md5.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Md5.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 import java.security.*;
 import org.apache.commons.codec.binary.Hex;
@@ -33,10 +35,18 @@ import org.apache.commons.codec.binary.Hex;
  *
  * text md5(string text)
  */
+@Description(
+  functionName = "md5",
+  description = "Calculates the MD5 hash of string",
+  example = "> SELECT md5('abc');\n"
+          + "900150983cd24fb0 d6963f7d28e17f72",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT})}
+)
 public class Md5 extends GeneralFunction {
   public Md5() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT)
+        new Column("string", TajoDataTypes.Type.TEXT)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/OctetLength.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/OctetLength.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/OctetLength.java
index 345244d..dc71907 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/OctetLength.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/OctetLength.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,11 +33,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * INT4 octet_length(string text)
  */
+@Description(
+  functionName = "octet_length",
+  description = "Number of bytes in string. ",
+  example = "> SELECT octet_length('jose');\n"
+        + "4",
+  returnType = TajoDataTypes.Type.INT4,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT})}
+)
 public class OctetLength  extends GeneralFunction {
 
   public OctetLength() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT)
+        new Column("string", TajoDataTypes.Type.TEXT)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/QuoteIdent.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/QuoteIdent.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/QuoteIdent.java
index 91d3259..d5237d7 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/QuoteIdent.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/QuoteIdent.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -34,10 +36,21 @@ import org.apache.tajo.storage.Tuple;
  * Description:
  * Return a quoted string.
  */
+@Description(
+  functionName = "quote_ident",
+  description = "Return the given string suitably quoted to be used as an identifier in an SQL statement string",
+  detail = "Quotes are added only if necessary "
+        + "(i.e., if the string contains non-identifier characters or would be case-folded).\n"
+        + "Embedded quotes are properly doubled.",
+  example = "> SELECT quote_ident('Foo bar');\n"
+      + "\"Foo bar\"",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT})}
+)
 public class QuoteIdent extends GeneralFunction {
   public QuoteIdent() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT)
+        new Column("string", TajoDataTypes.Type.TEXT)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/RTrim.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/RTrim.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/RTrim.java
index b8bdd4e..9e3ff8d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/RTrim.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/RTrim.java
@@ -27,6 +27,8 @@ 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.storage.Tuple;
 
 /**
@@ -34,6 +36,17 @@ import org.apache.tajo.storage.Tuple;
  *
  * text rtrim(string text [, characters text])
  */
+@Description(
+  functionName = "rtrim",
+  description = "Remove the longest string containing only "
+          + " characters from characters (a space by default) "
+          + " from the end of string.",
+  example = "> SELECT rtrim('trimxxxx', 'x');\n"
+          + "trim",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT}),
+          @ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,TajoDataTypes.Type.TEXT})}
+)
 public class RTrim extends GeneralFunction {
   @Expose private boolean hasTrimCharacters;
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/RegexpReplace.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/RegexpReplace.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/RegexpReplace.java
index 1877ba4..2b59d34 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/RegexpReplace.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/RegexpReplace.java
@@ -23,6 +23,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 import java.util.regex.Matcher;
@@ -38,6 +40,15 @@ import static org.apache.tajo.engine.eval.FunctionEval.ParamType;
  *
  * flags is not supported yet.
  */
+@Description(
+  functionName = "regexp_replace",
+  description = " Replace substring(s) matching a POSIX regular expression.",
+  example = "> SELECT regexp_replace('Thomas', '.[mN]a.', 'M');\n"
+          + "ThM",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,
+          TajoDataTypes.Type.TEXT,TajoDataTypes.Type.TEXT})}
+)
 public class RegexpReplace extends GeneralFunction {
   @Expose protected boolean isPatternConstant;
 
@@ -49,7 +60,7 @@ public class RegexpReplace extends GeneralFunction {
 
   public RegexpReplace() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT),
+        new Column("string", TajoDataTypes.Type.TEXT),
         new Column("pattern", TajoDataTypes.Type.TEXT),
         new Column("replacement", TajoDataTypes.Type.INT4),
         new Column("flags", TajoDataTypes.Type.INT4), // it is not supported yet.

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Repeat.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Repeat.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Repeat.java
index c170e5d..4c52a6e 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Repeat.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Repeat.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * text reverse(string text)
  */
+@Description(
+  functionName = "repeat",
+  description = "Repeat string the specified number of times.",
+  example = "> SELECT repeat('Pg', 4);\n"
+          + "PgPgPgPg",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,
+          TajoDataTypes.Type.INT4})}
+)
 public class Repeat extends GeneralFunction {
   public Repeat() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT),
+        new Column("string", TajoDataTypes.Type.TEXT),
         new Column("count", TajoDataTypes.Type.INT4)
     });
   }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Reverse.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Reverse.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Reverse.java
index a08c2d3..a77ba69 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Reverse.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Reverse.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,18 @@ import org.apache.tajo.storage.Tuple;
  *
  * text reverse(string text)
  */
+@Description(
+  functionName = "reverse",
+  description = "Reverse str",
+  example = "> SELECT reverse('TAJO');\n"
+          + "OJAT",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT})}
+)
 public class Reverse extends GeneralFunction {
   public Reverse() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT)
+        new Column("string", TajoDataTypes.Type.TEXT)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Right.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Right.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Right.java
index 43421fd..aa0dad0 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Right.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Right.java
@@ -25,6 +25,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -32,10 +34,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * text right(string text, int size)
  */
+@Description(
+  functionName = "right",
+  description = "Last n characters in the string",
+  example = "> SELECT right('ABC', 2);\n"
+          + "BC",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,
+          TajoDataTypes.Type.INT4})}
+)
 public class Right extends GeneralFunction {
   public Right() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT),
+        new Column("string", TajoDataTypes.Type.TEXT),
         new Column("size", TajoDataTypes.Type.INT4)
     });
   }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Rpad.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
index fb17562..35c1afa 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
@@ -27,6 +27,8 @@ 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.storage.Tuple;
 
 
@@ -35,13 +37,23 @@ import org.apache.tajo.storage.Tuple;
  *
  * text rpad(string text, length int [, fill text])
  */
+@Description(
+  functionName = "rpad",
+  description = "Fill up the string to length length by appending the characters fill (a space by default)",
+  detail = "If the string is already longer than length then it is truncated.",
+  example = "> SELECT rpad('hi', 5, 'xy');\n"
+      + "hixyx",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.INT4, TajoDataTypes.Type.TEXT})}
+)
 public class Rpad extends GeneralFunction {
   @Expose private boolean hasFillCharacters;
 
   public Rpad() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT),
-        new Column("length", TajoDataTypes.Type.INT4)
+        new Column("string", TajoDataTypes.Type.TEXT),
+        new Column("length", TajoDataTypes.Type.INT4),
+        new Column("fill_text", TajoDataTypes.Type.TEXT)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/SplitPart.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/SplitPart.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/SplitPart.java
index 6de485f..fd1de55 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/SplitPart.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/SplitPart.java
@@ -25,19 +25,30 @@ 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.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
  * Function definition
  *
- * text split_part(string text, delimiter text, part int)
+ * text split_part(string text, delimiter text, field int)
  */
+@Description(
+  functionName = "split_part",
+  description = "Split string on delimiter and return the given field",
+  example = "> SELECT split_part('abc~@~def~@~ghi', '~@~', 2);\n"
+          + "def",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,
+          TajoDataTypes.Type.TEXT,TajoDataTypes.Type.INT4})}
+)
 public class SplitPart extends GeneralFunction {
   public SplitPart() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT),
+        new Column("string", TajoDataTypes.Type.TEXT),
         new Column("delimiter", TajoDataTypes.Type.TEXT),
-        new Column("part", TajoDataTypes.Type.INT4),
+        new Column("field", TajoDataTypes.Type.INT4),
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/StrPos.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/StrPos.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/StrPos.java
index 46fdded..d6f88de 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/StrPos.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/StrPos.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,19 @@ import org.apache.tajo.storage.Tuple;
  *
  * int strpos(string text, substring text))
  */
+@Description(
+  functionName = "strpos",
+  description = "Location of specified substring.",
+  example = "> SELECT strpos('tajo', 'aj');\n"
+          + "2",
+  returnType = TajoDataTypes.Type.INT4,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,
+          TajoDataTypes.Type.TEXT})}
+)
 public class StrPos extends GeneralFunction {
   public StrPos() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT),
+        new Column("string", TajoDataTypes.Type.TEXT),
         new Column("substring", TajoDataTypes.Type.TEXT)
     });
   }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/StrPosb.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/StrPosb.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/StrPosb.java
index 511d092..56fb3a1 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/StrPosb.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/StrPosb.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 import java.nio.ByteBuffer;
@@ -33,6 +35,15 @@ import java.nio.ByteBuffer;
  *
  * int strposb(string text, substring text))
  */
+@Description(
+  functionName = "strposb",
+  description = "Binary location of specified substring.",
+  example = "> SELECT strpos('tajo', 'aj');\n"
+      + "2",
+  returnType = TajoDataTypes.Type.INT4,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,
+          TajoDataTypes.Type.TEXT})}
+)
 public class StrPosb extends GeneralFunction {
   public StrPosb() {
     super(new Column[] {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java
index 9652cdc..8f6cf21 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,12 +33,21 @@ import org.apache.tajo.storage.Tuple;
  *
  * text substr(string text, from int4 [, length int4])
  */
+@Description(
+  functionName = "substr",
+  description = "Extract substring.",
+  example = "> SELECT substr('alphabet', 3, 2);\n"
+          + "ph",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,
+          TajoDataTypes.Type.INT4,TajoDataTypes.Type.INT4})}
+)
 public class Substr extends GeneralFunction {
   public Substr() {
     super(new Column[] {
         new Column("text", TajoDataTypes.Type.TEXT),
         new Column("from", TajoDataTypes.Type.INT4),
-        new Column("count", TajoDataTypes.Type.INT4)    //optional
+        new Column("length", TajoDataTypes.Type.INT4)    //optional
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/ToBin.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/ToBin.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/ToBin.java
index eab1529..3048aa8 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/ToBin.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/ToBin.java
@@ -23,6 +23,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 
@@ -33,11 +35,20 @@ import org.apache.tajo.storage.Tuple;
  *   SELECT Tobin(22) FROM src LIMIT 1;
  *   -> result: '10110'
  */
+@Description(
+  functionName = "to_bin",
+  description = "Returns n in binary.",
+  example = "> SELECT to_bin(22);\n"
+      + "10110",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.INT8}),
+      @ParamTypes(paramTypes = {TajoDataTypes.Type.INT4})}
+)
 public class ToBin extends GeneralFunction {
 
   public ToBin() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT)
+        new Column("n", TajoDataTypes.Type.INT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/ToHex.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/ToHex.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/ToHex.java
index c5bebda..a8624ab 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/ToHex.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/ToHex.java
@@ -18,17 +18,16 @@
 
 package org.apache.tajo.engine.function.string;
 
+import org.apache.commons.codec.binary.Hex;
 import org.apache.tajo.catalog.Column;
 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.datum.Float4Datum;
-import org.apache.tajo.datum.Float8Datum;
 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.storage.Tuple;
-import org.apache.commons.codec.binary.Hex;
-import java.nio.ByteBuffer;
 
 /**
  * Function definition
@@ -36,11 +35,20 @@ import java.nio.ByteBuffer;
  * text to_hex(text)
  * text to_hex(int)
  */
+@Description(
+  functionName = "to_hex",
+  description = "Convert the argument to hexadecimal",
+  example = "SELECT to_hex(15);\n"
+          + "F",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.INT4}),
+          @ParamTypes(paramTypes = {TajoDataTypes.Type.INT8})}
+)
 public class ToHex extends GeneralFunction {
 
   public ToHex() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT)
+        new Column("n", TajoDataTypes.Type.INT8)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Upper.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Upper.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Upper.java
index eb3e19a..47d38ba 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Upper.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Upper.java
@@ -24,6 +24,8 @@ 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.engine.function.annotation.Description;
+import org.apache.tajo.engine.function.annotation.ParamTypes;
 import org.apache.tajo.storage.Tuple;
 
 /**
@@ -31,10 +33,18 @@ import org.apache.tajo.storage.Tuple;
  *
  * text upper(string text)
  */
+@Description(
+  functionName = "upper",
+  description = "Convert string to upper case.",
+  example = "> SELECT upper('tajo');\n"
+          + "TAJO",
+  returnType = TajoDataTypes.Type.TEXT,
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT})}
+)
 public class Upper extends GeneralFunction {
   public Upper() {
     super(new Column[] {
-        new Column("text", TajoDataTypes.Type.TEXT)
+        new Column("string", TajoDataTypes.Type.TEXT)
     });
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d04f9a56/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/ExprAnnotator.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/ExprAnnotator.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/ExprAnnotator.java
index cd49c73..545caa2 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/ExprAnnotator.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/ExprAnnotator.java
@@ -376,8 +376,7 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
     // Given parameters
     Expr[] params = expr.getParams();
     if (params == null) {
-      params = new Expr[1];
-      params[0] = new NullLiteral();
+      params = new Expr[0];
     }
 
     EvalNode[] givenArgs = new EvalNode[params.length];
@@ -395,7 +394,9 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
     }
 
     FunctionDesc funcDesc = catalog.getFunction(expr.getSignature(), paramTypes);
-
+    if (funcDesc == null) {
+      throw new UndefinedFunctionException(CatalogUtil.getCanonicalName(expr.getSignature(), paramTypes));
+    }
     try {
     CatalogProtos.FunctionType functionType = funcDesc.getFuncType();
     if (functionType == CatalogProtos.FunctionType.GENERAL
@@ -427,6 +428,10 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
       throws PlanningException {
     FunctionDesc countRows = catalog.getFunction("count", CatalogProtos.FunctionType.AGGREGATION,
         new TajoDataTypes.DataType[] {});
+    if (countRows == null) {
+      throw new UndefinedFunctionException(CatalogUtil.
+          getCanonicalName(countRows.getSignature(), new TajoDataTypes.DataType[]{}));
+    }
 
     try {
       ctx.currentBlock.setAggregationRequire();