#1238 - Refactor MetaInfoManager - collect query plan stats, fix collection of stats on UpdateQuery

This commit is contained in:
Rob Bygrave
2018-01-19 01:07:37 +13:00
parent b9ae76d465
commit 07cdf64ece
27 changed files with 355 additions and 108 deletions
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.query;
import io.ebeaninternal.api.SpiProfileTransactionEvent;
import io.ebeaninternal.api.SpiQuery;
import io.ebeaninternal.api.SpiTransaction;
import io.ebeaninternal.server.core.OrmQueryRequest;
@@ -18,10 +19,12 @@ import java.util.List;
/**
* Base compiled query request for single attribute queries.
*/
class CQueryFetchSingleAttribute {
class CQueryFetchSingleAttribute implements SpiProfileTransactionEvent {
private static final Logger logger = LoggerFactory.getLogger(CQueryFetchSingleAttribute.class);
private final CQueryPlan queryPlan;
/**
* The overall find request wrapper object.
*/
@@ -56,17 +59,19 @@ class CQueryFetchSingleAttribute {
private final ScalarType<?> scalarType;
private long profileOffset;
/**
* Create the Sql select based on the request.
*/
CQueryFetchSingleAttribute(OrmQueryRequest<?> request, CQueryPredicates predicates, CQueryPlan plan) {
CQueryFetchSingleAttribute(OrmQueryRequest<?> request, CQueryPredicates predicates, CQueryPlan queryPlan) {
this.request = request;
this.queryPlan = queryPlan;
this.query = request.getQuery();
this.sql = plan.getSql();
this.sql = queryPlan.getSql();
this.desc = request.getBeanDescriptor();
this.predicates = predicates;
this.scalarType = plan.getSingleAttributeScalarType();
this.scalarType = queryPlan.getSingleAttributeScalarType();
query.setGeneratedSql(sql);
}
@@ -102,6 +107,9 @@ class CQueryFetchSingleAttribute {
executionTimeMicros = (System.nanoTime() - startNano) / 1000L;
request.slowQueryCheck(executionTimeMicros, rowCount);
queryPlan.executionTime(rowCount, executionTimeMicros, null);
getTransaction().profileEvent(this);
return result;
} finally {
@@ -109,6 +117,10 @@ class CQueryFetchSingleAttribute {
}
}
private SpiTransaction getTransaction() {
return request.getTransaction();
}
/**
* Return the bind log.
*/
@@ -125,7 +137,8 @@ class CQueryFetchSingleAttribute {
private void prepareExecute() throws SQLException {
SpiTransaction t = request.getTransaction();
SpiTransaction t = getTransaction();
profileOffset = t.profileOffset();
Connection conn = t.getInternalConnection();
pstmt = conn.prepareStatement(sql);
@@ -166,4 +179,10 @@ class CQueryFetchSingleAttribute {
}
}
@Override
public void profile() {
getTransaction()
.profileStream()
.addQueryEvent(query.profileEventId(), profileOffset, desc.getProfileId(), rowCount, query.getProfileId());
}
}