Skip to content

Commit d1558ec

Browse files
committed
Oracle collections support
Closes #1392 Signed-off-by: Thomas Segismont <tsegismont@gmail.com>
1 parent 43efa91 commit d1558ec

5 files changed

Lines changed: 71 additions & 0 deletions

File tree

vertx-oracle-client/src/main/java/io/vertx/oracleclient/OracleConnection.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ static Future<OracleConnection> connect(Vertx vertx, String connectionUri) {
4545
return connect(vertx, fromUri(connectionUri));
4646
}
4747

48+
Object createArray(String typeName, Object elements);
49+
4850
/**
4951
* {@inheritDoc}
5052
*/

vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleConnectionImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,9 @@ public static Future<OracleConnection> connect(Vertx vertx, OracleConnectOptions
3737
return impl;
3838
});
3939
}
40+
41+
@Override
42+
public Object createArray(String typeName, Object elements) {
43+
return ((OracleJdbcConnection) conn.unwrap()).createArray(typeName, elements);
44+
}
4045
}

vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleJdbcConnection.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ public OracleJdbcConnection(ContextInternal ctx, ClientMetrics metrics, OracleCo
6464
this.metadata = metadata;
6565
}
6666

67+
public Object createArray(String typeName, Object elements) {
68+
try {
69+
return connection.createARRAY(typeName, elements);
70+
} catch (SQLException e) {
71+
throw new RuntimeException(e);
72+
}
73+
}
74+
6775
@Override
6876
public ClientMetrics metrics() {
6977
return metrics;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package tests.oracleclient;
2+
3+
import io.vertx.ext.unit.TestContext;
4+
import io.vertx.ext.unit.junit.VertxUnitRunner;
5+
import io.vertx.oracleclient.OracleBuilder;
6+
import io.vertx.oracleclient.OracleConnection;
7+
import io.vertx.sqlclient.Pool;
8+
import io.vertx.sqlclient.Tuple;
9+
import org.junit.After;
10+
import org.junit.Before;
11+
import org.junit.ClassRule;
12+
import org.junit.Test;
13+
import org.junit.runner.RunWith;
14+
import tests.oracleclient.junit.OracleRule;
15+
16+
@RunWith(VertxUnitRunner.class)
17+
public class OracleArrayTest extends OracleTestBase {
18+
19+
@ClassRule
20+
public static OracleRule oracle = OracleRule.SHARED_INSTANCE;
21+
22+
Pool pool;
23+
24+
@Before
25+
public void setUp() throws Exception {
26+
pool = OracleBuilder.pool(builder -> builder
27+
.connectingTo(oracle.options())
28+
.using(vertx));
29+
}
30+
31+
@Test
32+
public void testStringArray(TestContext ctx) {
33+
String[] elements = {"str1", "str2", "str3"};
34+
pool.withConnection(conn -> {
35+
Object stringsArray = ((OracleConnection) conn).createArray("STRING_ARRAY", elements);
36+
String insertSql = "INSERT INTO test_collections( id, string_array_element) VALUES (?, ?)";
37+
return conn.preparedQuery(insertSql).execute(Tuple.of(1, stringsArray));
38+
}).onComplete(ctx.asyncAssertSuccess());
39+
}
40+
41+
@After
42+
public void tearDown(TestContext ctx) throws Exception {
43+
pool.close().onComplete(ctx.asyncAssertSuccess());
44+
}
45+
}

vertx-oracle-client/src/test/resources/tck/import.sql

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,5 +170,16 @@ CREATE TABLE passenger
170170
address_id NUMBER
171171
);
172172

173+
174+
CREATE OR REPLACE TYPE STRING_ARRAY AS VARYING ARRAY(127) of VARCHAR2(255 char);
175+
/
176+
177+
CREATE TABLE test_collections
178+
(
179+
id number(10, 0),
180+
string_array_element STRING_ARRAY,
181+
primary key (id)
182+
);
183+
173184
-- Don't forget to commit...
174185
COMMIT;

0 commit comments

Comments
 (0)