Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ static Future<OracleConnection> connect(Vertx vertx, String connectionUri) {
return connect(vertx, fromUri(connectionUri));
}

Object createArray(String typeName, Object elements);

/**
* {@inheritDoc}
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,9 @@ public static Future<OracleConnection> connect(Vertx vertx, OracleConnectOptions
return impl;
});
}

@Override
public Object createArray(String typeName, Object elements) {
return ((OracleJdbcConnection) conn.unwrap()).createArray(typeName, elements);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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());
}
}
11 changes: 11 additions & 0 deletions vertx-oracle-client/src/test/resources/tck/import.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Loading