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/10/22 02:43:26 UTC

[2/3] incubator-calcite git commit: [CALCITE-927] Call finagle for all calls that return ResultSetResponses (Josh Elser)

[CALCITE-927] Call finagle for all calls that return ResultSetResponses (Josh Elser)

Fix ProtobufService, add a MockDriver test.

Close apache/incubator-calcite#157


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

Branch: refs/heads/master
Commit: afd7e2e213d8db6a2a1689bb0e9842833178ff1b
Parents: ee0e824
Author: Josh Elser <el...@apache.org>
Authored: Mon Oct 19 23:00:00 2015 -0400
Committer: Julian Hyde <jh...@apache.org>
Committed: Wed Oct 21 14:26:29 2015 -0700

----------------------------------------------------------------------
 .../calcite/avatica/RemoteDriverMockTest.java    | 13 +++++++++++++
 .../calcite/avatica/remote/RemoteMetaTest.java   | 18 ++++++++++++++++++
 .../calcite/avatica/remote/AbstractService.java  |  3 +++
 .../calcite/avatica/remote/JsonService.java      | 12 ++++++------
 .../calcite/avatica/remote/MockJsonService.java  | 19 +++++++++++++++++++
 .../avatica/remote/MockProtobufService.java      | 11 +++++++++++
 .../calcite/avatica/remote/ProtobufService.java  | 14 +++++++-------
 7 files changed, 77 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/afd7e2e2/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java
----------------------------------------------------------------------
diff --git a/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java b/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java
index 7594391..5c4423d 100644
--- a/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java
+++ b/avatica-server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java
@@ -202,6 +202,19 @@ public class RemoteDriverMockTest {
     connection.close();
   }
 
+  @Test public void testResultSetsFinagled() throws Exception {
+    // These values specified in MockJsonService
+    final String table = "my_table";
+    final long value = 10;
+
+    final Connection connection = getMockConnection();
+    // Not an accurate ResultSet per JDBC, but close enough for testing.
+    ResultSet results = connection.getMetaData().getColumns(null, null, table, null);
+    assertTrue(results.next());
+    assertEquals(table, results.getString(1));
+    assertEquals(value, results.getLong(2));
+  }
+
 }
 
 // End RemoteDriverMockTest.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/afd7e2e2/avatica-server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java
----------------------------------------------------------------------
diff --git a/avatica-server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java b/avatica-server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java
index 2007288..1172335 100644
--- a/avatica-server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java
+++ b/avatica-server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java
@@ -277,6 +277,24 @@ public class RemoteMetaTest {
         + "'" + RANDOM.nextInt(Integer.MAX_VALUE) + "', '" + UUID.randomUUID() + "')");
     assertEquals(status, 1);
   }
+
+  @Test public void testBigints() throws Exception {
+    final String table = "TESTBIGINTS";
+    ConnectionSpec.getDatabaseLock().lock();
+    try (AvaticaConnection conn = (AvaticaConnection) DriverManager.getConnection(url);
+        Statement stmt = conn.createStatement()) {
+      assertFalse(stmt.execute("DROP TABLE IF EXISTS " + table));
+      assertFalse(stmt.execute("CREATE TABLE " + table + " (id BIGINT)"));
+      assertFalse(stmt.execute("INSERT INTO " + table + " values(10)"));
+      ResultSet results = conn.getMetaData().getColumns(null, null, table, null);
+      assertTrue(results.next());
+      assertEquals(table, results.getString(3));
+      // ordinal position
+      assertEquals(1L, results.getLong(17));
+    } finally {
+      ConnectionSpec.getDatabaseLock().unlock();
+    }
+  }
 }
 
 // End RemoteMetaTest.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/afd7e2e2/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractService.java
index 451d923..e88a47c 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractService.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractService.java
@@ -98,6 +98,9 @@ public abstract class AbstractService implements Service {
       assert r.signature == null;
       return r;
     }
+    if (r.signature == null) {
+      return r;
+    }
     final Meta.Signature signature = finagle(r.signature);
     if (signature == r.signature) {
       return r;

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/afd7e2e2/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
index fe82879..b56ed4a 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
@@ -62,7 +62,7 @@ public abstract class JsonService extends AbstractService {
 
   public ResultSetResponse apply(CatalogsRequest request) {
     try {
-      return decode(apply(encode(request)), ResultSetResponse.class);
+      return finagle(decode(apply(encode(request)), ResultSetResponse.class));
     } catch (IOException e) {
       throw handle(e);
     }
@@ -70,7 +70,7 @@ public abstract class JsonService extends AbstractService {
 
   public ResultSetResponse apply(SchemasRequest request) {
     try {
-      return decode(apply(encode(request)), ResultSetResponse.class);
+      return finagle(decode(apply(encode(request)), ResultSetResponse.class));
     } catch (IOException e) {
       throw handle(e);
     }
@@ -78,7 +78,7 @@ public abstract class JsonService extends AbstractService {
 
   public ResultSetResponse apply(TablesRequest request) {
     try {
-      return decode(apply(encode(request)), ResultSetResponse.class);
+      return finagle(decode(apply(encode(request)), ResultSetResponse.class));
     } catch (IOException e) {
       throw handle(e);
     }
@@ -86,7 +86,7 @@ public abstract class JsonService extends AbstractService {
 
   public ResultSetResponse apply(TableTypesRequest request) {
     try {
-      return decode(apply(encode(request)), ResultSetResponse.class);
+      return finagle(decode(apply(encode(request)), ResultSetResponse.class));
     } catch (IOException e) {
       throw handle(e);
     }
@@ -94,7 +94,7 @@ public abstract class JsonService extends AbstractService {
 
   public ResultSetResponse apply(TypeInfoRequest request) {
     try {
-      return decode(apply(encode(request)), ResultSetResponse.class);
+      return finagle(decode(apply(encode(request)), ResultSetResponse.class));
     } catch (IOException e) {
       throw handle(e);
     }
@@ -102,7 +102,7 @@ public abstract class JsonService extends AbstractService {
 
   public ResultSetResponse apply(ColumnsRequest request) {
     try {
-      return decode(apply(encode(request)), ResultSetResponse.class);
+      return finagle(decode(apply(encode(request)), ResultSetResponse.class));
     } catch (IOException e) {
       throw handle(e);
     }

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/afd7e2e2/avatica/src/main/java/org/apache/calcite/avatica/remote/MockJsonService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/MockJsonService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/MockJsonService.java
index 7cc5420..6e278a1 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/MockJsonService.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/MockJsonService.java
@@ -95,6 +95,25 @@ public class MockJsonService extends JsonService {
                 + " \"parameters\": [],\n"
                 + " \"cursorFactory\": {\"style\": \"ARRAY\"}\n"
                 + "}}");
+        map1.put(
+            "{\"request\":\"getColumns\",\"catalog\":null,\"schemaPattern\":null,"
+                + "\"tableNamePattern\":\"my_table\",\"columnNamePattern\":null}",
+            "{\"response\":\"resultSet\",\"connectionId\":\"00000000-0000-0000-0000-000000000000\",\"statementId\":-1,\"ownStatement\":true,"
+                + "\"signature\":{\"columns\":["
+                  + "{\"ordinal\":0,\"autoIncrement\":false,\"caseSensitive\":false,\"searchable\":true,\"currency\":false,\"nullable\":1,\"signed\":false,"
+                    + "\"displaySize\":40,\"label\":\"TABLE_NAME\",\"columnName\":\"TABLE_NAME\",\"schemaName\":\"\",\"precision\":0,\"scale\":0,\"tableName\":\"SYSTEM.TABLE\","
+                    + "\"catalogName\":\"\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false,"
+                    + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"},"
+                  + "{\"ordinal\":1,\"autoIncrement\":false,\"caseSensitive\":false,\"searchable\":true,\"currency\":false,\"nullable\":1,\"signed\":true,"
+                    + "\"displaySize\":40,\"label\":\"ORDINAL_POSITION\",\"columnName\":\"ORDINAL_POSITION\",\"schemaName\":\"\",\"precision\":0,\"scale\":0,"
+                    + "\"tableName\":\"SYSTEM.TABLE\",\"catalogName\":\"\",\"type\":{\"type\":\"scalar\",\"id\":-5,\"name\":\"BIGINT\",\"rep\":\"PRIMITIVE_LONG\"},"
+                    + "\"readOnly\":true,\"writable\":false,\"definitelyWritable\":false,\"columnClassName\":\"java.lang.Long\"}"
+                + "],\"sql\":null,"
+                + "\"parameters\":[],"
+                + "\"cursorFactory\":{\"style\":\"LIST\",\"clazz\":null,\"fieldNames\":null},\"statementType\":null},"
+                + "\"firstFrame\":{\"offset\":0,\"done\":true,"
+                + "\"rows\":[[\"my_table\",10]]"
+                + "},\"updateCount\":-1}");
       } catch (IOException e) {
         throw new RuntimeException(e);
       }

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/afd7e2e2/avatica/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java
index 834cdcb..d031527 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java
@@ -79,6 +79,17 @@ public class MockProtobufService extends ProtobufService {
                 Meta.CursorFactory.ARRAY, Meta.StatementType.SELECT),
             null, -1));
 
+    mappings.put(
+        new ColumnsRequest(null, null, "my_table", null),
+        new ResultSetResponse("00000000-0000-0000-0000-000000000000", -1, true,
+            Meta.Signature.create(
+                Arrays.<ColumnMetaData>asList(
+                    MetaImpl.columnMetaData("TABLE_NAME", 0, String.class),
+                    MetaImpl.columnMetaData("ORDINAL_POSITION", 1, Long.class)), null,
+                Collections.<AvaticaParameter>emptyList(), Meta.CursorFactory.ARRAY, null),
+            Meta.Frame.create(0, true,
+                Arrays.<Object>asList(new Object[] {new Object[]{"my_table", 10}})), -1));
+
     MAPPING = Collections.unmodifiableMap(mappings);
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/afd7e2e2/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufService.java
index 6464753..2ab7fa0 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufService.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufService.java
@@ -31,27 +31,27 @@ public abstract class ProtobufService extends AbstractService {
   public abstract Response _apply(Request request);
 
   @Override public ResultSetResponse apply(CatalogsRequest request) {
-    return (ResultSetResponse) _apply(request);
+    return finagle((ResultSetResponse) _apply(request));
   }
 
   @Override public ResultSetResponse apply(SchemasRequest request) {
-    return (ResultSetResponse) _apply(request);
+    return finagle((ResultSetResponse) _apply(request));
   }
 
   @Override public ResultSetResponse apply(TablesRequest request) {
-    return (ResultSetResponse) _apply(request);
+    return finagle((ResultSetResponse) _apply(request));
   }
 
   @Override public ResultSetResponse apply(TableTypesRequest request) {
-    return (ResultSetResponse) _apply(request);
+    return finagle((ResultSetResponse) _apply(request));
   }
 
   @Override public ResultSetResponse apply(TypeInfoRequest request) {
-    return (ResultSetResponse) _apply(request);
+    return finagle((ResultSetResponse) _apply(request));
   }
 
   @Override public ResultSetResponse apply(ColumnsRequest request) {
-    return (ResultSetResponse) _apply(request);
+    return finagle((ResultSetResponse) _apply(request));
   }
 
   @Override public PrepareResponse apply(PrepareRequest request) {
@@ -87,7 +87,7 @@ public abstract class ProtobufService extends AbstractService {
   }
 
   @Override public ExecuteResponse apply(ExecuteRequest request) {
-    return (ExecuteResponse) _apply(request);
+    return finagle((ExecuteResponse) _apply(request));
   }
 
   /**