Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2012 Objectos, Fábrica de Software LTDA.
   *
   * Licensed under the Apache License, Version 2.0 (the "License"); you may not
   * use this file except in compliance with the License. You may obtain a copy of
   * the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  * License for the specific language governing permissions and limitations under
  * the License.
  */
 package br.com.objectos.way.relational;
 
 import static com.google.common.collect.Lists.newArrayListWithCapacity;
 
 import java.util.List;
 

Author(s):
marcio.endo@objectos.com.br (Marcio Endo)
 
 
   private final Options options;
 
   private final ConnectionProvider connections;
 
 
   @Inject
   public NativeBatchInsertGuice(Options options,
                                 ConnectionProvider connections,
                                 ListInsertableExec listInsertableExec) {
     this. = options;
     this. = connections;
     this. = listInsertableExec;
   }
 
   @Override
   public <I extends Insertablevoid insert(Iterator<I> entities) {
     int batchSize = .getBatchSize();
     insertWithBatchSize(entitiesbatchSize);
   }
 
   @Override
   public <I extends Insertablevoid insert(Iterable<I> entities) {
     insert(entities.iterator());
   }
 
   @Override
   public <I extends Insertablevoid insertWithBatchSize(Iterator<I> entitiesint batchSize) {
     PeekingIterator<I> iterator = Iterators.peekingIterator(entities);
 
     if (!iterator.hasNext()) {
       return;
     }
 
     I first = iterator.peek();
     Insert firstInsert = first.getInsert();
     String sql = firstInsert.toString();
     insert0(sqliteratorbatchSize);
   }
 
   @Override
   public <I extends Insertablevoid insertWithBatchSize(Iterable<I> entitiesint batchSize) {
     insertWithBatchSize(entities.iterator(), batchSize);
   }
 
   @Override
   public void insertMany(Iterator<? extends ListInsertableentities) {
     while (entities.hasNext()) {
       ListInsertable entity = entities.next();
       .execute(entity);
     }
   }
 
   @Override
   public void insertMany(Iterable<? extends ListInsertableentities) {
     insertMany(entities.iterator());
   }
 
   private <I extends Insertablevoid insert0(String sqlIterator<I> entitiesint flushSize) {
     int count = 0;
     List<CallbackWrappercallbacks = newArrayListWithCapacity(flushSize);
     Connection connection = null;
     PreparedStatement statement = null;
    try {
      connection = .get();
      connection.setAutoCommit(false);
      statement = connection.prepareStatement(sql.);
      PreparedStatementWrapper wrapper = new PreparedStatementWrapper(statement);
      while (entities.hasNext()) {
        I entity = entities.next();
        Insert insert = entity.getInsert();
        insert.prepare(wrapper);
        statement.addBatch();
        GeneratedKeyCallback keyCallback = insert.getKeyCallback();
        callbacks.add(new CallbackWrapper(keyCallback));
        if (++count % flushSize == 0) {
          new Flusher(statementcallbacks).flush();
        }
      }
      new Flusher(statementcallbacks).flush();
      connection.commit();
    } catch (SQLException e) {
      Jdbc.rollback(connection);
      throw new SQLRuntimeException(e);
    } finally {
      Jdbc.close(statement);
      Jdbc.close(connection);
    }
  }
  private class CallbackWrapper {
    private final GeneratedKeyCallback keyCallback;
    public CallbackWrapper(GeneratedKeyCallback keyCallback) {
      this. = keyCallback;
    }
    public void set(ResultSet rsthrows SQLException {
      if ( != null) {
        .set(rs);
      }
    }
  }
  private class Flusher {
    private final PreparedStatement statement;
    private final List<CallbackWrappercallbacks;
    public Flusher(PreparedStatement statementList<CallbackWrappercallbacks) {
      this. = statement;
      this. = callbacks;
    }
    public void flush() throws SQLException {
      ResultSet rs = null;
      .executeBatch();
      try {
        rs = .getGeneratedKeys();
        for (CallbackWrapper callback : ) {
          callback.set(rs);
        }
      } finally {
        .clear();
        Jdbc.close(rs);
      }
    }
  }
New to GrepCode? Check out our FAQ X