Package railo.runtime.util

Source Code of railo.runtime.util.QueryStackImpl

package railo.runtime.util;

import railo.runtime.PageContext;
import railo.runtime.config.NullSupportHelper;
import railo.runtime.exp.DeprecatedException;
import railo.runtime.exp.PageRuntimeException;
import railo.runtime.op.Duplicator;
import railo.runtime.type.Collection.Key;
import railo.runtime.type.KeyImpl;
import railo.runtime.type.Query;
import railo.runtime.type.QueryColumn;

/**
* Stack for Query Objects
*/
public final class QueryStackImpl implements QueryStack {
  Query[] queries=new Query[20];
  int start=queries.length;
 
  @Override
  public QueryStack duplicate(boolean deepCopy){
    QueryStackImpl qs=new QueryStackImpl();
    if(deepCopy) {
      qs.queries=new Query[queries.length];
      for(int i=0;i<queries.length;i++) {
        qs.queries[i]=(Query)Duplicator.duplicate(queries[i],deepCopy);
      }
    }
    else qs.queries=queries;
   
    qs.start=start;
    return qs;
  }

  @Override
  public void addQuery(Query query) {
    if(start<1)grow();
        queries[--start]= query;
  }

  @Override
  public void removeQuery() {
        //print.ln("queries["+start+"]=null;");
        queries[start++]=null;
  }
 
  @Override
  public boolean isEmpty() {
    return start==queries.length;
  }

  @Override
  public Object getDataFromACollection(String key) {
    throw new PageRuntimeException(new DeprecatedException("this method is no longer supported, use instead getDataFromACollection(PageContext pc,Key key, Object defaultValue)"));
  }
 
  @Override
  public Object getDataFromACollection(PageContext pc,String key) {
    throw new PageRuntimeException(new DeprecatedException("this method is no longer supported, use instead getDataFromACollection(PageContext pc,Key key, Object defaultValue)"));
  }

  @Override
  public Object getDataFromACollection(Key key) {
    throw new PageRuntimeException(new DeprecatedException("this method is no longer supported, use instead getDataFromACollection(PageContext pc,Key key, Object defaultValue)"));
  }
 
  @Override
  public Object getDataFromACollection(PageContext pc,Key key) {
    throw new PageRuntimeException(new DeprecatedException("this method is no longer supported, use instead getDataFromACollection(PageContext pc,Key key, Object defaultValue)"));
  }
 
  // FUTURE add to interface and set above to deprecated
  public Object getDataFromACollection(PageContext pc,Key key, Object defaultValue) {
    //Object rtn;
    QueryColumn col;
    // get data from queries
    for(int i=start;i<queries.length;i++) {
      col = queries[i].getColumn(key,null);
      if(col!=null) return col.get(queries[i].getCurrentrow(pc.getId()),NullSupportHelper.empty());
      //rtn=((Objects)queries[i]).get(pc,key,Null.NULL);
      //if(rtn!=Null.NULL) return rtn;
    }
    return defaultValue;
  }

  @Override
  public QueryColumn getColumnFromACollection(String key) {
    return getColumnFromACollection(KeyImpl.init(key));
  }

  @Override
  public QueryColumn getColumnFromACollection(Key key) {
    QueryColumn rtn=null;
   
    // get data from queries
    for(int i=start;i<queries.length;i++) {
      rtn=queries[i].getColumn(key,null);
      if(rtn!=null) {
        return rtn;
      }
    }
    return null;
  }
 
  @Override
  public void clear() {
    for(int i=start;i<queries.length;i++) {
      queries[i]=null;
    }
    start=queries.length;
  }
   
    private void grow() {
        Query[] tmp=new Query[queries.length+20];
        for(int i=0;i<queries.length;i++) {
            tmp[i+20]=queries[i];
        }
        queries=tmp;
        start+=20;
    }
   
    @Override
  public Query[] getQueries() {
    Query[] tmp=new Query[queries.length-start];
    int count=0;
    for(int i=start;i<queries.length;i++) {
      tmp[count++]=queries[i];
    }
    return tmp;
  }
}
TOP

Related Classes of railo.runtime.util.QueryStackImpl

TOP
Copyright © 2018 www.massapi.com. 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.