use of io.vertigo.database.sql.statement.SqlStatementBuilder in project vertigo by KleeGroup.
the class AbstractSqlDataBaseManagerTest method testBatchInserts.
@Test
public void testBatchInserts() throws Exception {
final SqlConnectionProvider sqlConnectionProvider = dataBaseManager.getConnectionProvider(SqlDataBaseManager.MAIN_CONNECTION_PROVIDER_NAME);
final String sql = INSERT_INTO_MOVIE_VALUES;
final List<Movie> movies = Movies.bondMovies();
// --prepare data
final List<List<SqlParameter>> batch = new ArrayList<>();
for (final Movie movie : movies) {
final List<SqlParameter> sqlParameters = Arrays.asList(SqlParameter.of(Long.class, movie.getId()), SqlParameter.of(String.class, movie.getTitle()), SqlParameter.of(Double.class, movie.getFps()), SqlParameter.of(BigDecimal.class, movie.getIncome()), SqlParameter.of(Boolean.class, movie.getColor()), SqlParameter.of(Date.class, movie.getReleaseDate()), SqlParameter.of(LocalDate.class, movie.getReleaseLocalDate()), SqlParameter.of(Instant.class, movie.getReleaseInstant()), SqlParameter.of(DataStream.class, movie.getIcon()));
batch.add(sqlParameters);
}
final SqlConnection connection = sqlConnectionProvider.obtainConnection();
final OptionalInt result;
try {
final SqlStatementBuilder sqlStatementBuilder = SqlStatement.builder(sql);
for (final Movie movie : movies) {
sqlStatementBuilder.bind("movie", Movie.class, movie).nextLine();
}
result = dataBaseManager.executeBatch(sqlStatementBuilder.build(), connection);
connection.commit();
} finally {
connection.release();
}
// ---
if (result.isPresent()) {
Assert.assertEquals(movies.size(), result.getAsInt());
}
final List<Integer> countMovie = executeQuery(Integer.class, "select count(*) from movie", 1);
Assert.assertEquals(movies.size(), countMovie.get(0).intValue());
}
use of io.vertigo.database.sql.statement.SqlStatementBuilder in project vertigo by KleeGroup.
the class TaskEngineProcBatch method setNamedParameters.
@Override
protected void setNamedParameters(final SqlStatementBuilder sqlStatementBuilder) {
final List<TaskAttribute> potentialBatchAttributes = getTaskDefinition().getInAttributes().stream().filter(// multiple
inAttribute -> inAttribute.getDomain().isMultiple()).collect(Collectors.toList());
Assertion.checkState(potentialBatchAttributes.size() == 1, "For batch a single List param is required");
final TaskAttribute listAttribute = potentialBatchAttributes.get(0);
final List<TaskAttribute> otherAttributes = getTaskDefinition().getInAttributes().stream().filter(// not multiple
inAttribute -> !inAttribute.getDomain().isMultiple()).collect(Collectors.toList());
// ---
final List<?> list = getValue(listAttribute.getName());
list.forEach(object -> {
// we bind the parameter of the batch
sqlStatementBuilder.bind(listAttribute.getName(), listAttribute.getDomain().getJavaClass(), object);
// we add all the "constant" parameters
otherAttributes.forEach(otherAttribute -> sqlStatementBuilder.bind(otherAttribute.getName(), otherAttribute.getDomain().getJavaClass(), getValue(otherAttribute.getName())));
sqlStatementBuilder.nextLine();
});
}
use of io.vertigo.database.sql.statement.SqlStatementBuilder in project vertigo by KleeGroup.
the class AbstractTaskEngineSQL method execute.
/**
* {@inheritDoc}
*/
@Override
public void execute() {
final SqlConnection connection = obtainConnection();
final SqlStatementBuilder statementBuilder = SqlStatement.builder(getSqlQuery().trim());
setNamedParameters(statementBuilder);
final SqlStatement sqlStatement = statementBuilder.build();
try {
// Execute le Statement JDBC.
final OptionalInt sqlRowcountOpt = doExecute(sqlStatement, connection);
// On positionne le nombre de lignes affectées.
sqlRowcountOpt.ifPresent(this::setRowCount);
} catch (final BatchUpdateException sqle) {
// Gère les erreurs d'exécution Batch JDBC.
throw handleSQLException(connection, sqle.getNextException(), sqlStatement.getSqlQuery());
} catch (final SQLException sqle) {
// Gère les erreurs d'exécution JDBC.
throw handleSQLException(connection, sqle, sqlStatement.getSqlQuery());
}
}
Aggregations