Package com.avaje.ebeaninternal.api

Examples of com.avaje.ebeaninternal.api.SpiSqlQuery


    this.dbTrueValue = dbTrueValue == null ? "true" : dbTrueValue;
  }

  public Object findMany(RelationalQueryRequest request) {

    SpiSqlQuery query = request.getQuery();

    long startTime = System.currentTimeMillis();

    SpiTransaction t = request.getTransaction();
    Connection conn = t.getInternalConnection();
    ResultSet rset = null;
    PreparedStatement pstmt = null;

    String sql = query.getQuery();

    BindParams bindParams = query.getBindParams();

    if (!bindParams.isEmpty()) {
      // convert any named parameters if required
      sql = BindParamsParser.parse(bindParams, sql);
    }

    try {

      String bindLog = "";
      String[] propNames = null;
     
      synchronized (query) {
        if (query.isCancelled()){
          logger.trace("Query already cancelled");
          return null;
        }
       
        // synchronise for query.cancel() support   
        pstmt = conn.prepareStatement(sql);
 
        if (query.getTimeout() > 0){
          pstmt.setQueryTimeout(query.getTimeout());
        }
        if (query.getBufferFetchSizeHint() > 0){
          pstmt.setFetchSize(query.getBufferFetchSizeHint());
        }
       
        if (!bindParams.isEmpty()) {
          bindLog = binder.bind(bindParams, new DataBind(pstmt));
        }
 
        if (request.isLogSql()) {
          String logSql = sql;
          if (TransactionManager.SQL_LOGGER.isTraceEnabled()) {
            logSql = Str.add(logSql, "; --bind(", bindLog, ")");
          }
          t.logSql(logSql);
        }
 
        rset = pstmt.executeQuery();
 
        propNames = getPropertyNames(rset);
      }
     
      // calculate the initialCapacity of the Map to reduce
      // rehashing for queries with 12+ columns
      float initCap = (propNames.length) / 0.7f;
      int estimateCapacity = (int) initCap + 1;

      // determine the maxRows limit
      int maxRows = defaultMaxRows;
      if (query.getMaxRows() >= 1) {
        maxRows = query.getMaxRows();
      }

      int loadRowCount = 0;

      SqlQueryListener listener = query.getListener();

      BeanCollectionWrapper wrapper = new BeanCollectionWrapper(request);
      boolean isMap = wrapper.isMap();
      String mapKey = query.getMapKey();
     
      SqlRow bean = null;
     
      while (rset.next()) {
        synchronized (query) {         
          // synchronise for query.cancel() support   
          if (!query.isCancelled()){
            bean = readRow(request, rset, propNames, estimateCapacity);
          }
        }
        if (bean != null){
          // bean can be null if query cancelled
          if (listener != null) {
            listener.process(bean);
 
          } else {
            if (isMap) {
              Object keyValue = bean.get(mapKey);
              wrapper.addToMap(bean, keyValue);
            } else {
              wrapper.addToCollection(bean);
            }
          }
 
          loadRowCount++;
 
          if (loadRowCount == maxRows) {
            // break, as we have hit the max rows to fetch...
            break;
          }
        }
      }

      BeanCollection<?> beanColl = wrapper.getBeanCollection();

      if (request.isLogSummary()) {
        long exeTime = System.currentTimeMillis() - startTime;
        String msg = "SqlQuery  rows[" + loadRowCount + "] time[" + exeTime + "] bind[" + bindLog + "]";
        t.logSummary(msg);
      }
     
      if (query.isCancelled()){
        logger.debug("Query was cancelled during execution rows:"+loadRowCount);
      }
     
      return beanColl;
View Full Code Here


    }
  }

  public SqlFutureList findFutureList(SqlQuery query, Transaction t) {

    SpiSqlQuery spiQuery = (SpiSqlQuery) query;
    spiQuery.setFutureFetch(true);

    Transaction newTxn = createTransaction();
    CallableSqlQueryList call = new CallableSqlQueryList(this, query, newTxn);

    FutureTask<List<SqlRow>> futureTask = new FutureTask<List<SqlRow>>(call);
View Full Code Here

TOP

Related Classes of com.avaje.ebeaninternal.api.SpiSqlQuery

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.