Skip to content

Commit f8e04ae

Browse files
committed
Merge pull request #37 from vert-x3/date-time-fix
Fix date time and a bit refactoring
2 parents 61ec4c5 + 3c7b243 commit f8e04ae

File tree

6 files changed

+103
-71
lines changed

6 files changed

+103
-71
lines changed

src/main/java/io/vertx/ext/asyncsql/impl/AsyncSQLConnectionImpl.java

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import io.vertx.ext.sql.ResultSet;
2828
import io.vertx.ext.sql.SQLConnection;
2929
import io.vertx.ext.sql.UpdateResult;
30+
import org.joda.time.DateTime;
3031
import org.joda.time.LocalDate;
3132
import org.joda.time.LocalDateTime;
3233
import scala.Option;
@@ -92,10 +93,10 @@ public SQLConnection execute(String sql, Handler<AsyncResult<Void>> handler) {
9293
beginTransactionIfNeeded(v -> {
9394
final scala.concurrent.Future<QueryResult> future = connection.sendQuery(sql);
9495
future.onComplete(ScalaUtils.<QueryResult>toFunction1(ar -> {
95-
if (ar.failed()) {
96-
handler.handle(Future.failedFuture(ar.cause()));
97-
} else {
96+
if (ar.succeeded()) {
9897
handler.handle(Future.succeededFuture());
98+
} else {
99+
handler.handle(Future.failedFuture(ar.cause()));
99100
}
100101
}), executionContext);
101102
});
@@ -107,14 +108,7 @@ public SQLConnection execute(String sql, Handler<AsyncResult<Void>> handler) {
107108
public SQLConnection query(String sql, Handler<AsyncResult<ResultSet>> handler) {
108109
beginTransactionIfNeeded(v -> {
109110
final Future<QueryResult> future = ScalaUtils.scalaToVertx(connection.sendQuery(sql), executionContext);
110-
future.setHandler(ar -> {
111-
if (ar.succeeded()) {
112-
handler.handle(Future.succeededFuture(queryResultToResultSet(ar.result())));
113-
} else {
114-
handler.handle(Future.failedFuture(ar.cause()));
115-
}
116-
117-
});
111+
future.setHandler(handleAsyncQueryResultToResultSet(handler));
118112
});
119113

120114
return this;
@@ -125,14 +119,7 @@ public SQLConnection queryWithParams(String sql, JsonArray params, Handler<Async
125119
beginTransactionIfNeeded(v -> {
126120
final scala.concurrent.Future<QueryResult> future = connection.sendPreparedStatement(sql,
127121
ScalaUtils.toScalaList(params.getList()));
128-
future.onComplete(ScalaUtils.<QueryResult>toFunction1(ar -> {
129-
if (ar.succeeded()) {
130-
handler.handle(Future.succeededFuture(queryResultToResultSet(ar.result())));
131-
} else {
132-
handler.handle(Future.failedFuture(ar.cause()));
133-
}
134-
135-
}), executionContext);
122+
future.onComplete(ScalaUtils.toFunction1(handleAsyncQueryResultToResultSet(handler)), executionContext);
136123
});
137124

138125
return this;
@@ -143,10 +130,14 @@ public SQLConnection update(String sql, Handler<AsyncResult<UpdateResult>> handl
143130
beginTransactionIfNeeded(v -> {
144131
final scala.concurrent.Future<QueryResult> future = connection.sendQuery(sql);
145132
future.onComplete(ScalaUtils.<QueryResult>toFunction1(ar -> {
146-
if (ar.failed()) {
147-
handler.handle(Future.failedFuture(ar.cause()));
133+
if (ar.succeeded()) {
134+
try {
135+
handler.handle(Future.succeededFuture(queryResultToUpdateResult(ar.result())));
136+
} catch (Throwable e) {
137+
handler.handle(Future.failedFuture(e));
138+
}
148139
} else {
149-
handler.handle(Future.succeededFuture(queryResultToUpdateResult(ar.result())));
140+
handler.handle(Future.failedFuture(ar.cause()));
150141
}
151142
}), executionContext);
152143
});
@@ -160,10 +151,10 @@ public SQLConnection updateWithParams(String sql, JsonArray params, Handler<Asyn
160151
final scala.concurrent.Future<QueryResult> future = connection.sendPreparedStatement(sql,
161152
ScalaUtils.toScalaList(params.getList()));
162153
future.onComplete(ScalaUtils.<QueryResult>toFunction1(ar -> {
163-
if (ar.failed()) {
164-
handler.handle(Future.failedFuture(ar.cause()));
165-
} else {
154+
try {
166155
handler.handle(Future.succeededFuture(queryResultToUpdateResult(ar.result())));
156+
} catch (Throwable e) {
157+
handler.handle(Future.failedFuture(e));
167158
}
168159
}), executionContext);
169160
});
@@ -241,6 +232,20 @@ private synchronized void beginTransactionIfNeeded(Handler<AsyncResult<Void>> ac
241232
}
242233
}
243234

235+
private Handler<AsyncResult<QueryResult>> handleAsyncQueryResultToResultSet(Handler<AsyncResult<ResultSet>> handler) {
236+
return ar -> {
237+
if (ar.succeeded()) {
238+
try {
239+
handler.handle(Future.succeededFuture(queryResultToResultSet(ar.result())));
240+
} catch (Throwable e) {
241+
handler.handle(Future.failedFuture(e));
242+
}
243+
} else {
244+
handler.handle(Future.failedFuture(ar.cause()));
245+
}
246+
};
247+
}
248+
244249
private ResultSet queryResultToResultSet(QueryResult qr) {
245250
final Option<com.github.mauricio.async.db.ResultSet> rows = qr.rows();
246251
if (!rows.isDefined()) {
@@ -280,6 +285,8 @@ public Void apply(Object value) {
280285
array.add(value.toString());
281286
} else if (value instanceof LocalDate) {
282287
array.add(value.toString());
288+
} else if (value instanceof DateTime) {
289+
array.add(value.toString());
283290
} else if (value instanceof UUID) {
284291
array.add(value.toString());
285292
} else {

src/main/java/io/vertx/ext/asyncsql/impl/BaseSQLClient.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.github.mauricio.async.db.Configuration;
2020
import com.github.mauricio.async.db.Connection;
2121
import io.netty.buffer.PooledByteBufAllocator;
22-
import io.netty.util.CharsetUtil;
2322
import io.vertx.core.AsyncResult;
2423
import io.vertx.core.Future;
2524
import io.vertx.core.Handler;

src/test/java/io/vertx/ext/asyncsql/AbstractTestBase.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.vertx.ext.asyncsql;
22

33
import io.vertx.core.AsyncResult;
4+
import io.vertx.core.Handler;
45
import io.vertx.core.Vertx;
56
import io.vertx.ext.sql.SQLConnection;
67
import io.vertx.ext.unit.TestContext;
@@ -43,4 +44,13 @@ protected void ensureSuccess(TestContext context, AsyncResult result) {
4344
}
4445
}
4546

47+
protected <A> Handler<AsyncResult<A>> onSuccess(TestContext context, Handler<A> fn) {
48+
return ar -> {
49+
if (ar.succeeded()) {
50+
fn.handle(ar.result());
51+
} else {
52+
context.fail("Should have been a success");
53+
}
54+
};
55+
}
4656
}

src/test/java/io/vertx/ext/asyncsql/MySQLClientTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import io.vertx.core.Handler;
2121
import io.vertx.core.json.JsonArray;
2222
import io.vertx.core.json.JsonObject;
23-
import io.vertx.ext.sql.ResultSet;
2423
import io.vertx.ext.sql.SQLConnection;
2524
import io.vertx.ext.sql.UpdateResult;
2625
import io.vertx.ext.unit.Async;

src/test/java/io/vertx/ext/asyncsql/PostgreSQLClientTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@
1616

1717
package io.vertx.ext.asyncsql;
1818

19-
import com.github.mauricio.async.db.QueryResult;
2019
import io.vertx.core.AsyncResult;
2120
import io.vertx.core.Handler;
2221
import io.vertx.core.json.JsonArray;
2322
import io.vertx.core.json.JsonObject;
2423
import io.vertx.ext.sql.ResultSet;
2524
import io.vertx.ext.sql.SQLConnection;
26-
import io.vertx.ext.sql.UpdateResult;
2725
import io.vertx.ext.unit.Async;
2826
import io.vertx.ext.unit.TestContext;
2927
import org.junit.Before;

src/test/java/io/vertx/ext/asyncsql/PostgreSQLTest.java

Lines changed: 61 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -18,64 +18,83 @@
1818

1919
import io.vertx.core.json.JsonArray;
2020
import io.vertx.core.json.JsonObject;
21-
import io.vertx.test.core.VertxTestBase;
21+
import io.vertx.ext.sql.ResultSet;
22+
import io.vertx.ext.unit.Async;
23+
import io.vertx.ext.unit.TestContext;
24+
import org.junit.Before;
2225
import org.junit.Test;
2326

24-
import java.util.concurrent.CountDownLatch;
25-
2627
/**
2728
* @author <a href="http://www.campudus.com">Joern Bernhardt</a>.
2829
*/
29-
public class PostgreSQLTest extends VertxTestBase {
30-
31-
AsyncSQLClient asyncSqlClient;
32-
33-
final String address = "campudus.postgresql";
30+
public class PostgreSQLTest extends AbstractTestBase {
3431

3532
final JsonObject config = new JsonObject()
36-
.put("host", System.getProperty("db.host", "localhost"))
37-
.put("postgresql", new JsonObject().put("address", address));
33+
.put("host", System.getProperty("db.host", "localhost"));
3834

39-
@Override
40-
public void setUp() throws Exception {
41-
super.setUp();
42-
asyncSqlClient = PostgreSQLClient.createNonShared(vertx, config);
35+
@Before
36+
public void init() {
37+
client = PostgreSQLClient.createNonShared(vertx, config);
4338
}
4439

45-
@Override
46-
public void tearDown() throws Exception {
47-
CountDownLatch latch;
48-
if (this.asyncSqlClient != null) {
49-
latch = new CountDownLatch(1);
50-
this.asyncSqlClient.close((ar) -> {
51-
latch.countDown();
40+
@Test
41+
public void someTest(TestContext context) throws Exception {
42+
Async async = context.async();
43+
client.getConnection(connAr -> {
44+
ensureSuccess(context, connAr);
45+
conn = connAr.result();
46+
conn.query("SELECT 1 AS something", resultSetAr -> {
47+
ensureSuccess(context, resultSetAr);
48+
ResultSet resultSet = resultSetAr.result();
49+
context.assertNotNull(resultSet);
50+
context.assertNotNull(resultSet.getColumnNames());
51+
context.assertNotNull(resultSet.getResults());
52+
context.assertEquals(new JsonArray().add(1), resultSet.getResults().get(0));
53+
async.complete();
5254
});
53-
this.awaitLatch(latch);
54-
}
55-
56-
super.tearDown();
55+
});
5756
}
5857

5958
@Test
60-
public void someTest() throws Exception {
61-
asyncSqlClient.getConnection(onSuccess(conn -> {
62-
conn.query("SELECT 1 AS something", onSuccess(resultSet -> {
63-
System.out.println(resultSet.getResults());
64-
assertNotNull(resultSet);
65-
assertNotNull(resultSet.getColumnNames());
66-
assertNotNull(resultSet.getResults());
67-
assertEquals(new JsonArray().add(1), resultSet.getResults().get(0));
68-
conn.close((ar) -> {
69-
if (ar.succeeded()) {
70-
testComplete();
71-
} else {
72-
fail("should be able to close the asyncSqlClient");
73-
}
74-
});
59+
public void queryTypeTimestampWithTimezoneTest(TestContext context) throws Exception {
60+
Async async = context.async();
61+
client.getConnection(connAr -> {
62+
ensureSuccess(context, connAr);
63+
conn = connAr.result();
64+
conn.execute("DROP TABLE IF EXISTS test_table", onSuccess(context, dropped -> {
65+
conn.execute("CREATE TABLE IF NOT EXISTS test_table (ts timestamp with time zone)", onSuccess(context, created -> {
66+
conn.execute("INSERT INTO test_table (ts) VALUES (now())", onSuccess(context, inserted -> {
67+
conn.query("SELECT * FROM test_table;", onSuccess(context, timestampSelect -> {
68+
context.assertNotNull(timestampSelect);
69+
context.assertNotNull(timestampSelect.getResults());
70+
context.assertTrue(timestampSelect.getResults().get(0).getString(0).matches("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}(Z|[+-]\\d{2}:\\d{2})"));
71+
async.complete();
72+
}));
73+
}));
74+
}));
7575
}));
76-
}));
76+
});
77+
}
7778

78-
await();
79+
@Test
80+
public void queryTypeTimestampWithoutTimezoneTest(TestContext context) throws Exception {
81+
Async async = context.async();
82+
client.getConnection(connAr -> {
83+
ensureSuccess(context, connAr);
84+
conn = connAr.result();
85+
conn.execute("DROP TABLE IF EXISTS test_table", onSuccess(context, dropped -> {
86+
conn.execute("CREATE TABLE IF NOT EXISTS test_table (ts timestamp without time zone)", onSuccess(context, created -> {
87+
conn.execute("INSERT INTO test_table (ts) VALUES (now())", onSuccess(context, inserted -> {
88+
conn.query("SELECT * FROM test_table;", onSuccess(context, timestampSelect -> {
89+
context.assertNotNull(timestampSelect);
90+
context.assertNotNull(timestampSelect.getResults());
91+
context.assertTrue(timestampSelect.getResults().get(0).getString(0).matches("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}"));
92+
async.complete();
93+
}));
94+
}));
95+
}));
96+
}));
97+
});
7998
}
8099

81100
}

0 commit comments

Comments
 (0)