You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2014/09/24 03:12:01 UTC

git commit: [OPTIQ-421] Add COVAR_POP and COVAR_SAMP aggregate functions

Repository: incubator-optiq
Updated Branches:
  refs/heads/master 24eb1b841 -> 232a8f4da


[OPTIQ-421] Add COVAR_POP and COVAR_SAMP aggregate functions

Close apache/incubator-optiq#14

Pull requests closed by other recent changes (committed already):
Close apache/incubator-optiq#12
Close apache/incubator-optiq#5
Close apache/incubator-optiq#2


Project: http://git-wip-us.apache.org/repos/asf/incubator-optiq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-optiq/commit/232a8f4d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-optiq/tree/232a8f4d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-optiq/diff/232a8f4d

Branch: refs/heads/master
Commit: 232a8f4dab75d73451aad19a0a652a59184bec71
Parents: 24eb1b8
Author: Yash Sharma <ya...@snapdeal.com>
Authored: Tue Sep 23 15:25:20 2014 +0530
Committer: Julian Hyde <ju...@gmail.com>
Committed: Tue Sep 23 17:24:25 2014 -0700

----------------------------------------------------------------------
 .../main/codegen/templates/CombinedParser.jj    |  2 +
 .../eigenbase/sql/fun/SqlAvgAggFunction.java    |  2 +
 .../eigenbase/sql/fun/SqlStdOperatorTable.java  | 12 +++++
 .../sql2rel/StandardConvertletTable.java        |  6 +++
 .../org/eigenbase/sql/test/SqlAdvisorTest.java  |  2 +
 .../eigenbase/sql/test/SqlOperatorBaseTest.java | 46 ++++++++++++++++++++
 6 files changed, 70 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/232a8f4d/core/src/main/codegen/templates/CombinedParser.jj
----------------------------------------------------------------------
diff --git a/core/src/main/codegen/templates/CombinedParser.jj b/core/src/main/codegen/templates/CombinedParser.jj
index 2ccad91..b5dff64 100644
--- a/core/src/main/codegen/templates/CombinedParser.jj
+++ b/core/src/main/codegen/templates/CombinedParser.jj
@@ -4104,6 +4104,8 @@ SqlIdentifier ReservedFunctionName() :
         | <CHARACTER_LENGTH>
         | <COALESCE>
         | <COLLECT>
+        | <COVAR_POP>
+        | <COVAR_SAMP>
         | <CUME_DIST>
         | <COUNT>
         | <CURRENT_DATE>

http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/232a8f4d/core/src/main/java/org/eigenbase/sql/fun/SqlAvgAggFunction.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/sql/fun/SqlAvgAggFunction.java b/core/src/main/java/org/eigenbase/sql/fun/SqlAvgAggFunction.java
index 8a6bfe7..05f9636 100644
--- a/core/src/main/java/org/eigenbase/sql/fun/SqlAvgAggFunction.java
+++ b/core/src/main/java/org/eigenbase/sql/fun/SqlAvgAggFunction.java
@@ -79,6 +79,8 @@ public class SqlAvgAggFunction extends SqlAggFunction {
 
   public enum Subtype {
     AVG,
+    COVAR_POP,
+    COVAR_SAMP,
     STDDEV_POP,
     STDDEV_SAMP,
     VAR_POP,

http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/232a8f4d/core/src/main/java/org/eigenbase/sql/fun/SqlStdOperatorTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/sql/fun/SqlStdOperatorTable.java b/core/src/main/java/org/eigenbase/sql/fun/SqlStdOperatorTable.java
index ba31717..c4e871c 100644
--- a/core/src/main/java/org/eigenbase/sql/fun/SqlStdOperatorTable.java
+++ b/core/src/main/java/org/eigenbase/sql/fun/SqlStdOperatorTable.java
@@ -672,6 +672,18 @@ public class SqlStdOperatorTable extends ReflectiveSqlOperatorTable {
       new SqlAvgAggFunction(null, SqlAvgAggFunction.Subtype.STDDEV_POP);
 
   /**
+   * <code>COVAR_POP</code> aggregate function.
+   */
+  public static final SqlAggFunction COVAR_POP =
+      new SqlAvgAggFunction(null, SqlAvgAggFunction.Subtype.COVAR_POP);
+
+  /**
+   * <code>COVAR_SAMP</code> aggregate function.
+   */
+  public static final SqlAggFunction COVAR_SAMP =
+      new SqlAvgAggFunction(null, SqlAvgAggFunction.Subtype.COVAR_SAMP);
+
+  /**
    * <code>STDDEV_SAMP</code> aggregate function.
    */
   public static final SqlAggFunction STDDEV_SAMP =

http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/232a8f4d/core/src/main/java/org/eigenbase/sql2rel/StandardConvertletTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/sql2rel/StandardConvertletTable.java b/core/src/main/java/org/eigenbase/sql2rel/StandardConvertletTable.java
index 59b48d7..7e23f93 100644
--- a/core/src/main/java/org/eigenbase/sql2rel/StandardConvertletTable.java
+++ b/core/src/main/java/org/eigenbase/sql2rel/StandardConvertletTable.java
@@ -173,6 +173,12 @@ public class StandardConvertletTable extends ReflectiveConvertletTable {
         SqlStdOperatorTable.AVG,
         new AvgVarianceConvertlet(SqlAvgAggFunction.Subtype.AVG));
     registerOp(
+        SqlStdOperatorTable.COVAR_POP,
+        new AvgVarianceConvertlet(SqlAvgAggFunction.Subtype.COVAR_POP));
+    registerOp(
+        SqlStdOperatorTable.COVAR_SAMP,
+        new AvgVarianceConvertlet(SqlAvgAggFunction.Subtype.COVAR_SAMP));
+    registerOp(
         SqlStdOperatorTable.STDDEV_POP,
         new AvgVarianceConvertlet(SqlAvgAggFunction.Subtype.STDDEV_POP));
     registerOp(

http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/232a8f4d/core/src/test/java/org/eigenbase/sql/test/SqlAdvisorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/eigenbase/sql/test/SqlAdvisorTest.java b/core/src/test/java/org/eigenbase/sql/test/SqlAdvisorTest.java
index a707234..f9ad12e 100644
--- a/core/src/test/java/org/eigenbase/sql/test/SqlAdvisorTest.java
+++ b/core/src/test/java/org/eigenbase/sql/test/SqlAdvisorTest.java
@@ -108,6 +108,8 @@ public class SqlAdvisorTest extends SqlValidatorTestCase {
           "KEYWORD(COLLECT)",
           "KEYWORD(CONVERT)",
           "KEYWORD(COUNT)",
+          "KEYWORD(COVAR_POP)",
+          "KEYWORD(COVAR_SAMP)",
           "KEYWORD(CUME_DIST)",
           "KEYWORD(CURRENT_CATALOG)",
           "KEYWORD(CURRENT_DATE)",

http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/232a8f4d/core/src/test/java/org/eigenbase/sql/test/SqlOperatorBaseTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/eigenbase/sql/test/SqlOperatorBaseTest.java b/core/src/test/java/org/eigenbase/sql/test/SqlOperatorBaseTest.java
index 6ef09a4..b1118b2 100644
--- a/core/src/test/java/org/eigenbase/sql/test/SqlOperatorBaseTest.java
+++ b/core/src/test/java/org/eigenbase/sql/test/SqlOperatorBaseTest.java
@@ -4477,6 +4477,52 @@ public abstract class SqlOperatorBaseTest {
         0d);
   }
 
+  @Test public void testCovarPopFunc() {
+    tester.setFor(SqlStdOperatorTable.COVAR_POP, VM_EXPAND);
+    tester.checkFails(
+        "covar_pop(^*^)",
+        "Unknown identifier '\\*'",
+        false);
+    tester.checkFails(
+        "^covar_pop(cast(null as varchar(2)))^",
+        "(?s)Cannot apply 'COVAR_POP' to arguments of type 'COVAR_POP\\(<VARCHAR\\(2\\)>\\)'\\. Supported form\\(s\\): 'COVAR_POP\\(<NUMERIC>\\)'.*",
+        false);
+    tester.checkType("covar_pop(CAST(NULL AS INTEGER))", "INTEGER");
+    checkAggType(tester, "covar_pop(DISTINCT 1.5)", "DECIMAL(2, 1) NOT NULL");
+    if (!enable) {
+      return;
+    }
+    // with zero values
+    tester.checkAgg(
+        "covar_pop(x)",
+        new String[]{},
+        null,
+        0d);
+  }
+
+  @Test public void testCovarSampFunc() {
+    tester.setFor(SqlStdOperatorTable.COVAR_SAMP, VM_EXPAND);
+    tester.checkFails(
+        "covar_samp(^*^)",
+        "Unknown identifier '\\*'",
+        false);
+    tester.checkFails(
+        "^covar_samp(cast(null as varchar(2)))^",
+        "(?s)Cannot apply 'COVAR_SAMP' to arguments of type 'COVAR_SAMP\\(<VARCHAR\\(2\\)>\\)'\\. Supported form\\(s\\): 'COVAR_SAMP\\(<NUMERIC>\\)'.*",
+        false);
+    tester.checkType("covar_samp(CAST(NULL AS INTEGER))", "INTEGER");
+    checkAggType(tester, "covar_samp(DISTINCT 1.5)", "DECIMAL(2, 1) NOT NULL");
+    if (!enable) {
+      return;
+    }
+    // with zero values
+    tester.checkAgg(
+        "covar_samp(x)",
+        new String[]{},
+        null,
+        0d);
+  }
+
   @Test public void testStddevPopFunc() {
     tester.setFor(SqlStdOperatorTable.STDDEV_POP, VM_EXPAND);
     tester.checkFails(