Repository: incubator-gearpump Updated Branches: refs/heads/sql 1cf87bf77 -> 4bef303a3
[GEARPUMP-217] Remove irrelevant files, Update README.md Author: Buddhi Ayesha <[email protected]> Closes #219 from buddhiayesha2015/sql. Project: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/commit/4bef303a Tree: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/tree/4bef303a Diff: http://git-wip-us.apache.org/repos/asf/incubator-gearpump/diff/4bef303a Branch: refs/heads/sql Commit: 4bef303a389d2b454d26ece0129c5685d5876aa5 Parents: 1cf87bf Author: Buddhi Ayesha <[email protected]> Authored: Thu Aug 24 13:30:32 2017 +0800 Committer: manuzhang <[email protected]> Committed: Thu Aug 24 13:30:41 2017 +0800 ---------------------------------------------------------------------- experiments/sql/README.md | 8 +- .../java/org/apache/gearpump/sql/SQLNode.java | 127 --------------- .../gearpump/experiments/sql/Connection.scala | 153 ------------------- .../apache/gearpump/experiments/sql/Query.scala | 55 ------- .../gearpump/experiments/sql/model/Model.scala | 35 ----- 5 files changed, 4 insertions(+), 374 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/4bef303a/experiments/sql/README.md ---------------------------------------------------------------------- diff --git a/experiments/sql/README.md b/experiments/sql/README.md index 9880dff..28b6d2c 100644 --- a/experiments/sql/README.md +++ b/experiments/sql/README.md @@ -1,8 +1,8 @@ # SQL Support -This project is about building a SQL layer with Apache Calcite to help those who are unfamiliar with Scala/Java to use Gearpump. +This project is about building a SQL layer with [Apache Calcite](https://calcite.apache.org/) to help those who are unfamiliar with Scala/Java to use [Apache Gearpump](http://gearpump.apache.org/). ## Build -- Build [GearPump SQL](https://github.com/buddhiayesha2015/incubator-gearpump/tree/sql/experiments/sql) +- Build [GearPump SQL](/experiments/sql) -## Test -- Run [SQL WordCount example](https://github.com/buddhiayesha2015/incubator-gearpump/blob/sql/experiments/sql/src/test/java/org/apache/gearpump/sql/example/SqlWordCountTest.java) +## Example +- Run [SQL WordCount example](/experiments/sql/src/test/java/org/apache/gearpump/sql/example/SqlWordCountTest.java) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/4bef303a/experiments/sql/src/main/java/org/apache/gearpump/sql/SQLNode.java ---------------------------------------------------------------------- diff --git a/experiments/sql/src/main/java/org/apache/gearpump/sql/SQLNode.java b/experiments/sql/src/main/java/org/apache/gearpump/sql/SQLNode.java deleted file mode 100644 index 7fcc3a1..0000000 --- a/experiments/sql/src/main/java/org/apache/gearpump/sql/SQLNode.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.gearpump.sql; - -import org.apache.calcite.avatica.util.Casing; -import org.apache.calcite.avatica.util.Quoting; -import org.apache.calcite.sql.SqlCall; -import org.apache.calcite.sql.SqlNode; -import org.apache.calcite.sql.SqlNodeList; -import org.apache.calcite.sql.fun.SqlCase; -import org.apache.calcite.sql.parser.SqlParseException; -import org.apache.calcite.sql.parser.SqlParser; -import org.apache.calcite.sql.parser.impl.SqlParserImpl; -import org.apache.calcite.sql.validate.SqlConformanceEnum; -import org.apache.calcite.sql.validate.SqlValidator; -import org.apache.calcite.sql.validate.SqlValidatorScope; -import org.apache.calcite.util.Util; -import org.junit.ComparisonFailure; - -import java.util.regex.Pattern; - -public class SQLNode { - - private static final Pattern LINE_BREAK_PATTERN = Pattern.compile("\r\n|\r|\n"); - - private static final Pattern TAB_PATTERN = Pattern.compile("\t"); - - private static final String LINE_BREAK = "\\\\n\"" + Util.LINE_SEPARATOR + " + \""; - - private static final ThreadLocal<boolean[]> LINUXIFY = new ThreadLocal<boolean[]>() { - @Override - protected boolean[] initialValue() { - return new boolean[]{true}; - } - }; - - - protected SqlParser getSqlParser(String sql) { - return SqlParser.create(sql, - SqlParser.configBuilder() - .setParserFactory(SqlParserImpl.FACTORY) - .setQuoting(Quoting.DOUBLE_QUOTE) - .setUnquotedCasing(Casing.TO_UPPER) - .setQuotedCasing(Casing.UNCHANGED) - .setConformance(SqlConformanceEnum.DEFAULT) - .build()); - } - - public static String toJavaString(String s) { - s = Util.replace(s, "\"", "\\\""); - s = LINE_BREAK_PATTERN.matcher(s).replaceAll(LINE_BREAK); - s = TAB_PATTERN.matcher(s).replaceAll("\\\\t"); - s = "\"" + s + "\""; - String spurious = "\n \\+ \"\""; - if (s.endsWith(spurious)) { - s = s.substring(0, s.length() - spurious.length()); - } - return s; - } - - public static void assertEqualsVerbose(String expected, String actual) { - if (actual == null) { - if (expected == null) { - return; - } else { - String message = "Expected:\n" + expected + "\nActual: null"; - throw new ComparisonFailure(message, expected, null); - } - } - if ((expected != null) && expected.equals(actual)) { - return; - } - String s = toJavaString(actual); - String message = "Expected:\n" + expected + "\nActual:\n" + - actual + "\nActual java:\n" + s + '\n'; - - throw new ComparisonFailure(message, expected, actual); - } - - public void check(String sql, String expected) { - final SqlNode sqlNode; - try { - sqlNode = getSqlParser(sql).parseStmt(); - } catch (SqlParseException e) { - throw new RuntimeException("Error while parsing SQL: " + sql, e); - } - - String actual = sqlNode.toSqlString(null, true).getSql(); - if (LINUXIFY.get()[0]) { - actual = Util.toLinux(actual); - } - assertEqualsVerbose(expected, actual); - } - - public void validateCall(SqlCall call, SqlValidator validator, SqlValidatorScope operandScope) { - SqlCase sqlCase = (SqlCase) call; - SqlNodeList whenOperands = sqlCase.getWhenOperands(); - SqlNodeList thenOperands = sqlCase.getThenOperands(); - SqlNode elseOperand = sqlCase.getElseOperand(); - for (SqlNode operand : whenOperands) { - operand.validateExpr(validator, operandScope); - } - for (SqlNode operand : thenOperands) { - operand.validateExpr(validator, operandScope); - } - if (elseOperand != null) { - elseOperand.validateExpr(validator, operandScope); - } - } - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/4bef303a/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/Connection.scala ---------------------------------------------------------------------- diff --git a/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/Connection.scala b/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/Connection.scala deleted file mode 100644 index ee55aa8..0000000 --- a/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/Connection.scala +++ /dev/null @@ -1,153 +0,0 @@ -package org.apache.gearpump.experiments.sql - -import java.lang.reflect.Type -import java.sql.{Blob, CallableStatement, Clob, DatabaseMetaData, NClob, PreparedStatement, SQLException, SQLWarning, SQLXML, Savepoint, Statement, Struct} -import java.util.Properties -import java.util.concurrent.Executor -import java.{sql, util} - -import org.apache.calcite.adapter.java.JavaTypeFactory -import org.apache.calcite.config.CalciteConnectionConfig -import org.apache.calcite.jdbc.CalciteConnection -import org.apache.calcite.linq4j.tree.Expression -import org.apache.calcite.linq4j.{Enumerator, Queryable} -import org.apache.log4j.Logger - -class Connection extends CalciteConnection { - - import org.apache.calcite.schema.SchemaPlus - import org.apache.calcite.tools.Frameworks - - private val logger = Logger.getLogger(classOf[Nothing]) - private val rootSchema = Frameworks.createRootSchema(true) - private var schema = "" - - @throws[SQLException] - override def setSchema(s: String): Unit = { - schema = s - } - - override def getSchema: String = schema - - override def getTypeFactory: JavaTypeFactory = ??? - - override def getProperties: Properties = ??? - - override def getRootSchema: SchemaPlus = rootSchema - - override def config(): CalciteConnectionConfig = ??? - - override def commit(): Unit = ??? - - override def getHoldability: Int = 0 - - override def setCatalog(catalog: String): Unit = ??? - - override def setHoldability(holdability: Int): Unit = ??? - - override def prepareStatement(sql: String): PreparedStatement = ??? - - override def prepareStatement(sql: String, resultSetType: Int, resultSetConcurrency: Int): PreparedStatement = ??? - - override def prepareStatement(sql: String, resultSetType: Int, resultSetConcurrency: Int, resultSetHoldability: Int): PreparedStatement = ??? - - override def prepareStatement(sql: String, autoGeneratedKeys: Int): PreparedStatement = ??? - - override def prepareStatement(sql: String, columnIndexes: Array[Int]): PreparedStatement = ??? - - override def prepareStatement(sql: String, columnNames: Array[String]): PreparedStatement = ??? - - override def createClob(): Clob = ??? - - override def setClientInfo(name: String, value: String): Unit = ??? - - override def setClientInfo(properties: Properties): Unit = ??? - - override def createSQLXML(): SQLXML = ??? - - override def getCatalog: String = ??? - - override def createBlob(): Blob = ??? - - override def createStatement(): Statement = ??? - - override def createStatement(resultSetType: Int, resultSetConcurrency: Int): Statement = ??? - - override def createStatement(resultSetType: Int, resultSetConcurrency: Int, resultSetHoldability: Int): Statement = ??? - - override def abort(executor: Executor): Unit = ??? - - override def setAutoCommit(autoCommit: Boolean): Unit = ??? - - override def getMetaData: DatabaseMetaData = ??? - - override def setReadOnly(readOnly: Boolean): Unit = ??? - - override def prepareCall(sql: String): CallableStatement = ??? - - override def prepareCall(sql: String, resultSetType: Int, resultSetConcurrency: Int): CallableStatement = ??? - - override def prepareCall(sql: String, resultSetType: Int, resultSetConcurrency: Int, resultSetHoldability: Int): CallableStatement = ??? - - override def setTransactionIsolation(level: Int): Unit = ??? - - override def getWarnings: SQLWarning = ??? - - override def releaseSavepoint(savepoint: Savepoint): Unit = ??? - - override def nativeSQL(sql: String): String = ??? - - override def isReadOnly: Boolean = ??? - - override def createArrayOf(typeName: String, elements: Array[AnyRef]): sql.Array = ??? - - override def setSavepoint(): Savepoint = ??? - - override def setSavepoint(name: String): Savepoint = ??? - - override def close(): Unit = ??? - - override def createNClob(): NClob = ??? - - override def rollback(): Unit = ??? - - override def rollback(savepoint: Savepoint): Unit = ??? - - override def setNetworkTimeout(executor: Executor, milliseconds: Int): Unit = ??? - - override def setTypeMap(map: util.Map[String, Class[_]]): Unit = ??? - - override def isValid(timeout: Int): Boolean = ??? - - override def getAutoCommit: Boolean = ??? - - override def clearWarnings(): Unit = ??? - - override def getNetworkTimeout: Int = 0 - - override def isClosed: Boolean = ??? - - override def getTransactionIsolation: Int = 0 - - override def createStruct(typeName: String, attributes: Array[AnyRef]): Struct = ??? - - override def getClientInfo(name: String): String = ??? - - override def getClientInfo: Properties = ??? - - override def getTypeMap: util.Map[String, Class[_]] = ??? - - override def unwrap[T](iface: Class[T]): T = ??? - - override def isWrapperFor(iface: Class[_]): Boolean = ??? - - override def execute[T](expression: Expression, aClass: Class[T]): T = ??? - - override def execute[T](expression: Expression, `type`: Type): T = ??? - - override def executeQuery[T](queryable: Queryable[T]): Enumerator[T] = ??? - - override def createQuery[T](expression: Expression, aClass: Class[T]): Queryable[T] = ??? - - override def createQuery[T](expression: Expression, `type`: Type): Queryable[T] = ??? -} http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/4bef303a/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/Query.scala ---------------------------------------------------------------------- diff --git a/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/Query.scala b/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/Query.scala deleted file mode 100644 index 3ea0cec..0000000 --- a/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/Query.scala +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.gearpump.experiments.sql - -import java.util - -import org.apache.calcite.config.Lex -import org.apache.calcite.plan.{Contexts, ConventionTraitDef, RelTrait, RelTraitDef} -import org.apache.calcite.rel.`type`.RelDataTypeSystem -import org.apache.calcite.rel.{RelCollationTraitDef, RelNode} -import org.apache.calcite.sql.parser.SqlParser -import org.apache.calcite.tools._ - -object Query { - - def getLogicalPlan(query: String): RelNode = { - - val traitDefs: util.List[RelTraitDef[_ <: RelTrait]] = new util.ArrayList[RelTraitDef[_ <: RelTrait]] - - traitDefs.add(ConventionTraitDef.INSTANCE) - traitDefs.add(RelCollationTraitDef.INSTANCE) - - val config = Frameworks.newConfigBuilder() - .parserConfig(SqlParser.configBuilder.setLex(Lex.MYSQL).build) - .traitDefs(traitDefs) - .context(Contexts.EMPTY_CONTEXT) - .ruleSets(RuleSets.ofList()) - .costFactory(null) - .typeSystem(RelDataTypeSystem.DEFAULT) - .build(); - - val queryPlanner = Frameworks.getPlanner(config) - val sqlNode = queryPlanner.parse(query) - val validatedSqlNode = queryPlanner.validate(sqlNode) - - queryPlanner.rel(validatedSqlNode).project() - } - -} http://git-wip-us.apache.org/repos/asf/incubator-gearpump/blob/4bef303a/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/model/Model.scala ---------------------------------------------------------------------- diff --git a/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/model/Model.scala b/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/model/Model.scala deleted file mode 100644 index d8a0ad6..0000000 --- a/experiments/sql/src/main/scala/org/apache/gearpump/experiments/sql/model/Model.scala +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.gearpump.experiments.sql.model - -class Model { - - object QueryStatus extends Enumeration { - type QueryStatus = Value - val ACCEPTED, RUNNING, FAILED, COMPLETED = Value - } - - var status = null - var id = null - var version = null - var whenCreated = null - var whenUpdated = null - - -}
