You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by jo...@apache.org on 2016/06/17 08:00:30 UTC
zeppelin git commit: ZEPPELIN-934 Merge Phoenix interpreter into JDBC
interpreter
Repository: zeppelin
Updated Branches:
refs/heads/master f786d1387 -> 1c3373937
ZEPPELIN-934 Merge Phoenix interpreter into JDBC interpreter
### What is this PR for?
Removing Phoenix interpreter and adding example for using it through JDBC
### What type of PR is it?
[Feature]
### Todos
* [x] - Merge it into JDBC
### What is the Jira issue?
* https://issues.apache.org/jira/browse/ZEPPELIN-934
### How should this be tested?
### Screenshots (if appropriate)
### Questions:
* Does the licenses files need update? No
* Is there breaking changes for older versions? No
* Does this needs documentation? No
Author: Jongyoul Lee <jo...@gmail.com>
Closes #982 from jongyoul/ZEPPELIN-934 and squashes the following commits:
7e6b84f [Jongyoul Lee] - Removed Phoenix Interpreter - Updated example for using Apache Phoenix
Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/1c337393
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/1c337393
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/1c337393
Branch: refs/heads/master
Commit: 1c3373937aad403a6146451001d262c7778edbf0
Parents: f786d13
Author: Jongyoul Lee <jo...@gmail.com>
Authored: Fri Jun 10 00:48:29 2016 +0900
Committer: Jongyoul Lee <jo...@apache.org>
Committed: Fri Jun 17 17:00:24 2016 +0900
----------------------------------------------------------------------
conf/zeppelin-site.xml.template | 2 +-
docs/interpreter/jdbc.md | 36 +++
docs/rest-api/rest-configuration.md | 2 +-
phoenix/pom.xml | 149 ------------
.../zeppelin/phoenix/PhoenixInterpreter.java | 240 -------------------
.../phoenix/PhoenixInterpreterTest.java | 226 -----------------
pom.xml | 1 -
zeppelin-distribution/src/bin_license/LICENSE | 1 -
.../zeppelin/conf/ZeppelinConfiguration.java | 1 -
9 files changed, 38 insertions(+), 620 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/1c337393/conf/zeppelin-site.xml.template
----------------------------------------------------------------------
diff --git a/conf/zeppelin-site.xml.template b/conf/zeppelin-site.xml.template
index 11ad866..6c1ff8a 100755
--- a/conf/zeppelin-site.xml.template
+++ b/conf/zeppelin-site.xml.template
@@ -178,7 +178,7 @@
<property>
<name>zeppelin.interpreters</name>
- <value>org.apache.zeppelin.spark.SparkInterpreter,org.apache.zeppelin.spark.PySparkInterpreter,org.apache.zeppelin.rinterpreter.RRepl,org.apache.zeppelin.rinterpreter.KnitR,org.apache.zeppelin.spark.SparkRInterpreter,org.apache.zeppelin.spark.SparkSqlInterpreter,org.apache.zeppelin.spark.DepInterpreter,org.apache.zeppelin.markdown.Markdown,org.apache.zeppelin.angular.AngularInterpreter,org.apache.zeppelin.shell.ShellInterpreter,org.apache.zeppelin.file.HDFSFileInterpreter,org.apache.zeppelin.flink.FlinkInterpreter,,org.apache.zeppelin.python.PythonInterpreter,org.apache.zeppelin.lens.LensInterpreter,org.apache.zeppelin.ignite.IgniteInterpreter,org.apache.zeppelin.ignite.IgniteSqlInterpreter,org.apache.zeppelin.cassandra.CassandraInterpreter,org.apache.zeppelin.geode.GeodeOqlInterpreter,org.apache.zeppelin.postgresql.PostgreSqlInterpreter,org.apache.zeppelin.jdbc.JDBCInterpreter,org.apache.zeppelin.phoenix.PhoenixInterpreter,org.apache.zeppelin.kylin.KylinInterpreter,org.apache.zep
pelin.elasticsearch.ElasticsearchInterpreter,org.apache.zeppelin.scalding.ScaldingInterpreter,org.apache.zeppelin.alluxio.AlluxioInterpreter,org.apache.zeppelin.hbase.HbaseInterpreter,org.apache.zeppelin.livy.LivySparkInterpreter,org.apache.zeppelin.livy.LivyPySparkInterpreter,org.apache.zeppelin.livy.LivySparkRInterpreter,org.apache.zeppelin.livy.LivySparkSQLInterpreter</value>
+ <value>org.apache.zeppelin.spark.SparkInterpreter,org.apache.zeppelin.spark.PySparkInterpreter,org.apache.zeppelin.rinterpreter.RRepl,org.apache.zeppelin.rinterpreter.KnitR,org.apache.zeppelin.spark.SparkRInterpreter,org.apache.zeppelin.spark.SparkSqlInterpreter,org.apache.zeppelin.spark.DepInterpreter,org.apache.zeppelin.markdown.Markdown,org.apache.zeppelin.angular.AngularInterpreter,org.apache.zeppelin.shell.ShellInterpreter,org.apache.zeppelin.file.HDFSFileInterpreter,org.apache.zeppelin.flink.FlinkInterpreter,,org.apache.zeppelin.python.PythonInterpreter,org.apache.zeppelin.lens.LensInterpreter,org.apache.zeppelin.ignite.IgniteInterpreter,org.apache.zeppelin.ignite.IgniteSqlInterpreter,org.apache.zeppelin.cassandra.CassandraInterpreter,org.apache.zeppelin.geode.GeodeOqlInterpreter,org.apache.zeppelin.postgresql.PostgreSqlInterpreter,org.apache.zeppelin.jdbc.JDBCInterpreter,org.apache.zeppelin.kylin.KylinInterpreter,org.apache.zeppelin.elasticsearch.ElasticsearchInterpreter,or
g.apache.zeppelin.scalding.ScaldingInterpreter,org.apache.zeppelin.alluxio.AlluxioInterpreter,org.apache.zeppelin.hbase.HbaseInterpreter,org.apache.zeppelin.livy.LivySparkInterpreter,org.apache.zeppelin.livy.LivyPySparkInterpreter,org.apache.zeppelin.livy.LivySparkRInterpreter,org.apache.zeppelin.livy.LivySparkSQLInterpreter</value>
<description>Comma separated interpreter configurations. First interpreter become a default</description>
</property>
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/1c337393/docs/interpreter/jdbc.md
----------------------------------------------------------------------
diff --git a/docs/interpreter/jdbc.md b/docs/interpreter/jdbc.md
index 6783aac..8220147 100644
--- a/docs/interpreter/jdbc.md
+++ b/docs/interpreter/jdbc.md
@@ -18,6 +18,7 @@ This interpreter lets you create a JDBC connection to any data source, by now it
* Apache Hive
* Apache Drill
* Details on using [Drill JDBC Driver](https://drill.apache.org/docs/using-the-jdbc-driver)
+* Apache Phoenix
* Apache Tajo
If someone else used another database please report how it works to improve functionality.
@@ -236,6 +237,41 @@ To develop this functionality use this [method](http://docs.oracle.com/javase/7/
<td></td>
</tr>
</table>
+#### Phoenix
+##### Properties
+ <table class="table-configuration">
+ <tr>
+ <th>Name</th>
+ <th>Value</th>
+ </tr>
+ <tr>
+ <td>phoenix.driver</td>
+ <td>org.apache.phoenix.jdbc.PhoenixDriver</td>
+ </tr>
+ <tr>
+ <td>phoenix.url</td>
+ <td>jdbc:phoenix:localhost:2181:/hbase-unsecure</td>
+ </tr>
+ <tr>
+ <td>phoenix.user</td>
+ <td>phoenix_user</td>
+ </tr>
+ <tr>
+ <td>phoenix.password</td>
+ <td>phoenix_password</td>
+ </tr>
+ </table>
+##### Dependencies
+ <table class="table-configuration">
+ <tr>
+ <th>Artifact</th>
+ <th>Excludes</th>
+ </tr>
+ <tr>
+ <td>org.apache.phoenix:phoenix-core:4.4.0-HBase-1.0</td>
+ <td></td>
+ </tr>
+ </table>
#### Tajo
##### Properties
<table class="table-configuration">
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/1c337393/docs/rest-api/rest-configuration.md
----------------------------------------------------------------------
diff --git a/docs/rest-api/rest-configuration.md b/docs/rest-api/rest-configuration.md
index 45cccec..e445156 100644
--- a/docs/rest-api/rest-configuration.md
+++ b/docs/rest-api/rest-configuration.md
@@ -73,7 +73,7 @@ limitations under the License.
"zeppelin.server.context.path": "/",
"zeppelin.ssl.keystore.type": "JKS",
"zeppelin.ssl.truststore.path": "truststore",
- "zeppelin.interpreters": "org.apache.zeppelin.spark.SparkInterpreter,org.apache.zeppelin.spark.PySparkInterpreter,org.apache.zeppelin.spark.SparkRInterpreter,org.apache.zeppelin.spark.SparkSqlInterpreter,org.apache.zeppelin.spark.DepInterpreter,org.apache.zeppelin.markdown.Markdown,org.apache.zeppelin.angular.AngularInterpreter,org.apache.zeppelin.shell.ShellInterpreter,org.apache.zeppelin.flink.FlinkInterpreter,org.apache.zeppelin.lens.LensInterpreter,org.apache.zeppelin.ignite.IgniteInterpreter,org.apache.zeppelin.ignite.IgniteSqlInterpreter,org.apache.zeppelin.cassandra.CassandraInterpreter,org.apache.zeppelin.geode.GeodeOqlInterpreter,org.apache.zeppelin.postgresql.PostgreSqlInterpreter,org.apache.zeppelin.phoenix.PhoenixInterpreter,org.apache.zeppelin.kylin.KylinInterpreter,org.apache.zeppelin.elasticsearch.ElasticsearchInterpreter,org.apache.zeppelin.scalding.ScaldingInterpreter",
+ "zeppelin.interpreters": "org.apache.zeppelin.spark.SparkInterpreter,org.apache.zeppelin.spark.PySparkInterpreter,org.apache.zeppelin.spark.SparkRInterpreter,org.apache.zeppelin.spark.SparkSqlInterpreter,org.apache.zeppelin.spark.DepInterpreter,org.apache.zeppelin.markdown.Markdown,org.apache.zeppelin.angular.AngularInterpreter,org.apache.zeppelin.shell.ShellInterpreter,org.apache.zeppelin.flink.FlinkInterpreter,org.apache.zeppelin.lens.LensInterpreter,org.apache.zeppelin.ignite.IgniteInterpreter,org.apache.zeppelin.ignite.IgniteSqlInterpreter,org.apache.zeppelin.cassandra.CassandraInterpreter,org.apache.zeppelin.geode.GeodeOqlInterpreter,org.apache.zeppelin.postgresql.PostgreSqlInterpreter,org.apache.zeppelin.kylin.KylinInterpreter,org.apache.zeppelin.elasticsearch.ElasticsearchInterpreter,org.apache.zeppelin.scalding.ScaldingInterpreter",
"zeppelin.ssl": "false",
"zeppelin.notebook.autoInterpreterBinding": "true",
"zeppelin.notebook.homescreen": "",
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/1c337393/phoenix/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix/pom.xml b/phoenix/pom.xml
deleted file mode 100644
index de4c104..0000000
--- a/phoenix/pom.xml
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ 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.
- -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <artifactId>zeppelin</artifactId>
- <groupId>org.apache.zeppelin</groupId>
- <version>0.6.0-SNAPSHOT</version>
- </parent>
-
- <groupId>org.apache.zeppelin</groupId>
- <artifactId>zeppelin-phoenix</artifactId>
- <packaging>jar</packaging>
- <version>0.6.0-SNAPSHOT</version>
- <name>Zeppelin: Apache Phoenix Interpreter</name>
- <description>Zeppelin interprter for Apache Phoenix</description>
- <url>http://zeppelin.apache.org</url>
-
- <properties>
- <phoenix.version>4.4.0-HBase-1.0</phoenix.version>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.zeppelin</groupId>
- <artifactId>zeppelin-interpreter</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>sqlline</groupId>
- <artifactId>sqlline</artifactId>
- <version>1.1.9</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.phoenix</groupId>
- <artifactId>phoenix-core</artifactId>
- <version>${phoenix.version}</version>
- </dependency>
-
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <version>1.9.5</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>com.mockrunner</groupId>
- <artifactId>mockrunner-jdbc</artifactId>
- <version>1.0.8</version>
- <scope>test</scope>
- </dependency>
-
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-deploy-plugin</artifactId>
- <version>2.7</version>
- <configuration>
- <skip>true</skip>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-enforcer-plugin</artifactId>
- <version>1.3.1</version>
- <executions>
- <execution>
- <id>enforce</id>
- <phase>none</phase>
- </execution>
- </executions>
- </plugin>
-
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.8</version>
- <executions>
- <execution>
- <id>copy-dependencies</id>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <outputDirectory>${project.build.directory}/../../interpreter/phoenix</outputDirectory>
- <overWriteReleases>false</overWriteReleases>
- <overWriteSnapshots>false</overWriteSnapshots>
- <overWriteIfNewer>true</overWriteIfNewer>
- <includeScope>runtime</includeScope>
- </configuration>
- </execution>
- <execution>
- <id>copy-artifact</id>
- <phase>package</phase>
- <goals>
- <goal>copy</goal>
- </goals>
- <configuration>
- <outputDirectory>${project.build.directory}/../../interpreter/phoenix</outputDirectory>
- <overWriteReleases>false</overWriteReleases>
- <overWriteSnapshots>false</overWriteSnapshots>
- <overWriteIfNewer>true</overWriteIfNewer>
- <includeScope>runtime</includeScope>
- <artifactItems>
- <artifactItem>
- <groupId>${project.groupId}</groupId>
- <artifactId>${project.artifactId}</artifactId>
- <version>${project.version}</version>
- <type>${project.packaging}</type>
- </artifactItem>
- </artifactItems>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
- </plugins>
- </build>
-</project>
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/1c337393/phoenix/src/main/java/org/apache/zeppelin/phoenix/PhoenixInterpreter.java
----------------------------------------------------------------------
diff --git a/phoenix/src/main/java/org/apache/zeppelin/phoenix/PhoenixInterpreter.java b/phoenix/src/main/java/org/apache/zeppelin/phoenix/PhoenixInterpreter.java
deleted file mode 100644
index 05d5d31..0000000
--- a/phoenix/src/main/java/org/apache/zeppelin/phoenix/PhoenixInterpreter.java
+++ /dev/null
@@ -1,240 +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.zeppelin.phoenix;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.List;
-import java.util.Properties;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.zeppelin.interpreter.Interpreter;
-import org.apache.zeppelin.interpreter.InterpreterContext;
-import org.apache.zeppelin.interpreter.InterpreterPropertyBuilder;
-import org.apache.zeppelin.interpreter.InterpreterResult;
-import org.apache.zeppelin.interpreter.InterpreterResult.Code;
-import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion;
-import org.apache.zeppelin.scheduler.Scheduler;
-import org.apache.zeppelin.scheduler.SchedulerFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Phoenix interpreter for Zeppelin.
- */
-public class PhoenixInterpreter extends Interpreter {
- Logger logger = LoggerFactory.getLogger(PhoenixInterpreter.class);
-
- private static final String EXPLAIN_PREDICATE = "EXPLAIN ";
- private static final String UPDATE_HEADER = "UPDATES ";
-
- private static final String WS = " ";
- private static final String NEWLINE = "\n";
- private static final String TAB = "\t";
- private static final String TABLE_MAGIC_TAG = "%table ";
-
- static final String PHOENIX_JDBC_URL = "phoenix.jdbc.url";
- static final String PHOENIX_JDBC_USER = "phoenix.user";
- static final String PHOENIX_JDBC_PASSWORD = "phoenix.password";
- static final String PHOENIX_MAX_RESULT = "phoenix.max.result";
- static final String PHOENIX_JDBC_DRIVER_NAME = "phoenix.driver.name";
-
- static final String DEFAULT_JDBC_URL = "jdbc:phoenix:localhost:2181:/hbase-unsecure";
- static final String DEFAULT_JDBC_USER = "";
- static final String DEFAULT_JDBC_PASSWORD = "";
- static final String DEFAULT_MAX_RESULT = "1000";
- static final String DEFAULT_JDBC_DRIVER_NAME = "org.apache.phoenix.jdbc.PhoenixDriver";
-
- private Connection jdbcConnection;
- private Statement currentStatement;
- private Exception exceptionOnConnect;
- private int maxResult;
-
- static {
- Interpreter.register(
- "sql",
- "phoenix",
- PhoenixInterpreter.class.getName(),
- new InterpreterPropertyBuilder()
- .add(PHOENIX_JDBC_URL, DEFAULT_JDBC_URL, "Phoenix JDBC connection string")
- .add(PHOENIX_JDBC_USER, DEFAULT_JDBC_USER, "The Phoenix user")
- .add(PHOENIX_JDBC_PASSWORD, DEFAULT_JDBC_PASSWORD, "The password for the Phoenix user")
- .add(PHOENIX_MAX_RESULT, DEFAULT_MAX_RESULT, "Max number of SQL results to display.")
- .add(PHOENIX_JDBC_DRIVER_NAME, DEFAULT_JDBC_DRIVER_NAME, "Phoenix Driver classname.")
- .build()
- );
- }
-
- public PhoenixInterpreter(Properties property) {
- super(property);
- }
-
- @Override
- public void open() {
- logger.info("Jdbc open connection called!");
- close();
-
- try {
- Class.forName(getProperty(PHOENIX_JDBC_DRIVER_NAME));
-
- maxResult = Integer.valueOf(getProperty(PHOENIX_MAX_RESULT));
- jdbcConnection = DriverManager.getConnection(
- getProperty(PHOENIX_JDBC_URL),
- getProperty(PHOENIX_JDBC_USER),
- getProperty(PHOENIX_JDBC_PASSWORD)
- );
- exceptionOnConnect = null;
- logger.info("Successfully created Jdbc connection");
- }
- catch (ClassNotFoundException | SQLException e) {
- logger.error("Cannot open connection", e);
- exceptionOnConnect = e;
- }
- }
-
- @Override
- public void close() {
- logger.info("Jdbc close connection called!");
-
- try {
- if (getJdbcConnection() != null) {
- getJdbcConnection().close();
- }
- } catch (SQLException e) {
- logger.error("Cannot close connection", e);
- }
- finally {
- exceptionOnConnect = null;
- }
- }
-
- private String clean(boolean isExplain, String str){
- return (isExplain || str == null) ? str : str.replace(TAB, WS).replace(NEWLINE, WS);
- }
-
- private InterpreterResult executeSql(String sql) {
- try {
- if (exceptionOnConnect != null) {
- return new InterpreterResult(Code.ERROR, exceptionOnConnect.getMessage());
- }
-
- currentStatement = getJdbcConnection().createStatement();
-
- boolean isExplain = StringUtils.containsIgnoreCase(sql, EXPLAIN_PREDICATE);
- StringBuilder msg = (isExplain) ? new StringBuilder() : new StringBuilder(TABLE_MAGIC_TAG);
-
- ResultSet res = null;
- try {
- boolean hasResult = currentStatement.execute(sql);
- if (hasResult){ //If query had results
- res = currentStatement.getResultSet();
- //Append column names
- ResultSetMetaData md = res.getMetaData();
- String row = clean(isExplain, md.getColumnName(1));
- for (int i = 2; i < md.getColumnCount() + 1; i++)
- row += TAB + clean(isExplain, md.getColumnName(i));
- msg.append(row + NEWLINE);
-
- //Append rows
- int rowCount = 0;
- while (res.next() && rowCount < getMaxResult()) {
- row = clean(isExplain, res.getString(1));
- for (int i = 2; i < md.getColumnCount() + 1; i++)
- row += TAB + clean(isExplain, res.getString(i));
- msg.append(row + NEWLINE);
- rowCount++;
- }
- }
- else { // May have been upsert or DDL
- msg.append(UPDATE_HEADER + NEWLINE +
- "Rows affected: " + currentStatement.getUpdateCount()
- + NEWLINE);
- }
-
- } finally {
- try {
- if (res != null) res.close();
- getJdbcConnection().commit();
- currentStatement.close();
- } finally {
- currentStatement = null;
- }
- }
-
- return new InterpreterResult(Code.SUCCESS, msg.toString());
- }
- catch (SQLException ex) {
- logger.error("Can not run " + sql, ex);
- return new InterpreterResult(Code.ERROR, ex.getMessage());
- }
- }
-
- @Override
- public InterpreterResult interpret(String cmd, InterpreterContext contextInterpreter) {
- logger.info("Run SQL command '" + cmd + "'");
- return executeSql(cmd);
- }
-
- @Override
- public void cancel(InterpreterContext context) {
- if (currentStatement != null) {
- try {
- currentStatement.cancel();
- }
- catch (SQLException ex) {
- }
- finally {
- currentStatement = null;
- }
- }
- }
-
- @Override
- public FormType getFormType() {
- return FormType.SIMPLE;
- }
-
- @Override
- public int getProgress(InterpreterContext context) {
- return 0;
- }
-
- @Override
- public Scheduler getScheduler() {
- return SchedulerFactory.singleton().createOrGetFIFOScheduler(
- PhoenixInterpreter.class.getName() + this.hashCode());
- }
-
- @Override
- public List<InterpreterCompletion> completion(String buf, int cursor) {
- return null;
- }
-
- public Connection getJdbcConnection() {
- return jdbcConnection;
- }
-
- public int getMaxResult() {
- return maxResult;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/1c337393/phoenix/src/test/java/org/apache/zeppelin/phoenix/PhoenixInterpreterTest.java
----------------------------------------------------------------------
diff --git a/phoenix/src/test/java/org/apache/zeppelin/phoenix/PhoenixInterpreterTest.java b/phoenix/src/test/java/org/apache/zeppelin/phoenix/PhoenixInterpreterTest.java
deleted file mode 100644
index 9270d4b..0000000
--- a/phoenix/src/test/java/org/apache/zeppelin/phoenix/PhoenixInterpreterTest.java
+++ /dev/null
@@ -1,226 +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.zeppelin.phoenix;
-
-import static org.apache.zeppelin.phoenix.PhoenixInterpreter.*;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.times;
-
-import java.sql.SQLException;
-import java.util.Properties;
-
-import org.apache.zeppelin.interpreter.InterpreterResult;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Matchers;
-import org.mockito.Mockito;
-
-import com.mockrunner.jdbc.BasicJDBCTestCaseAdapter;
-import com.mockrunner.jdbc.StatementResultSetHandler;
-import com.mockrunner.mock.jdbc.MockConnection;
-import com.mockrunner.mock.jdbc.MockResultSet;
-
-/**
- * Phoenix interpreter unit tests
- */
-public class PhoenixInterpreterTest extends BasicJDBCTestCaseAdapter {
- private PhoenixInterpreter phoenixInterpreter = null;
- private MockResultSet result = null;
-
- @Before
- public void beforeTest() {
- MockConnection connection = getJDBCMockObjectFactory().getMockConnection();
-
- StatementResultSetHandler statementHandler = connection.getStatementResultSetHandler();
- result = statementHandler.createResultSet();
- statementHandler.prepareGlobalResultSet(result);
-
- Properties properties = new Properties();
- properties.put(PHOENIX_JDBC_DRIVER_NAME, DEFAULT_JDBC_DRIVER_NAME);
- properties.put(PHOENIX_JDBC_URL, DEFAULT_JDBC_URL);
- properties.put(PHOENIX_JDBC_USER, DEFAULT_JDBC_USER);
- properties.put(PHOENIX_JDBC_PASSWORD, DEFAULT_JDBC_PASSWORD);
- properties.put(PHOENIX_MAX_RESULT, DEFAULT_MAX_RESULT);
-
- phoenixInterpreter = spy(new PhoenixInterpreter(properties));
- when(phoenixInterpreter.getJdbcConnection()).thenReturn(connection);
- }
-
- @Test
- public void testOpenCommandIdempotency() throws SQLException {
- // Ensure that an attempt to open new connection will clean any remaining connections
- phoenixInterpreter.open();
- phoenixInterpreter.open();
- phoenixInterpreter.open();
-
- verify(phoenixInterpreter, times(3)).open();
- verify(phoenixInterpreter, times(3)).close();
- }
-
- @Test
- public void testDefaultProperties() throws SQLException {
-
- PhoenixInterpreter phoenixInterpreter = new PhoenixInterpreter(new Properties());
-
- assertEquals(DEFAULT_JDBC_DRIVER_NAME,
- phoenixInterpreter.getProperty(PHOENIX_JDBC_DRIVER_NAME));
- assertEquals(DEFAULT_JDBC_URL, phoenixInterpreter.getProperty(PHOENIX_JDBC_URL));
- assertEquals(DEFAULT_JDBC_USER, phoenixInterpreter.getProperty(PHOENIX_JDBC_USER));
- assertEquals(DEFAULT_JDBC_PASSWORD,
- phoenixInterpreter.getProperty(PHOENIX_JDBC_PASSWORD));
- assertEquals(DEFAULT_MAX_RESULT, phoenixInterpreter.getProperty(PHOENIX_MAX_RESULT));
- }
-
- @Test
- public void testConnectionClose() throws SQLException {
-
- PhoenixInterpreter phoenixInterpreter = spy(new PhoenixInterpreter(new Properties()));
-
- when(phoenixInterpreter.getJdbcConnection()).thenReturn(
- getJDBCMockObjectFactory().getMockConnection());
-
- phoenixInterpreter.close();
-
- verifyAllResultSetsClosed();
- verifyAllStatementsClosed();
- verifyConnectionClosed();
- }
-
- @Test
- public void testStatementCancel() throws SQLException {
-
- PhoenixInterpreter phoenixInterpreter = spy(new PhoenixInterpreter(new Properties()));
-
- when(phoenixInterpreter.getJdbcConnection()).thenReturn(
- getJDBCMockObjectFactory().getMockConnection());
-
- phoenixInterpreter.cancel(null);
-
- verifyAllResultSetsClosed();
- verifyAllStatementsClosed();
- assertFalse("Cancel operation should not close the connection", phoenixInterpreter
- .getJdbcConnection().isClosed());
- }
-
- @Test
- public void testSelectQuery() throws SQLException {
-
- when(phoenixInterpreter.getMaxResult()).thenReturn(1000);
-
- String sqlQuery = "select * from t";
-
- result.addColumn("col1", new String[] {"val11", "val12"});
- result.addColumn("col2", new String[] {"val21", "val22"});
-
- InterpreterResult interpreterResult = phoenixInterpreter.interpret(sqlQuery, null);
-
- assertEquals(InterpreterResult.Code.SUCCESS, interpreterResult.code());
- assertEquals(InterpreterResult.Type.TABLE, interpreterResult.type());
- assertEquals("col1\tcol2\nval11\tval21\nval12\tval22\n", interpreterResult.message());
-
- verifySQLStatementExecuted(sqlQuery);
- verifyAllResultSetsClosed();
- verifyAllStatementsClosed();
- }
-
- @Test
- public void testSelectQueryMaxResult() throws SQLException {
-
- when(phoenixInterpreter.getMaxResult()).thenReturn(1);
-
- String sqlQuery = "select * from t";
-
- result.addColumn("col1", new String[] {"val11", "val12"});
- result.addColumn("col2", new String[] {"val21", "val22"});
-
- InterpreterResult interpreterResult = phoenixInterpreter.interpret(sqlQuery, null);
-
- assertEquals(InterpreterResult.Code.SUCCESS, interpreterResult.code());
- assertEquals(InterpreterResult.Type.TABLE, interpreterResult.type());
- assertEquals("col1\tcol2\nval11\tval21\n", interpreterResult.message());
-
- verifySQLStatementExecuted(sqlQuery);
- verifyAllResultSetsClosed();
- verifyAllStatementsClosed();
- }
-
- @Test
- public void testSelectQueryWithSpecialCharacters() throws SQLException {
-
- when(phoenixInterpreter.getMaxResult()).thenReturn(1000);
-
- String sqlQuery = "select * from t";
-
- result.addColumn("co\tl1", new String[] {"val11", "va\tl1\n2"});
- result.addColumn("co\nl2", new String[] {"v\nal21", "val\t22"});
-
- InterpreterResult interpreterResult = phoenixInterpreter.interpret(sqlQuery, null);
-
- assertEquals(InterpreterResult.Code.SUCCESS, interpreterResult.code());
- assertEquals(InterpreterResult.Type.TABLE, interpreterResult.type());
- assertEquals("co l1\tco l2\nval11\tv al21\nva l1 2\tval 22\n", interpreterResult.message());
-
- verifySQLStatementExecuted(sqlQuery);
- verifyAllResultSetsClosed();
- verifyAllStatementsClosed();
- }
-
- @Test
- public void testExplainQuery() throws SQLException {
-
- when(phoenixInterpreter.getMaxResult()).thenReturn(1000);
-
- String sqlQuery = "explain select * from t";
-
- result.addColumn("col1", new String[] {"val11", "val12"});
-
- InterpreterResult interpreterResult = phoenixInterpreter.interpret(sqlQuery, null);
-
- assertEquals(InterpreterResult.Code.SUCCESS, interpreterResult.code());
- assertEquals(InterpreterResult.Type.TEXT, interpreterResult.type());
- assertEquals("col1\nval11\nval12\n", interpreterResult.message());
-
- verifySQLStatementExecuted(sqlQuery);
- verifyAllResultSetsClosed();
- verifyAllStatementsClosed();
- }
-
- @Test
- public void testExplainQueryWithSpecialCharachters() throws SQLException {
-
- when(phoenixInterpreter.getMaxResult()).thenReturn(1000);
-
- String sqlQuery = "explain select * from t";
-
- result.addColumn("co\tl\n1", new String[] {"va\nl11", "va\tl\n12"});
-
- InterpreterResult interpreterResult = phoenixInterpreter.interpret(sqlQuery, null);
-
- assertEquals(InterpreterResult.Code.SUCCESS, interpreterResult.code());
- assertEquals(InterpreterResult.Type.TEXT, interpreterResult.type());
- assertEquals("co\tl\n1\nva\nl11\nva\tl\n12\n", interpreterResult.message());
-
- verifySQLStatementExecuted(sqlQuery);
- verifyAllResultSetsClosed();
- verifyAllStatementsClosed();
- }
-}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/1c337393/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index d971d9a..0d4abc5 100755
--- a/pom.xml
+++ b/pom.xml
@@ -73,7 +73,6 @@
<module>shell</module>
<module>livy</module>
<module>hbase</module>
- <module>phoenix</module>
<module>postgresql</module>
<module>jdbc</module>
<module>file</module>
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/1c337393/zeppelin-distribution/src/bin_license/LICENSE
----------------------------------------------------------------------
diff --git a/zeppelin-distribution/src/bin_license/LICENSE b/zeppelin-distribution/src/bin_license/LICENSE
index 57c7224..a19b7b4 100644
--- a/zeppelin-distribution/src/bin_license/LICENSE
+++ b/zeppelin-distribution/src/bin_license/LICENSE
@@ -40,7 +40,6 @@ The following components are provided under Apache License.
(Apache 2.0) Apache Ignite (http://ignite.apache.org/)
(Apache 2.0) Apache Kylin (http://kylin.apache.org/)
(Apache 2.0) Apache Lens (http://lens.apache.org/)
- (Apache 2.0) Apache Phoenix (http://phoenix.apache.org/)
(Apache 2.0) Apache Flink (http://flink.apache.org/)
(Apache 2.0) Apache Thrift (http://thrift.apache.org/)
(Apache 2.0) Apache Lucene (https://lucene.apache.org/)
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/1c337393/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java
index a7d4498..45fbba4 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java
@@ -493,7 +493,6 @@ public class ZeppelinConfiguration extends XMLConfiguration {
+ "org.apache.zeppelin.livy.LivySparkRInterpreter,"
+ "org.apache.zeppelin.alluxio.AlluxioInterpreter,"
+ "org.apache.zeppelin.file.HDFSFileInterpreter,"
- + "org.apache.zeppelin.phoenix.PhoenixInterpreter,"
+ "org.apache.zeppelin.postgresql.PostgreSqlInterpreter,"
+ "org.apache.zeppelin.flink.FlinkInterpreter,"
+ "org.apache.zeppelin.python.PythonInterpreter,"