Skip to content

Commit 64292a3

Browse files
authored
Expose compiled SQL for SqlTemplate to improve transparency (#1610)
See #1609 The compiled SQL query is computed as soon as the template is created. It can be exposed for inspection by users (e.g. logging). Signed-off-by: Thomas Segismont <tsegismont@gmail.com>
1 parent aeb5a19 commit 64292a3

3 files changed

Lines changed: 15 additions & 7 deletions

File tree

vertx-sql-client-templates/src/main/java/io/vertx/sqlclient/templates/SqlTemplate.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,12 @@ static SqlTemplate<Map<String, Object>, SqlResult<Void>> forUpdate(SqlClient cli
6767
return new SqlTemplateImpl<>(client, sqlTemplate, query -> query.collecting(SqlTemplateImpl.NULL_COLLECTOR), sqlTemplate::mapTuple);
6868
}
6969

70+
71+
/**
72+
* @return the computed SQL for this template
73+
*/
74+
String getSql();
75+
7076
/**
7177
* Set a parameters user defined mapping function.
7278
*

vertx-sql-client-templates/src/main/java/io/vertx/sqlclient/templates/impl/SqlTemplateImpl.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,7 @@
22

33
import io.vertx.core.Future;
44
import io.vertx.core.json.JsonObject;
5-
import io.vertx.sqlclient.PreparedQuery;
6-
import io.vertx.sqlclient.Row;
7-
import io.vertx.sqlclient.RowSet;
8-
import io.vertx.sqlclient.SqlClient;
9-
import io.vertx.sqlclient.SqlResult;
10-
import io.vertx.sqlclient.Tuple;
5+
import io.vertx.sqlclient.*;
116
import io.vertx.sqlclient.templates.RowMapper;
127
import io.vertx.sqlclient.templates.TupleMapper;
138

@@ -37,6 +32,11 @@ public SqlTemplateImpl(SqlClient client,
3732
this.tupleMapper = tupleMapper;
3833
}
3934

35+
@Override
36+
public String getSql() {
37+
return sqlTemplate.getSql();
38+
}
39+
4040
@Override
4141
public <T> io.vertx.sqlclient.templates.SqlTemplate<T, R> mapFrom(TupleMapper<T> mapper) {
4242
return new SqlTemplateImpl<>(client, sqlTemplate, queryMapper, params -> mapper.map(sqlTemplate, sqlTemplate.numberOfParams(), params));

vertx-sql-client-templates/src/test/java/io/vertx/tests/sqlclient/templates/PgTemplateTestBase.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,12 @@ protected <P, T, V> void testGet(TestContext ctx,
9696
Function<T, V> extractor,
9797
String column) {
9898
Async async = ctx.async();
99+
String query = "SELECT %s :: %s \"%s\"";
99100
SqlTemplate<P, RowSet<T>> template = SqlTemplate
100-
.forQuery(connection, "SELECT #{" + paramName + "} :: " + sqlType + " \"" + column + "\"")
101+
.forQuery(connection, String.format(query, "#{" + paramName + "}", sqlType, column))
101102
.mapFrom(paramsMapper)
102103
.mapTo(rowMapper);
104+
ctx.assertEquals(String.format(query, "$1", sqlType, column), template.getSql());
103105
template
104106
.execute(params)
105107
.onComplete(ctx.asyncAssertSuccess(result -> {

0 commit comments

Comments
 (0)