Changeset: 596f76dff569 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/596f76dff569
Modified Files:
        src/test/java/org/monetdb/jdbc/ApiTests.java
Branch: default
Log Message:

Make concatenateColumn also prefix and suffix the result

this makes it more straightforward to do substring searches


diffs (181 lines):

diff --git a/src/test/java/org/monetdb/jdbc/ApiTests.java 
b/src/test/java/org/monetdb/jdbc/ApiTests.java
--- a/src/test/java/org/monetdb/jdbc/ApiTests.java
+++ b/src/test/java/org/monetdb/jdbc/ApiTests.java
@@ -114,25 +114,66 @@ public class ApiTests {
                scratchTransactionStarted = true;
        }
 
+       /**
+        * Execute a query on the connection, take the first column of the 
result
+        * and concatenate all values, separated by and prefixed- and suffixed 
with
+        * the given separator, replacing nulls with "<null>".
+        * <p>
+        * For example, the result might look like {@code ",foo,<null>,bar,"}
+        *
+        * @param connection    ResultSet to extract values from
+        * @param sep    string to insert between the values, and before and 
after all values
+        * @param query  query to execute
+        * @return      the concatenated values
+        * @throws SQLException if the query fails
+        */
        private String concatenateColumn(String sep, String query) throws 
SQLException {
                return concatenateColumn(this.conn, sep, query);
        }
 
-       private static String concatenateColumn(Connection c, String sep, 
String query) throws SQLException {
-               try (Statement s = c.createStatement(); ResultSet rs = 
s.executeQuery(query)) {
-                       return concatenateColumn(sep, 1, rs);
+       /**
+        * Execute a query on the connection, take the first column of the 
result
+        * and concatenate all values, separated by and prefixed- and suffixed 
with
+        * the given separator, replacing nulls with "<null>".
+        * <p>
+        * For example, the result might look like {@code ",foo,<null>,bar,"}
+        *
+        * @param connection    ResultSet to extract values from
+        * @param sep    string to insert between the values, and before and 
after all values
+        * @param query  query to execute
+        * @return      the concatenated values
+        * @throws SQLException if the query fails
+        */
+       private static String concatenateColumn(Connection connection, String 
sep, String query) throws SQLException {
+               try (Statement s = connection.createStatement(); ResultSet rs = 
s.executeQuery(query)) {
+                       return concatenateColumn(rs, 1, sep);
                }
        }
 
-       private static String concatenateColumn(String sep, int colnr, 
ResultSet rs) throws SQLException {
+       /**
+        * Take a column of the given result set and concatenate all values,
+        * separated by and prefixed- and suffixed with the given separator,
+        * replacing nulls with "<null>".
+        * <p>
+        * For example, the result might look like {@code ",foo,<null>,bar,"}
+        *
+        * @param rs    ResultSet to extract values from
+        * @param colnr column of the ResultSet to pick
+        * @param sep   string to insert between the values, and before and 
after all values
+        * @return      the concatenated values
+        * @throws SQLException
+        */
+       private static String concatenateColumn(ResultSet rs, int colnr, String 
sep) throws SQLException {
                StringBuilder builder = new StringBuilder();
-               boolean first = true;
                while (rs.next()) {
-                       if (!first)
-                               builder.append(sep);
-                       first = false;
-                       builder.append(rs.getString(colnr));
+                       builder.append(sep).append(rs.getString(colnr));
                }
+               // we now either have "" or something like ",val1,val2"
+               builder.append(sep);
+               // "," or ",val1,val2,"
+               if (builder.length() == 1)
+                       builder.append(sep);
+               // ",," or ",val1,val2,"
                return builder.toString();
        }
 
@@ -323,17 +364,17 @@ public class ApiTests {
                Savepoint savepoint2 = conn.setSavepoint("empty table");
                assertNotNull(savepoint2);
 
-               assertEquals("", concatenateColumn(",", "SELECT i FROM 
test_savepoints"));
+               assertEquals(",,", concatenateColumn(",", "SELECT i FROM 
test_savepoints"));
                stmt.executeUpdate("INSERT INTO test_savepoints VALUES (1), 
(2), (3)");
                Savepoint savepoint3 = conn.setSavepoint("three values");
                assertNotNull(savepoint3);
-               assertEquals("1,2,3", concatenateColumn(",", "SELECT i FROM 
test_savepoints"));
+               assertEquals(",1,2,3,", concatenateColumn(",", "SELECT i FROM 
test_savepoints"));
 
                conn.releaseSavepoint(savepoint3);
-               assertEquals("1,2,3", concatenateColumn(",", "SELECT i FROM 
test_savepoints"));
+               assertEquals(",1,2,3,", concatenateColumn(",", "SELECT i FROM 
test_savepoints"));
 
                conn.rollback(savepoint2);
-               assertEquals("", concatenateColumn(",", "SELECT i FROM 
test_savepoints"));
+               assertEquals(",,", concatenateColumn(",", "SELECT i FROM 
test_savepoints"));
 
                conn.rollback();
                conn.setAutoCommit(true);
@@ -1777,34 +1818,34 @@ public class ApiTests {
                        stmt1.execute("INSERT INTO t1504657 VALUES (1, 
'monetdb')");
                        stmt1.execute("INSERT INTO t1504657 VALUES (2, 
'monet')");
                        stmt1.execute("INSERT INTO t1504657 VALUES (3, 'mon')");
-                       assertEquals("1 2 3", concatenateColumn(conn1, " ", 
"SELECT id FROM t1504657"));
-                       assertEquals("monetdb monet mon", 
concatenateColumn(conn1," ", "SELECT name FROM t1504657"));
-                       assertEquals("1 2 3", concatenateColumn(conn2, " ", 
"SELECT id FROM t1504657"));
-                       assertEquals("monetdb monet mon", 
concatenateColumn(conn2," ", "SELECT name FROM t1504657"));
-                       assertEquals("1 2 3", concatenateColumn(conn3, " ", 
"SELECT id FROM t1504657"));
-                       assertEquals("monetdb monet mon", 
concatenateColumn(conn3," ", "SELECT name FROM t1504657"));
+                       assertEquals(" 1 2 3 ", concatenateColumn(conn1, " ", 
"SELECT id FROM t1504657"));
+                       assertEquals(" monetdb monet mon ", 
concatenateColumn(conn1," ", "SELECT name FROM t1504657"));
+                       assertEquals(" 1 2 3 ", concatenateColumn(conn2, " ", 
"SELECT id FROM t1504657"));
+                       assertEquals(" monetdb monet mon ", 
concatenateColumn(conn2," ", "SELECT name FROM t1504657"));
+                       assertEquals(" 1 2 3 ", concatenateColumn(conn3, " ", 
"SELECT id FROM t1504657"));
+                       assertEquals(" monetdb monet mon ", 
concatenateColumn(conn3," ", "SELECT name FROM t1504657"));
 
                        // Insertion with concurrent clients
                        stmt2.execute("INSERT INTO t1504657 VALUES (4, 
'monetdb')");
                        stmt2.execute("INSERT INTO t1504657 VALUES (5, 
'monet')");
                        stmt2.execute("INSERT INTO t1504657 VALUES (6, 'mon')");
-                       assertEquals("1 2 3 4 5 6", concatenateColumn(conn1, " 
", "SELECT id FROM t1504657"));
-                       assertEquals("monetdb monet mon monetdb monet mon", 
concatenateColumn(conn1," ", "SELECT name FROM t1504657"));
-                       assertEquals("1 2 3 4 5 6", concatenateColumn(conn2, " 
", "SELECT id FROM t1504657"));
-                       assertEquals("monetdb monet mon monetdb monet mon", 
concatenateColumn(conn2," ", "SELECT name FROM t1504657"));
-                       assertEquals("1 2 3 4 5 6", concatenateColumn(conn3, " 
", "SELECT id FROM t1504657"));
-                       assertEquals("monetdb monet mon monetdb monet mon", 
concatenateColumn(conn3," ", "SELECT name FROM t1504657"));
+                       assertEquals(" 1 2 3 4 5 6 ", concatenateColumn(conn1, 
" ", "SELECT id FROM t1504657"));
+                       assertEquals(" monetdb monet mon monetdb monet mon ", 
concatenateColumn(conn1," ", "SELECT name FROM t1504657"));
+                       assertEquals(" 1 2 3 4 5 6 ", concatenateColumn(conn2, 
" ", "SELECT id FROM t1504657"));
+                       assertEquals(" monetdb monet mon monetdb monet mon ", 
concatenateColumn(conn2," ", "SELECT name FROM t1504657"));
+                       assertEquals(" 1 2 3 4 5 6 ", concatenateColumn(conn3, 
" ", "SELECT id FROM t1504657"));
+                       assertEquals(" monetdb monet mon monetdb monet mon ", 
concatenateColumn(conn3," ", "SELECT name FROM t1504657"));
 
                        // And statement 3
                        stmt3.execute("INSERT INTO t1504657 VALUES (7, 
'monetdb')");
                        stmt3.execute("INSERT INTO t1504657 VALUES (8, 
'monet')");
                        stmt3.execute("INSERT INTO t1504657 VALUES (9, 'mon')");
-                       assertEquals("1 2 3 4 5 6 7 8 9", 
concatenateColumn(conn1, " ", "SELECT id FROM t1504657"));
-                       assertEquals("monetdb monet mon monetdb monet mon 
monetdb monet mon", concatenateColumn(conn1," ", "SELECT name FROM t1504657"));
-                       assertEquals("1 2 3 4 5 6 7 8 9", 
concatenateColumn(conn2, " ", "SELECT id FROM t1504657"));
-                       assertEquals("monetdb monet mon monetdb monet mon 
monetdb monet mon", concatenateColumn(conn2," ", "SELECT name FROM t1504657"));
-                       assertEquals("1 2 3 4 5 6 7 8 9", 
concatenateColumn(conn3, " ", "SELECT id FROM t1504657"));
-                       assertEquals("monetdb monet mon monetdb monet mon 
monetdb monet mon", concatenateColumn(conn3," ", "SELECT name FROM t1504657"));
+                       assertEquals(" 1 2 3 4 5 6 7 8 9 ", 
concatenateColumn(conn1, " ", "SELECT id FROM t1504657"));
+                       assertEquals(" monetdb monet mon monetdb monet mon 
monetdb monet mon ", concatenateColumn(conn1," ", "SELECT name FROM t1504657"));
+                       assertEquals(" 1 2 3 4 5 6 7 8 9 ", 
concatenateColumn(conn2, " ", "SELECT id FROM t1504657"));
+                       assertEquals(" monetdb monet mon monetdb monet mon 
monetdb monet mon ", concatenateColumn(conn2," ", "SELECT name FROM t1504657"));
+                       assertEquals(" 1 2 3 4 5 6 7 8 9 ", 
concatenateColumn(conn3, " ", "SELECT id FROM t1504657"));
+                       assertEquals(" monetdb monet mon monetdb monet mon 
monetdb monet mon ", concatenateColumn(conn3," ", "SELECT name FROM t1504657"));
                }
        }
 
@@ -1834,8 +1875,8 @@ public class ApiTests {
                        conn2.setAutoCommit(true);
                        stmt2.execute("INSERT INTO tconc_seq(who) VALUES 
('client2')");
 
-                       assertEquals("1client1 3client1 4client2", 
concatenateColumn(conn1, " ", "SELECT id || who FROM tconc_seq ORDER BY id"));
-                       assertEquals("1client1 3client1 4client2", 
concatenateColumn(conn1, " ", "SELECT id || who FROM tconc_seq ORDER BY id"));
+                       assertEquals(" 1client1 3client1 4client2 ", 
concatenateColumn(conn1, " ", "SELECT id || who FROM tconc_seq ORDER BY id"));
+                       assertEquals(" 1client1 3client1 4client2 ", 
concatenateColumn(conn1, " ", "SELECT id || who FROM tconc_seq ORDER BY id"));
                }
        }
 
@@ -1870,12 +1911,12 @@ public class ApiTests {
                                assertTrue(minor >= 0, "database minor version 
= " + minor);
 
                                try (ResultSet rs = dbmd.getTables(null, "tmp", 
null, null)) {
-                                       String tmpTableNames = 
concatenateColumn(" ", 3, rs);
-                                       assertContains("_columns _tables", 
tmpTableNames);
+                                       String tmpTableNames = 
concatenateColumn(rs, 3, " ");
+                                       assertContains(" _columns _tables ", 
tmpTableNames);
                                }
 
                                try (ResultSet rs = dbmd.getTableTypes()) {
-                                       String tableTypes = "," + 
concatenateColumn(",", 1, rs) + ",";
+                                       String tableTypes = 
concatenateColumn(rs, 1, ",");
                                        assertContains(",TABLE,", tableTypes);
                                        assertContains(",VIEW,", tableTypes);
                                        assertContains(",MERGE TABLE,", 
tableTypes);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to