Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2011 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 java.util.List;
 
 

Author(s):
marcio.endo@objectos.com.br (Marcio Endo)
 
 class NativeSqlExecJdbc implements NativeSqlExec {
 
   private static final Logger logger = LoggerFactory.getLogger(NativeSqlExecJdbc.class);
 
   private final Options options;
 
   private final ConnectionProvider connections;
 
   @Inject
   public NativeSqlExecJdbc(Options optionsConnectionProvider connections) {
     this. = options;
     this. = connections;
   }
 
   @Override
   public int execute(NativeSqlImpl sql) {
     .debug("execute <<:sql={}"sql);
 
     int result = 0;
 
     Connection connection = null;
     PreparedStatement stmt = null;
     ResultSet rs = null;
 
     try {
 
       connection = .get();
       stmt = sql.prepare(connection);
       result = stmt.executeUpdate();
 
     } catch (SQLException e) {
       throw new SQLRuntimeException(e);
     } finally {
       Jdbc.close(connection);
       Jdbc.close(stmt);
       Jdbc.close(rs);
     }
 
     return result;
   }
 
   @Override
   public <T> Iterator<T> iterate(NativeSqlImpl sql) {
     return new IteratorImpl<T>(thissql);
   }
 
   @Override
   public void insert(NativeSqlImpl sql) {
     .debug("insert <<:sql=\n{}"sql);
 
     Connection connection = null;
     PreparedStatement statement = null;
     ResultSet rs = null;
 
     try {
 
       connection = .get();
       statement = sql.prepare(connection.);
       statement.executeUpdate();
 
      GeneratedKeyCallback keyCallback = sql.getKeyCallback();
      if (keyCallback != null) {
        rs = statement.getGeneratedKeys();
        keyCallback.set(rs);
        rs.close();
      }
    } catch (SQLException e) {
      throw new SQLRuntimeException(e);
    } finally {
      Jdbc.close(connection);
      Jdbc.close(statement);
      Jdbc.close(rs);
    }
  }
  public <T> List<T> list(NativeSqlImpl sql) {
    .debug("list <<:sql=\n{}"sql);
    return list0(sql);
  }
  public <T> List<T> listPage(NativeSqlImpl sqlPage page) {
    .debug("listPage <<:sql=\n{}"sqlpage);
    sql.limit(page);
    return list0(sql);
  }
  @SuppressWarnings("unchecked")
  public <T> T single(NativeSqlImpl sql) {
    .debug("single <<:sql=\n{}"sql);
    T result = null;
    Connection connection = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    try {
      connection = .get();
      stmt = sql.prepare(connection);
      ResultSetLoader<?> loader = sql.getLoader();
      rs = stmt.executeQuery();
      result = (T) (rs.next() ? loader.load(rs) : null);
    } catch (SQLException e) {
      throw new SQLRuntimeException(e);
    } finally {
      Jdbc.close(connection);
      Jdbc.close(stmt);
      Jdbc.close(rs);
    }
    return result;
  }
  public <T> Stream<T> stream(NativeSqlImpl sql) {
    Iterator<T> iterator = iterate(sql);
    Spliterator<T> spliterator = Spliterators.spliteratorUnknownSize(iterator.);
    return StreamSupport.stream(spliteratorfalse);
  }
  private <T> List<T> list0(NativeSqlImpl sql) {
    List<T> result = null;
    Connection connection = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    try {
      connection = .get();
      stmt = sql.prepare(connection);
      ResultSetLoader<?> loader = sql.getLoader();
      rs = stmt.executeQuery();
      Iterator<ResultSetiterator = new ResultSetIterator(rs);
      Iterator<T> loaded = Iterators.transform(iteratornew LoaderFunction<T>(loader));
      result = ImmutableList.copyOf(loaded);
    } catch (SQLException e) {
      String msg = sql != null ? sql.toString() : null;
      throw new SQLRuntimeException(msge);
    } finally {
      Jdbc.close(connection);
      Jdbc.close(stmt);
      Jdbc.close(rs);
    }
    return result;
  }
  private static class IteratorImpl<E> implements Iterator<E> {
    private final NativeSqlExec exec;
    private final NativeSqlImpl sql;
    private final Options options;
    private int page = 0;
    private Iterator<E> iterator;
    public IteratorImpl(NativeSqlExec execNativeSqlImpl sqlOptions options) {
      this. = exec;
      this. = sql;
      this. = options;
    }
    @Override
    public boolean hasNext() {
      if ( == null || !.hasNext()) {
        updateIterator();
      }
      return .hasNext();
    }
    @Override
    public E next() {
      return .next();
    }
    @Override
    public void remove() {
      throw new UnsupportedOperationException();
    }
    private void updateIterator() {
      List<E> itens = getNextPage();
       = itens.iterator();
    }
    private List<E> getNextPage() {
      int firstResult = firstResult();
      SimplePage paginator = SimplePage.build()
          .startAt(firstResult)
          .withLengthOf(getLength())
          .get();
      ++;
      return .listPage(paginator);
    }
    private int firstResult() {
      return  * getLength();
    }
    private int getLength() {
      return .getIterationLength();
    }
  }
New to GrepCode? Check out our FAQ X