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 2015/04/07 02:45:48 UTC

[1/2] incubator-calcite git commit: [CALCITE-641] Implement logging throughout Avatica server (Nick Dimiduk)

Repository: incubator-calcite
Updated Branches:
  refs/heads/master 7d522dc93 -> 5f57f7892


[CALCITE-641] Implement logging throughout Avatica server (Nick Dimiduk)

Close apache/incubator-calcite#73


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

Branch: refs/heads/master
Commit: d4d7ab996e12763b65b397459a882a6b8a03021b
Parents: 7d522dc
Author: Nick Dimiduk <nd...@gmail.com>
Authored: Mon Apr 6 13:39:36 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon Apr 6 15:06:47 2015 -0700

----------------------------------------------------------------------
 .../apache/calcite/avatica/jdbc/JdbcMeta.java   | 10 +++
 .../calcite/avatica/server/AvaticaHandler.java  | 11 ++++
 .../calcite/avatica/server/HttpServer.java      | 64 +++++++++++---------
 3 files changed, 57 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/d4d7ab99/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
----------------------------------------------------------------------
diff --git a/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java b/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
index f9d783d..276dd71 100644
--- a/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
+++ b/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
@@ -516,6 +516,10 @@ public class JdbcMeta implements Meta {
 
   public MetaResultSet getBestRowIdentifier(String catalog, String schema,
       String table, int scope, boolean nullable) {
+    if (LOG.isTraceEnabled()) {
+      LOG.trace("getBestRowIdentifier catalog:" + catalog + " schema:" + schema
+          + " table:" + table + " scope:" + scope + " nullable:" + nullable);
+    }
     try {
       return JdbcResultSet.create(DEFAULT_CONN_ID, -1,
           connection.getMetaData().getBestRowIdentifier(catalog, schema,
@@ -527,6 +531,9 @@ public class JdbcMeta implements Meta {
 
   public MetaResultSet getVersionColumns(String catalog, String schema,
       String table) {
+    if (LOG.isTraceEnabled()) {
+      LOG.trace("getVersionColumns catalog:" + catalog + " schema:" + schema + " table:" + table);
+    }
     try {
       return JdbcResultSet.create(DEFAULT_CONN_ID, -1,
           connection.getMetaData().getVersionColumns(catalog, schema, table));
@@ -537,6 +544,9 @@ public class JdbcMeta implements Meta {
 
   public MetaResultSet getPrimaryKeys(String catalog, String schema,
       String table) {
+    if (LOG.isTraceEnabled()) {
+      LOG.trace("getPrimaryKeys catalog:" + catalog + " schema:" + schema + " table:" + table);
+    }
     try {
       return JdbcResultSet.create(DEFAULT_CONN_ID, -1,
           connection.getMetaData().getPrimaryKeys(catalog, schema, table));

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/d4d7ab99/avatica-server/src/main/java/org/apache/calcite/avatica/server/AvaticaHandler.java
----------------------------------------------------------------------
diff --git a/avatica-server/src/main/java/org/apache/calcite/avatica/server/AvaticaHandler.java b/avatica-server/src/main/java/org/apache/calcite/avatica/server/AvaticaHandler.java
index bb4605f..63c6c9f 100644
--- a/avatica-server/src/main/java/org/apache/calcite/avatica/server/AvaticaHandler.java
+++ b/avatica-server/src/main/java/org/apache/calcite/avatica/server/AvaticaHandler.java
@@ -19,6 +19,9 @@ package org.apache.calcite.avatica.server;
 import org.apache.calcite.avatica.remote.JsonHandler;
 import org.apache.calcite.avatica.remote.Service;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.handler.AbstractHandler;
 
@@ -31,6 +34,8 @@ import javax.servlet.http.HttpServletResponse;
  * Jetty handler that executes Avatica JSON request-responses.
  */
 public class AvaticaHandler extends AbstractHandler {
+  private static final Log LOG = LogFactory.getLog(AvaticaHandler.class);
+
   final JsonHandler jsonHandler;
 
   public AvaticaHandler(Service service) {
@@ -44,7 +49,13 @@ public class AvaticaHandler extends AbstractHandler {
     response.setStatus(HttpServletResponse.SC_OK);
     if (request.getMethod().equals("POST")) {
       final String jsonRequest = request.getHeader("request");
+      if (LOG.isTraceEnabled()) {
+        LOG.trace("request: " + jsonRequest);
+      }
       final String jsonResponse = jsonHandler.apply(jsonRequest);
+      if (LOG.isTraceEnabled()) {
+        LOG.trace("response: " + jsonResponse);
+      }
       baseRequest.setHandled(true);
       response.getWriter().println(jsonResponse);
     }

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/d4d7ab99/avatica-server/src/main/java/org/apache/calcite/avatica/server/HttpServer.java
----------------------------------------------------------------------
diff --git a/avatica-server/src/main/java/org/apache/calcite/avatica/server/HttpServer.java b/avatica-server/src/main/java/org/apache/calcite/avatica/server/HttpServer.java
index 4aa0f24..ccfb629 100644
--- a/avatica-server/src/main/java/org/apache/calcite/avatica/server/HttpServer.java
+++ b/avatica-server/src/main/java/org/apache/calcite/avatica/server/HttpServer.java
@@ -16,6 +16,9 @@
  */
 package org.apache.calcite.avatica.server;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.Handler;
 import org.eclipse.jetty.server.Server;
@@ -28,6 +31,8 @@ import org.eclipse.jetty.util.thread.QueuedThreadPool;
  * Avatica HTTP server.
  */
 public class HttpServer {
+  private static final Log LOG = LogFactory.getLog(HttpServer.class);
+
   private Server server;
   private int port = -1;
   private final Handler handler;
@@ -40,42 +45,45 @@ public class HttpServer {
   public void start() {
     if (server != null) {
       throw new RuntimeException("Server is already started");
-    } else {
-      QueuedThreadPool threadPool = new QueuedThreadPool();
-      threadPool.setDaemon(true);
-      server = new Server(threadPool);
-      server.manage(threadPool);
+    }
+
+    final QueuedThreadPool threadPool = new QueuedThreadPool();
+    threadPool.setDaemon(true);
+    server = new Server(threadPool);
+    server.manage(threadPool);
 
-      final ServerConnector connector = new ServerConnector(server);
-      connector.setIdleTimeout(60 * 1000);
-      connector.setSoLingerTime(-1);
-      connector.setPort(port);
-      server.setConnectors(new Connector[] { connector });
+    final ServerConnector connector = new ServerConnector(server);
+    connector.setIdleTimeout(60 * 1000);
+    connector.setSoLingerTime(-1);
+    connector.setPort(port);
+    server.setConnectors(new Connector[] { connector });
 
-      final HandlerList handlerList = new HandlerList();
-      handlerList.setHandlers(new Handler[] {handler, new DefaultHandler()});
-      server.setHandler(handlerList);
-      try {
-        server.start();
-      } catch (Exception e) {
-        throw new RuntimeException(e);
-      }
-      port = connector.getLocalPort();
+    final HandlerList handlerList = new HandlerList();
+    handlerList.setHandlers(new Handler[] { handler, new DefaultHandler() });
+    server.setHandler(handlerList);
+    try {
+      server.start();
+    } catch (Exception e) {
+      throw new RuntimeException(e);
     }
+    port = connector.getLocalPort();
+
+    LOG.info("Service listening on port " + getPort() + ".");
   }
 
   public void stop() {
     if (server == null) {
       throw new RuntimeException("Server is already stopped");
-    } else {
-      try {
-        final Server server1 = server;
-        port = -1;
-        server = null;
-        server1.stop();
-      } catch (Exception e) {
-        throw new RuntimeException(e);
-      }
+    }
+
+    LOG.info("Service terminating.");
+    try {
+      final Server server1 = server;
+      port = -1;
+      server = null;
+      server1.stop();
+    } catch (Exception e) {
+      throw new RuntimeException(e);
     }
   }
 


[2/2] incubator-calcite git commit: [CALCITE-670] AvaticaPreparedStatement should support execute() and executeUpdate() (Nick Dimiduk)

Posted by jh...@apache.org.
[CALCITE-670] AvaticaPreparedStatement should support execute() and executeUpdate() (Nick Dimiduk)

Close apache/incubator-calcite#74


Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/5f57f789
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/5f57f789
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/5f57f789

Branch: refs/heads/master
Commit: 5f57f78927a38939be56325fa9b6f44693b29cc9
Parents: d4d7ab9
Author: Nick Dimiduk <nd...@gmail.com>
Authored: Mon Apr 6 15:48:54 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon Apr 6 16:17:51 2015 -0700

----------------------------------------------------------------------
 .../apache/calcite/avatica/jdbc/JdbcMeta.java   | 14 +++++--
 .../calcite/avatica/RemoteDriverTest.java       | 42 ++++++++++++++++++++
 .../avatica/AvaticaPreparedStatement.java       |  8 +++-
 3 files changed, 59 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/5f57f789/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
----------------------------------------------------------------------
diff --git a/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java b/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
index 276dd71..3b241de 100644
--- a/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
+++ b/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java
@@ -184,6 +184,9 @@ public class JdbcMeta implements Meta {
    */
   protected static List<ColumnMetaData>
   columns(ResultSetMetaData metaData) throws SQLException {
+    if (metaData == null) {
+      return Collections.emptyList();
+    }
     final List<ColumnMetaData> columns = new ArrayList<>();
     for (int i = 1; i <= metaData.getColumnCount(); i++) {
       final Type javaType =
@@ -805,10 +808,15 @@ public class JdbcMeta implements Meta {
             preparedStatement.setObject(i + 1, o);
           }
         }
-        statementInfo.resultSet = preparedStatement.executeQuery();
+        if (preparedStatement.execute()) {
+          statementInfo.resultSet = preparedStatement.getResultSet();
+        }
+      }
+      if (statementInfo.resultSet == null) {
+        return Frame.EMPTY;
+      } else {
+        return JdbcResultSet.frame(statementInfo.resultSet, offset, fetchMaxRowCount);
       }
-      return JdbcResultSet.frame(statementInfo.resultSet, offset,
-          fetchMaxRowCount);
     } catch (SQLException e) {
       throw propagate(e);
     }

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/5f57f789/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java
----------------------------------------------------------------------
diff --git a/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java b/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java
index f23e2fc..1c0e7d9 100644
--- a/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java
+++ b/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java
@@ -195,6 +195,48 @@ public class RemoteDriverTest {
     connection.close();
   }
 
+  @Test public void testStatementExecuteLocal() throws Exception {
+    checkStatementExecute(ljs(), false);
+  }
+
+  @Test public void testPrepareExecuteLocal() throws Exception {
+    checkStatementExecute(ljs(), true);
+  }
+
+  private void checkStatementExecute(Connection connection, boolean prepare) throws SQLException {
+    final String sql = "select * from (\n"
+        + "  values (1, 'a'), (null, 'b'), (3, 'c')) as t (c1, c2)";
+    final Statement statement;
+    final ResultSet resultSet;
+    final ParameterMetaData parameterMetaData;
+    if (prepare) {
+      final PreparedStatement ps = connection.prepareStatement(sql);
+      statement = ps;
+      parameterMetaData = ps.getParameterMetaData();
+      assertTrue(ps.execute());
+      resultSet = ps.getResultSet();
+    } else {
+      statement = connection.createStatement();
+      parameterMetaData = null;
+      assertTrue(statement.execute(sql));
+      resultSet = statement.getResultSet();
+    }
+    if (parameterMetaData != null) {
+      assertThat(parameterMetaData.getParameterCount(), equalTo(0));
+    }
+    final ResultSetMetaData metaData = resultSet.getMetaData();
+    assertEquals(2, metaData.getColumnCount());
+    assertEquals("C1", metaData.getColumnName(1));
+    assertEquals("C2", metaData.getColumnName(2));
+    assertTrue(resultSet.next());
+    assertTrue(resultSet.next());
+    assertTrue(resultSet.next());
+    assertFalse(resultSet.next());
+    resultSet.close();
+    statement.close();
+    connection.close();
+  }
+
   @Test public void testCreateInsertUpdateDrop() throws Exception {
     final String drop = "drop table TEST_TABLE if exists";
     final String create = "create table TEST_TABLE("

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/5f57f789/avatica/src/main/java/org/apache/calcite/avatica/AvaticaPreparedStatement.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/AvaticaPreparedStatement.java b/avatica/src/main/java/org/apache/calcite/avatica/AvaticaPreparedStatement.java
index 9324db7..f85dcc1 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/AvaticaPreparedStatement.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/AvaticaPreparedStatement.java
@@ -90,7 +90,8 @@ public abstract class AvaticaPreparedStatement
   }
 
   public int executeUpdate() throws SQLException {
-    throw new UnsupportedOperationException(); // TODO:
+    getConnection().executeQueryInternal(this, signature, null);
+    return updateCount;
   }
 
   public void setNull(int parameterIndex, int sqlType) throws SQLException {
@@ -186,7 +187,10 @@ public abstract class AvaticaPreparedStatement
   }
 
   public boolean execute() throws SQLException {
-    throw new UnsupportedOperationException();
+    getConnection().executeQueryInternal(this, signature, null);
+    // Result set is null for DML or DDL.
+    // Result set is closed if user cancelled the query.
+    return openResultSet != null && !openResultSet.isClosed();
   }
 
   public void addBatch() throws SQLException {