You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gearpump.apache.org by ma...@apache.org on 2017/07/09 00:18:25 UTC

[12/20] incubator-gearpump git commit: Add StreamQueryPlanner class

Add StreamQueryPlanner class


Project: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/commit/00430fd8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/tree/00430fd8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/diff/00430fd8

Branch: refs/heads/sql
Commit: 00430fd8990396e598423a249de455dd60a96b58
Parents: 9a1a7c2
Author: Buddhi Ayesha <bu...@cse.mrt.ac.lk>
Authored: Sat Jun 17 14:38:39 2017 +0530
Committer: manuzhang <ow...@gmail.com>
Committed: Sun Jul 9 07:52:48 2017 +0800

----------------------------------------------------------------------
 .../calcite/planner/StreamQueryPlanner.java     | 73 ++++++++++++++++++++
 1 file changed, 73 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/00430fd8/experiments/sql/src/main/java/org/apache/calcite/planner/StreamQueryPlanner.java
----------------------------------------------------------------------
diff --git a/experiments/sql/src/main/java/org/apache/calcite/planner/StreamQueryPlanner.java b/experiments/sql/src/main/java/org/apache/calcite/planner/StreamQueryPlanner.java
new file mode 100644
index 0000000..4cbf16e
--- /dev/null
+++ b/experiments/sql/src/main/java/org/apache/calcite/planner/StreamQueryPlanner.java
@@ -0,0 +1,73 @@
+package org.apache.calcite.planner;
+
+import org.apache.calcite.adapter.java.ReflectiveSchema;
+import org.apache.calcite.jdbc.CalciteConnection;
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.schema.SchemaPlus;
+import org.apache.calcite.tools.*;
+import org.apache.calcite.utils.CalciteFrameworkConfiguration;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+public class StreamQueryPlanner {
+
+    public static void main(String[] args) throws ClassNotFoundException, SQLException, ValidationException, RelConversionException {
+
+        Class.forName("org.apache.calcite.jdbc.Driver");
+        Connection connection = DriverManager.getConnection("jdbc:calcite:");
+        CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
+        SchemaPlus rootSchema = calciteConnection.getRootSchema();
+        rootSchema.add("t", new ReflectiveSchema(new Transactions()));
+
+        FrameworkConfig frameworkConfig = CalciteFrameworkConfiguration.getDefaultconfig(rootSchema);
+        Planner planner = Frameworks.getPlanner(frameworkConfig);
+
+        String query = "select t.orders.id, name, max(quantity)*0.5 from t.orders, t.products "
+                + "where t.orders.id = t.products.id group by t.orders.id, name "
+                + "having sum(quantity) > 5 order by sum(quantity) ";
+
+        RelNode logicalPlan = LogicalPlan.getLogicalPlan(query, planner);
+        System.out.println(RelOptUtil.toString(logicalPlan));
+    }
+
+    public static class Transactions {
+
+        public final Order[] orders = {
+                new Order("001", 3),
+                new Order("002", 5),
+                new Order("003", 8),
+                new Order("004", 15),
+        };
+
+        public final Product[] products = {
+                new Product("001", "Book"),
+                new Product("002", "Pen"),
+                new Product("003", "Pencil"),
+                new Product("004", "Ruler"),
+        };
+    }
+
+    public static class Order {
+        public final String id;
+        public final int quantity;
+
+        public Order(String id, int quantity) {
+            this.id = id;
+            this.quantity = quantity;
+        }
+    }
+
+    public static class Product {
+        public final String id;
+        public final String name;
+
+        public Product(String id, String name) {
+            this.id = id;
+            this.name = name;
+        }
+    }
+
+}