diff --git a/vertx-oracle-client/src/main/java/io/vertx/oracleclient/OracleConnection.java b/vertx-oracle-client/src/main/java/io/vertx/oracleclient/OracleConnection.java index 6b4d0cbdc..eaa1107eb 100644 --- a/vertx-oracle-client/src/main/java/io/vertx/oracleclient/OracleConnection.java +++ b/vertx-oracle-client/src/main/java/io/vertx/oracleclient/OracleConnection.java @@ -45,6 +45,8 @@ static Future connect(Vertx vertx, String connectionUri) { return connect(vertx, fromUri(connectionUri)); } + Object createArray(String typeName, Object elements); + /** * {@inheritDoc} */ diff --git a/vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleConnectionImpl.java b/vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleConnectionImpl.java index 6e6286e7e..520fa243b 100644 --- a/vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleConnectionImpl.java +++ b/vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleConnectionImpl.java @@ -37,4 +37,9 @@ public static Future connect(Vertx vertx, OracleConnectOptions return impl; }); } + + @Override + public Object createArray(String typeName, Object elements) { + return ((OracleJdbcConnection) conn.unwrap()).createArray(typeName, elements); + } } diff --git a/vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleJdbcConnection.java b/vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleJdbcConnection.java index e0790416b..02119b6dd 100644 --- a/vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleJdbcConnection.java +++ b/vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleJdbcConnection.java @@ -64,6 +64,14 @@ public OracleJdbcConnection(ContextInternal ctx, ClientMetrics metrics, OracleCo this.metadata = metadata; } + public Object createArray(String typeName, Object elements) { + try { + return connection.createARRAY(typeName, elements); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + @Override public ClientMetrics metrics() { return metrics; diff --git a/vertx-oracle-client/src/test/java/tests/oracleclient/OracleArrayTest.java b/vertx-oracle-client/src/test/java/tests/oracleclient/OracleArrayTest.java new file mode 100644 index 000000000..a3f2d0930 --- /dev/null +++ b/vertx-oracle-client/src/test/java/tests/oracleclient/OracleArrayTest.java @@ -0,0 +1,45 @@ +package tests.oracleclient; + +import io.vertx.ext.unit.TestContext; +import io.vertx.ext.unit.junit.VertxUnitRunner; +import io.vertx.oracleclient.OracleBuilder; +import io.vertx.oracleclient.OracleConnection; +import io.vertx.sqlclient.Pool; +import io.vertx.sqlclient.Tuple; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; +import tests.oracleclient.junit.OracleRule; + +@RunWith(VertxUnitRunner.class) +public class OracleArrayTest extends OracleTestBase { + + @ClassRule + public static OracleRule oracle = OracleRule.SHARED_INSTANCE; + + Pool pool; + + @Before + public void setUp() throws Exception { + pool = OracleBuilder.pool(builder -> builder + .connectingTo(oracle.options()) + .using(vertx)); + } + + @Test + public void testStringArray(TestContext ctx) { + String[] elements = {"str1", "str2", "str3"}; + pool.withConnection(conn -> { + Object stringsArray = ((OracleConnection) conn).createArray("STRING_ARRAY", elements); + String insertSql = "INSERT INTO test_collections( id, string_array_element) VALUES (?, ?)"; + return conn.preparedQuery(insertSql).execute(Tuple.of(1, stringsArray)); + }).onComplete(ctx.asyncAssertSuccess()); + } + + @After + public void tearDown(TestContext ctx) throws Exception { + pool.close().onComplete(ctx.asyncAssertSuccess()); + } +} diff --git a/vertx-oracle-client/src/test/resources/tck/import.sql b/vertx-oracle-client/src/test/resources/tck/import.sql index 406cb38fa..58f73c07d 100644 --- a/vertx-oracle-client/src/test/resources/tck/import.sql +++ b/vertx-oracle-client/src/test/resources/tck/import.sql @@ -170,5 +170,16 @@ CREATE TABLE passenger address_id NUMBER ); + +CREATE OR REPLACE TYPE STRING_ARRAY AS VARYING ARRAY(127) of VARCHAR2(255 char); +/ + +CREATE TABLE test_collections +( + id number(10, 0), + string_array_element STRING_ARRAY, + primary key (id) +); + -- Don't forget to commit... COMMIT;