Package railo.runtime.sql

Source Code of railo.runtime.sql.Selects

package railo.runtime.sql;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import railo.runtime.exp.DatabaseException;
import railo.runtime.sql.exp.Column;
import railo.runtime.sql.exp.Expression;
import railo.runtime.sql.exp.op.Operation;
import railo.runtime.sql.exp.value.ValueNumber;

public class Selects {

  private List<Column> orderbys=new ArrayList<Column>();
  private List<Select> selects=new ArrayList<Select>();
 


  public void addOrderByExpression(Column exp) {
    this.orderbys.add(exp);
  }

  /**
   * @return the orderbys
   */
  public Column[] getOrderbys() {
    if(orderbys==null) return new Column[0];
    return orderbys.toArray(new Column[orderbys.size()]);
  }

  public void addSelect(Select select) {
    selects.add(select);
  }
 
  public Select[] getSelects() {
    if(selects==null) return new Select[0];
    return selects.toArray(new Select[selects.size()]);
  }
 

  @Override

  public String toString() {
    return _toString(this);
  }
  public static String _toString(Selects __selects) {
    Select[] _selects = __selects.getSelects();
    Select s;
    StringBuffer sb=new StringBuffer();
   
    for(int y=0;y<_selects.length;y++) {
      s = _selects[y];
     
      if(y>0) {
        if(s.isUnionDistinct())sb.append("union distinct\n\n");
        else sb.append("union\n\n");
      }
     
      sb.append("select\n\t");

      if(s.isDistinct()) sb.append("distinct\n\t");
      ValueNumber top = s.getTop();
      if(top!=null) sb.append("top "+top.getString()+"\n\t");
      // select
      Expression[] sels = s.getSelects();
      Expression exp;
      boolean first=true;
      for(int i=0;i<sels.length;i++) {
        if(!first)sb.append("\t,");
        exp=sels[i];
        sb.append(exp.toString(false)+"\n");
        first=false;
      }
 
      // from
      sb.append("from\n\t");
      Column[] forms = s.getFroms();
      first=true;
      for(int i=0;i<forms.length;i++) {
        if(!first)sb.append("\t,");
        exp=forms[i];
        sb.append(exp.toString(false)+"\n");
        first=false;
      }
 
      // where
      if(s.getWhere()!=null){
        sb.append("where \n\t");
        sb.append(s.getWhere().toString(true));
        sb.append("\n");
      }
 
      // group by
      Column[] gbs = s.getGroupbys();
      if(gbs.length>0) {
        sb.append("group by\n\t");
        first=true;
        for(int i=0;i<gbs.length;i++) {
          if(!first)sb.append("\t,");
          exp=gbs[i];
          sb.append(exp.toString(false)+"\n");
          first=false;
        }
      }
 
     
      // having
      Operation having = s.getHaving();
      if(having!=null){
        sb.append("having \n\t");
        sb.append(having.toString(true));
        sb.append("\n");
      }
     
    }

    // order by
    if(__selects.orderbys!=null && __selects.orderbys.size()>0) {
      sb.append("order by\n\t");
      Iterator<Column> it = __selects.orderbys.iterator();
      Expression exp;
      boolean first = true;
      while(it.hasNext()) {
        if(!first)sb.append("\t,");
        exp=it.next();
        sb.append(exp.toString(false)+" "+(exp.isDirectionBackward()?"DESC":"ASC")+"\n");
        first=false;
      }
    }
    return sb.toString();
  }

  public Column[] getTables() {
    Iterator<Select> it = selects.iterator();
    Select s;
    ArrayList<Column> rtn=new ArrayList<Column>();
    Column[] froms;
    while(it.hasNext()) {
      s=it.next();
      froms = s.getFroms();
      for(int i=0;i<froms.length;i++) {
        rtn.add(froms[i]);
      }
    }
    return rtn.toArray(new Column[rtn.size()]);
  }

  public boolean isDistinct() {
    Select s;
    int len=selects.size();
    if(len==1) {
      s=selects.get(0);
      return s.isDistinct();
    }
    for(int i=1;i<len;i++) {
      s=selects.get(i);
      if(!s.isUnionDistinct()) return false;
    }
    return true;
  }
  public Column[] getDistincts() throws DatabaseException {
    List<Column> columns=new ArrayList<Column>();
    Select s;
    int len=selects.size();
    if(len==1) {
      s=selects.get(0);
      Expression[] _selects = s.getSelects();
      for(int i=0;i<_selects.length;i++){
        if(_selects[i] instanceof Column) {
          columns.add((Column) _selects[i]);
       
      }
      return columns.toArray(new Column[columns.size()]);
    }
    throw new DatabaseException("not supported for Union distinct",null,null,null);
  }
}
TOP

Related Classes of railo.runtime.sql.Selects

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.