diff --git a/sql-clients/cli/build.gradle b/sql-clients/cli/build.gradle index c98ba18f1b8..333d271d495 100644 --- a/sql-clients/cli/build.gradle +++ b/sql-clients/cli/build.gradle @@ -1,15 +1,13 @@ apply plugin: 'elasticsearch.build' apply plugin: 'application' -project.compactProfile = 'full' - dependencies { compile "org.jline:jline:3.3.0" - compile project(':x-pack-elasticsearch:sql-clients:net-client') compile project(':x-pack-elasticsearch:sql-clients:cli-proto') testCompile project(":x-pack-elasticsearch:transport-client") + testCompile project(path: ':x-pack-elasticsearch:plugin', configuration: 'testArtifacts') testCompile project(':x-pack-elasticsearch:sql-clients:test-utils') } @@ -24,3 +22,6 @@ mainClassName = "org.elasticsearch.sql.console.SqlConsole" run { classpath = sourceSets.test.runtimeClasspath } + +// Needed so we can launch graphviz if it is installed +project.compactProfile = 'full' diff --git a/sql-clients/cli/src/test/java/org/elasticsearch/xpack/sql/cli/integration/server/CliHttpServer.java b/sql-clients/cli/src/test/java/org/elasticsearch/xpack/sql/cli/integration/server/CliHttpServer.java index bf0f35dc739..290afdcb9d7 100644 --- a/sql-clients/cli/src/test/java/org/elasticsearch/xpack/sql/cli/integration/server/CliHttpServer.java +++ b/sql-clients/cli/src/test/java/org/elasticsearch/xpack/sql/cli/integration/server/CliHttpServer.java @@ -6,9 +6,10 @@ package org.elasticsearch.xpack.sql.cli.integration.server; import org.elasticsearch.client.Client; +import org.elasticsearch.xpack.sql.cli.net.protocol.Response; import org.elasticsearch.xpack.sql.test.server.ProtoHttpServer; -public class CliHttpServer extends ProtoHttpServer { +public class CliHttpServer extends ProtoHttpServer { public CliHttpServer(Client client) { super(client, new CliProtoHandler(client), "/cli/", "sql/"); diff --git a/sql-clients/jdbc/build.gradle b/sql-clients/jdbc/build.gradle index 5f3d70df34a..0cc87ca127d 100644 --- a/sql-clients/jdbc/build.gradle +++ b/sql-clients/jdbc/build.gradle @@ -37,6 +37,7 @@ dependencies { compile project(':x-pack-elasticsearch:sql-clients:jdbc-proto') testCompile project(":x-pack-elasticsearch:transport-client") + testCompile project(path: ':x-pack-elasticsearch:plugin', configuration: 'testArtifacts') testCompile project(':x-pack-elasticsearch:sql-clients:test-utils') testRuntime "com.h2database:h2:1.4.194" diff --git a/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/net/protocol/ProtoTest.java b/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/net/protocol/ProtoTest.java index 3654f08f55e..4702574b271 100644 --- a/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/net/protocol/ProtoTest.java +++ b/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/net/protocol/ProtoTest.java @@ -135,7 +135,7 @@ public class ProtoTest { @Test public void testBasicJdbc() throws Exception { - j.con(c -> { + j.consume(c -> { assertThat(c.isClosed(), is(false)); assertThat(c.isReadOnly(), is(true)); }); @@ -145,7 +145,7 @@ public class ProtoTest { @Test public void testBasicSelect() throws Exception { - j.con(c -> { + j.consume(c -> { assertThat(c.isClosed(), is(false)); assertThat(c.isReadOnly(), is(true)); }); @@ -155,7 +155,7 @@ public class ProtoTest { @Test(expected = RuntimeException.class) public void testBasicDemo() throws Exception { - j.con(c -> { + j.consume(c -> { assertThat(c.isClosed(), is(false)); assertThat(c.isReadOnly(), is(true)); }); @@ -166,7 +166,7 @@ public class ProtoTest { @Test public void testMetadataGetProcedures() throws Exception { - j.con(c -> { + j.consume(c -> { DatabaseMetaData metaData = c.getMetaData(); ResultSet results = metaData.getProcedures(null, null, null); assertThat(results, is(notNullValue())); @@ -177,7 +177,7 @@ public class ProtoTest { @Test public void testMetadataGetProcedureColumns() throws Exception { - j.con(c -> { + j.consume(c -> { DatabaseMetaData metaData = c.getMetaData(); ResultSet results = metaData.getProcedureColumns(null, null, null, null); assertThat(results, is(notNullValue())); @@ -188,7 +188,7 @@ public class ProtoTest { @Test public void testMetadataGetTables() throws Exception { - j.con(c -> { + j.consume(c -> { DatabaseMetaData metaData = c.getMetaData(); ResultSet results = metaData.getTables("elasticsearch", "", "%", null); assertThat(results, is(notNullValue())); @@ -199,7 +199,7 @@ public class ProtoTest { @Test(expected = RuntimeException.class) public void testMetadataColumns() throws Exception { - j.con(c -> { + j.consume(c -> { DatabaseMetaData metaData = c.getMetaData(); ResultSet results = metaData.getColumns("elasticsearch", "", "dep.dep", "%"); assertThat(results, is(notNullValue())); diff --git a/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/server/JdbcHttpServer.java b/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/server/JdbcHttpServer.java index 22abdddfe56..90329fd8e9f 100644 --- a/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/server/JdbcHttpServer.java +++ b/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/server/JdbcHttpServer.java @@ -6,9 +6,10 @@ package org.elasticsearch.xpack.sql.jdbc.integration.server; import org.elasticsearch.client.Client; +import org.elasticsearch.xpack.sql.jdbc.net.protocol.Response; import org.elasticsearch.xpack.sql.test.server.ProtoHttpServer; -public class JdbcHttpServer extends ProtoHttpServer { +public class JdbcHttpServer extends ProtoHttpServer { public JdbcHttpServer(Client client) { super(client, new SqlProtoHandler(client), "/jdbc/", "sql/"); diff --git a/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/util/H2.java b/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/util/H2.java index aa7b6a4afe3..343e17ffb22 100644 --- a/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/util/H2.java +++ b/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/util/H2.java @@ -5,19 +5,25 @@ */ package org.elasticsearch.xpack.sql.jdbc.integration.util; +import org.elasticsearch.xpack.sql.jdbc.integration.util.JdbcTemplate.JdbcSupplier; +import org.junit.rules.ExternalResource; + import java.sql.Connection; +import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; -import org.elasticsearch.xpack.sql.jdbc.integration.util.JdbcTemplate.JdbcSupplier; -import org.h2.Driver; -import org.junit.rules.ExternalResource; - public class H2 extends ExternalResource implements JdbcSupplier { + static { + try { + Class.forName("org.h2.Driver"); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } private final String url; private final Properties DEFAULT_PROPS = new Properties(); - private final Driver driver = Driver.load(); private Connection keepAlive; public H2() { @@ -48,6 +54,6 @@ public class H2 extends ExternalResource implements JdbcSupplier { } public Connection jdbc() throws SQLException { - return driver.connect(url, DEFAULT_PROPS); + return DriverManager.getConnection(url, DEFAULT_PROPS); } } \ No newline at end of file diff --git a/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/util/JdbcTemplate.java b/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/util/JdbcTemplate.java index 384b1330c51..7d9c036e415 100644 --- a/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/util/JdbcTemplate.java +++ b/sql-clients/jdbc/src/test/java/org/elasticsearch/xpack/sql/jdbc/integration/util/JdbcTemplate.java @@ -5,6 +5,9 @@ */ package org.elasticsearch.xpack.sql.jdbc.integration.util; +import org.elasticsearch.common.CheckedConsumer; +import org.elasticsearch.common.CheckedFunction; + import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -15,13 +18,8 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.function.BiFunction; -import java.util.function.Consumer; -import java.util.function.Function; import java.util.function.Supplier; -import static java.lang.String.format; - // poor's man JdbcTemplate public class JdbcTemplate { @@ -45,52 +43,9 @@ public class JdbcTemplate { T jdbc() throws SQLException; } - public static interface JdbcConsumer extends Consumer { - - @Override - default void accept(T t) { - try { - jdbc(t); - } catch (SQLException ex) { - throw new RuntimeException(ex); - } - } - - void jdbc(T t) throws SQLException; - } - - public static interface JdbcFunction extends Function { - - @Override - default R apply(T t) { - try { - return jdbc(t); - } catch (SQLException ex) { - throw new RuntimeException(ex); - } - } - - R jdbc(T t) throws SQLException; - } - - public static interface JdbcBiFunction extends BiFunction { - - @Override - default R apply(T t, U u) { - try { - return jdbc(t, u); - } catch (SQLException ex) { - throw new RuntimeException(ex); - } - } - - R jdbc(T t, U u) throws SQLException; - } - - private static final int MAX_WIDTH = 20; - public static JdbcFunction resultSetToConsole() { + public static CheckedFunction resultSetToConsole() { return rs -> { ResultSetMetaData metaData = rs.getMetaData(); StringBuilder sb = new StringBuilder(); @@ -145,20 +100,20 @@ public class JdbcTemplate { return buffer; } - public void con(JdbcConsumer c) throws Exception { + public void consume(CheckedConsumer c) throws Exception { try (Connection con = conn.get()) { c.accept(con); } } - public T con(JdbcFunction c) throws Exception { + public T map(CheckedFunction c) throws Exception { try (Connection con = conn.get()) { return c.apply(con); } } - public T query(String q, JdbcFunction f) throws Exception { - return con(c -> { + public T query(String q, CheckedFunction f) throws Exception { + return map(c -> { try (Statement st = c.createStatement(); ResultSet rset = st.executeQuery(q)) { return f.apply(rset); @@ -175,7 +130,7 @@ public class JdbcTemplate { } public void execute(String query) throws Exception { - con(c -> { + map(c -> { try (Statement st = c.createStatement()) { st.execute(query); return null; @@ -183,15 +138,16 @@ public class JdbcTemplate { }); } - public T execute(String query, JdbcFunction callback) throws Exception { - return con(c -> { + public T execute(String query, CheckedFunction callback) throws Exception { + return map(c -> { try (PreparedStatement ps = c.prepareStatement(query)) { return callback.apply(ps); } }); } - public T execute(String query, JdbcConsumer prepare, JdbcFunction mapper) throws Exception { + public T execute(String query, CheckedConsumer prepare, + CheckedFunction mapper) throws Exception { return execute(query, ps -> { prepare.accept(ps); try (ResultSet rs = ps.executeQuery()) { @@ -200,8 +156,8 @@ public class JdbcTemplate { }); } - public T query(String q, JdbcFunction mapper, Object... args) throws Exception { - JdbcConsumer p = ps -> { + public T query(String q, CheckedFunction mapper, Object... args) throws Exception { + CheckedConsumer p = ps -> { if (args != null) { for (int i = 0; i < args.length; i++) { ps.setObject(i + 1, args[i]); @@ -216,8 +172,9 @@ public class JdbcTemplate { return query(q, singleResult(type), args); } - public List queryForList(String q, JdbcBiFunction mapper, Object... args) throws Exception { - JdbcFunction> f = rs -> { + public List queryForList(String q, CheckedBiFunction mapper, Object... args) + throws Exception { + CheckedFunction, SQLException> f = rs -> { List list = new ArrayList<>(); while (rs.next()) { list.add(mapper.apply(rs, rs.getRow())); @@ -229,7 +186,7 @@ public class JdbcTemplate { } public List queryForList(String q, Class type, Object... args) throws Exception { - JdbcBiFunction mapper = (rs, i) -> { + CheckedBiFunction mapper = (rs, i) -> { if (i != 1) { throw new IllegalArgumentException("Expected exactly one column..."); } @@ -238,7 +195,7 @@ public class JdbcTemplate { return queryForList(q, mapper, args); } - public static JdbcFunction singleResult(Class type) { + public static CheckedFunction singleResult(Class type) { return rs -> { if (rs.next()) { T result = convertObject(rs.getObject(1), type); @@ -246,7 +203,7 @@ public class JdbcTemplate { return result; } } - throw new IllegalArgumentException(format("Expected exactly one column; discovered %s",rs.getMetaData().getColumnCount())); + throw new IllegalArgumentException("Expected exactly one column; discovered [" + rs.getMetaData().getColumnCount() + "]"); }; } @@ -290,4 +247,9 @@ public class JdbcTemplate { return map; }, args); } + + @FunctionalInterface + public interface CheckedBiFunction { + R apply(T t, U u) throws E; + } } \ No newline at end of file diff --git a/sql-clients/test-utils/src/main/java/org/elasticsearch/xpack/sql/test/server/ProtoHandler.java b/sql-clients/test-utils/src/main/java/org/elasticsearch/xpack/sql/test/server/ProtoHandler.java index 41c42dbd655..c73a671fe34 100644 --- a/sql-clients/test-utils/src/main/java/org/elasticsearch/xpack/sql/test/server/ProtoHandler.java +++ b/sql-clients/test-utils/src/main/java/org/elasticsearch/xpack/sql/test/server/ProtoHandler.java @@ -83,7 +83,7 @@ public abstract class ProtoHandler implements HttpHandler, AutoCloseable { } @Override - public void close() throws Exception { + public void close() { // no-op } } \ No newline at end of file diff --git a/sql-clients/test-utils/src/main/java/org/elasticsearch/xpack/sql/test/server/ProtoHttpServer.java b/sql-clients/test-utils/src/main/java/org/elasticsearch/xpack/sql/test/server/ProtoHttpServer.java index 3af8435d1c5..2a95e42dfd2 100644 --- a/sql-clients/test-utils/src/main/java/org/elasticsearch/xpack/sql/test/server/ProtoHttpServer.java +++ b/sql-clients/test-utils/src/main/java/org/elasticsearch/xpack/sql/test/server/ProtoHttpServer.java @@ -15,14 +15,14 @@ import com.sun.net.httpserver.HttpServer; import static java.lang.String.format; -public abstract class ProtoHttpServer { +public abstract class ProtoHttpServer { - private final ProtoHandler handler; + private final ProtoHandler handler; private final String defaultPrefix, protoPrefix; private final Client client; private HttpServer server; - public ProtoHttpServer(Client client, ProtoHandler handler, String defaultPrefix, String protoPrefix) { + public ProtoHttpServer(Client client, ProtoHandler handler, String defaultPrefix, String protoPrefix) { this.client = client; this.handler = handler; this.defaultPrefix = defaultPrefix;