QueryCapture.java
package li.selman.persistencetest.capture;
import javax.sql.DataSource;
import li.selman.persistencetest.core.normalize.JSqlParserSqlNormalizer;
import li.selman.persistencetest.core.normalize.SqlNormalizer;
import net.ttddyy.dsproxy.support.ProxyDataSourceBuilder;
/** Entry point for wrapping a {@link DataSource} so every statement executed through it is captured. */
public final class QueryCapture {
private QueryCapture() {}
/**
* Wraps {@code dataSource} using the default {@link JSqlParserSqlNormalizer}.
*
* <p>Captured queries are recorded on {@link QueryCaptureContext#current()} for the thread that
* executes them.
*/
public static DataSource wrap(DataSource dataSource) {
return wrap(dataSource, new JSqlParserSqlNormalizer());
}
/** Like {@link #wrap(DataSource)}, but with a caller-supplied {@link SqlNormalizer}. */
public static DataSource wrap(DataSource dataSource, SqlNormalizer normalizer) {
return ProxyDataSourceBuilder.create(dataSource)
.name("persistence-test")
.listener(new QueryCaptureListener(normalizer))
.build();
}
}