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 2016/01/26 21:35:42 UTC

[3/4] calcite git commit: [CALCITE-1067] Test failures due to clashing temporary table names

[CALCITE-1067] Test failures due to clashing temporary table names


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

Branch: refs/heads/master
Commit: 4ec47270b199cef58c39f6bf07209c5fb40875ef
Parents: 82b5860
Author: Julian Hyde <jh...@apache.org>
Authored: Mon Jan 25 18:08:52 2016 -0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Tue Jan 26 11:53:33 2016 -0800

----------------------------------------------------------------------
 .../calcite/avatica/RemoteDriverTest.java       | 23 ++++++++++++--------
 .../calcite/avatica/remote/RemoteMetaTest.java  | 15 ++++++++-----
 .../apache/calcite/avatica/AvaticaUtils.java    | 18 +++++++++++++++
 .../calcite/avatica/test/AvaticaUtilsTest.java  | 22 +++++++++++++++++++
 4 files changed, 63 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/4ec47270/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 7e50dee..228ba8d 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
@@ -346,10 +346,12 @@ public class RemoteDriverTest {
   }
 
   @Test public void testInsertDrop() throws Exception {
-    final String create = "create table if not exists TEST_TABLE2 ("
-        + "id int not null, "
-        + "msg varchar(3) not null)";
-    final String insert = "insert into TEST_TABLE2 values(1, 'foo')";
+    final String t = AvaticaUtils.unique("TEST_TABLE2");
+    final String create =
+        String.format("create table if not exists %s ("
+            + "id int not null, "
+            + "msg varchar(3) not null)", t);
+    final String insert = String.format("insert into %s values(1, 'foo')", t);
     Connection connection = ljs();
     Statement statement = connection.createStatement();
     statement.execute(create);
@@ -540,12 +542,15 @@ public class RemoteDriverTest {
 
   @Test public void testCreateInsertUpdateDrop() throws Exception {
     ConnectionSpec.getDatabaseLock().lock();
-    final String drop = "drop table TEST_TABLE if exists";
-    final String create = "create table TEST_TABLE("
+    final String t = AvaticaUtils.unique("TEST_TABLE");
+    final String drop = String.format("drop table %s if exists", t);
+    final String create = String.format("create table %s("
         + "id int not null, "
-        + "msg varchar(3) not null)";
-    final String insert = "insert into TEST_TABLE values(1, 'foo')";
-    final String update = "update TEST_TABLE set msg='bar' where id=1";
+        + "msg varchar(3) not null)",
+        t);
+    final String insert = String.format("insert into %s values(1, 'foo')", t);
+    final String update =
+        String.format("update %s set msg='bar' where id=1", t);
     try (Connection connection = getLocalConnection();
         Statement statement = connection.createStatement();
         PreparedStatement pstmt = connection.prepareStatement("values 1")) {

http://git-wip-us.apache.org/repos/asf/calcite/blob/4ec47270/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 49a88e7..ff95a45 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
@@ -19,6 +19,7 @@ package org.apache.calcite.avatica.remote;
 import org.apache.calcite.avatica.AvaticaConnection;
 import org.apache.calcite.avatica.AvaticaSqlException;
 import org.apache.calcite.avatica.AvaticaStatement;
+import org.apache.calcite.avatica.AvaticaUtils;
 import org.apache.calcite.avatica.ConnectionPropertiesImpl;
 import org.apache.calcite.avatica.ConnectionSpec;
 import org.apache.calcite.avatica.Meta;
@@ -262,17 +263,19 @@ public class RemoteMetaTest {
   }
 
   @Test public void testRemoteStatementInsert() throws Exception {
-    System.out.println(url);
+    final String t = AvaticaUtils.unique("TEST_TABLE2");
     AvaticaConnection conn = (AvaticaConnection) DriverManager.getConnection(url);
     Statement statement = conn.createStatement();
-    int status = statement.executeUpdate(
-        "create table if not exists "
-        + "TEST_TABLE2 (id int not null, msg varchar(255) not null)");
+    final String create =
+        String.format("create table if not exists %s ("
+            + "  id int not null, msg varchar(255) not null)", t);
+    int status = statement.executeUpdate(create);
     assertEquals(status, 0);
 
     statement = conn.createStatement();
-    status = statement.executeUpdate("insert into TEST_TABLE2 values ("
-        + "'" + RANDOM.nextInt(Integer.MAX_VALUE) + "', '" + UUID.randomUUID() + "')");
+    final String update = String.format("insert into %s values ('%d', '%s')",
+        t, RANDOM.nextInt(Integer.MAX_VALUE), UUID.randomUUID());
+    status = statement.executeUpdate(update);
     assertEquals(status, 1);
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/4ec47270/avatica/src/main/java/org/apache/calcite/avatica/AvaticaUtils.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/AvaticaUtils.java b/avatica/src/main/java/org/apache/calcite/avatica/AvaticaUtils.java
index 6dd076b..9382f87 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/AvaticaUtils.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/AvaticaUtils.java
@@ -27,8 +27,10 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.AbstractList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /** Avatica utilities. */
 public class AvaticaUtils {
@@ -41,6 +43,8 @@ public class AvaticaUtils {
   private static final MethodHandle GET_LARGE_UPDATE_COUNT =
       method(void.class, Statement.class, "getLargeUpdateCount");
 
+  private static final Set<String> UNIQUE_STRINGS = new HashSet<>();
+
   private AvaticaUtils() {}
 
   static {
@@ -277,6 +281,20 @@ public class AvaticaUtils {
     }
     return statement.getUpdateCount();
   }
+
+  /** Generates a string that is unique in the execution of the JVM.
+   * It is used by tests to ensure that they create distinct temporary tables.
+   * The strings are never thrown away, so don't put too much in there!
+   * Thread safe. */
+  public static String unique(String base) {
+    synchronized (UNIQUE_STRINGS) {
+      String s = base;
+      while (!UNIQUE_STRINGS.add(s)) {
+        s = base + "_" + UNIQUE_STRINGS.size();
+      }
+      return s;
+    }
+  }
 }
 
 // End AvaticaUtils.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/4ec47270/avatica/src/test/java/org/apache/calcite/avatica/test/AvaticaUtilsTest.java
----------------------------------------------------------------------
diff --git a/avatica/src/test/java/org/apache/calcite/avatica/test/AvaticaUtilsTest.java b/avatica/src/test/java/org/apache/calcite/avatica/test/AvaticaUtilsTest.java
index ca548a6..850cbfd 100644
--- a/avatica/src/test/java/org/apache/calcite/avatica/test/AvaticaUtilsTest.java
+++ b/avatica/src/test/java/org/apache/calcite/avatica/test/AvaticaUtilsTest.java
@@ -21,6 +21,8 @@ import org.apache.calcite.avatica.AvaticaUtils;
 import org.junit.Test;
 
 import java.math.BigInteger;
+import java.util.LinkedHashSet;
+import java.util.Set;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
@@ -59,6 +61,26 @@ public class AvaticaUtilsTest {
           is("Property 'java.math.BigInteger.ONE' not valid for plugin type java.math.BigInteger"));
     }
   }
+
+  /** Unit test for
+   * {@link org.apache.calcite.avatica.AvaticaUtils#unique(java.lang.String)}. */
+  @Test public void testUnique() {
+    // Below, the "probably" comments indicate the strings that will be
+    // generated the first time you run the test.
+    final Set<String> list = new LinkedHashSet<>();
+    list.add(AvaticaUtils.unique("a")); // probably "a"
+    assertThat(list.size(), is(1));
+    list.add(AvaticaUtils.unique("a")); // probably "a_1"
+    assertThat(list.size(), is(2));
+    list.add(AvaticaUtils.unique("b")); // probably "b"
+    assertThat(list.size(), is(3));
+    list.add(AvaticaUtils.unique("a_1")); // probably "a_1_3"
+    assertThat(list.size(), is(4));
+    list.add(AvaticaUtils.unique("A")); // probably "A"
+    assertThat(list.size(), is(5));
+    list.add(AvaticaUtils.unique("a")); // probably "a_5"
+    assertThat(list.size(), is(6));
+  }
 }
 
 // End AvaticaUtilsTest.java