package io.ebeaninternal.server.persist;
import io.ebean.meta.MetricType;
import io.ebean.meta.MetricVisitor;
import io.ebean.metric.MetricFactory;
import io.ebean.metric.TimedMetricMap;
import io.ebeaninternal.api.SpiTransaction;
import io.ebeaninternal.server.core.PersistRequestCallableSql;
import io.ebeaninternal.server.core.PersistRequestOrmUpdate;
import io.ebeaninternal.server.core.PersistRequestUpdateSql;
Default PersistExecute implementation using DML statements.
Supports the use of PreparedStatement batching.
/**
* Default PersistExecute implementation using DML statements.
* <p>
* Supports the use of PreparedStatement batching.
* </p>
*/
final class DefaultPersistExecute implements PersistExecute {
private final ExeCallableSql exeCallableSql;
private final ExeUpdateSql exeUpdateSql;
private final ExeOrmUpdate exeOrmUpdate;
The default batch size.
/**
* The default batch size.
*/
private final int defaultBatchSize;
private final TimedMetricMap ormUpdateMetric;
private final TimedMetricMap sqlUpdateMetric;
private final TimedMetricMap sqlCallMetric;
Construct this DmlPersistExecute.
/**
* Construct this DmlPersistExecute.
*/
DefaultPersistExecute(Binder binder, int defaultBatchSize) {
this.exeOrmUpdate = new ExeOrmUpdate(binder);
this.exeUpdateSql = new ExeUpdateSql(binder);
this.exeCallableSql = new ExeCallableSql(binder);
this.defaultBatchSize = defaultBatchSize;
this.ormUpdateMetric = MetricFactory.get().createTimedMetricMap(MetricType.SQL, "orm.update.");
this.sqlUpdateMetric = MetricFactory.get().createTimedMetricMap(MetricType.SQL, "sql.update.");
this.sqlCallMetric = MetricFactory.get().createTimedMetricMap(MetricType.SQL, "sql.call.");
}
@Override
public void visitMetrics(MetricVisitor visitor) {
ormUpdateMetric.visit(visitor);
sqlUpdateMetric.visit(visitor);
sqlCallMetric.visit(visitor);
}
@Override
public void collectOrmUpdate(String label, long startNanos, int rowCount) {
long exeMicros = (System.nanoTime() - startNanos) / 1000L;
ormUpdateMetric.add(label, exeMicros, rowCount);
}
@Override
public void collectSqlUpdate(String label, long startNanos, int rowCount) {
long exeMicros = (System.nanoTime() - startNanos) / 1000L;
sqlUpdateMetric.add(label, exeMicros, rowCount);
}
@Override
public void collectSqlCall(String label, long startNanos, int rowCount) {
long exeMicros = (System.nanoTime() - startNanos) / 1000L;
sqlCallMetric.add(label, exeMicros, rowCount);
}
@Override
public BatchControl createBatchControl(SpiTransaction t) {
// create a BatchControl and set its defaults
return new BatchControl(t, defaultBatchSize, true);
}
Execute the updateSqlRequest
/**
* Execute the updateSqlRequest
*/
@Override
public int executeOrmUpdate(PersistRequestOrmUpdate request) {
return exeOrmUpdate.execute(request);
}
Execute the updateSqlRequest
/**
* Execute the updateSqlRequest
*/
@Override
public int executeSqlUpdate(PersistRequestUpdateSql request) {
return exeUpdateSql.execute(request);
}
Execute the CallableSqlRequest.
/**
* Execute the CallableSqlRequest.
*/
@Override
public int executeSqlCallable(PersistRequestCallableSql request) {
return exeCallableSql.execute(request);
}
}