001 package railo.intergral.fusiondebug.server.type.qry; 002 003 import java.util.ArrayList; 004 import java.util.List; 005 006 import railo.intergral.fusiondebug.server.type.FDValueNotMutability; 007 import railo.intergral.fusiondebug.server.type.FDVariable; 008 import railo.intergral.fusiondebug.server.type.simple.FDSimpleVariable; 009 import railo.runtime.op.Caster; 010 import railo.runtime.type.Query; 011 012 import com.intergral.fusiondebug.server.IFDStackFrame; 013 014 public class FDQuery extends FDValueNotMutability { 015 016 private static final int INTERVALL = 10; 017 private ArrayList children=new ArrayList(); 018 private Query qry; 019 020 public FDQuery(IFDStackFrame frame,Query qry){ 021 this.qry=qry; 022 023 // columns 024 String[] strColumns = qry.getColumns(); 025 List lstColumns=new ArrayList(); 026 String type; 027 for(int i=0;i<strColumns.length;i++){ 028 type=qry.getColumn(strColumns[i],null).getTypeAsString(); 029 //else type=""; 030 lstColumns.add(new FDSimpleVariable(frame,strColumns[i],type,null)); 031 } 032 children.add(new FDSimpleVariable(frame,"Columns",Caster.toString(strColumns.length),lstColumns)); 033 034 // rows 035 int rowcount=qry.getRowCount(); 036 List lstRows=new ArrayList(),values; 037 fill(frame,qry,lstRows,1,rowcount-1,strColumns); 038 children.add(new FDSimpleVariable(frame,"Rows",Caster.toString(rowcount),lstRows)); 039 } 040 041 private static void fill(IFDStackFrame frame, Query qry, List lstRows, int start,int len, String[] strColumns) { 042 int to=start+len; 043 int intervall = INTERVALL; 044 while(intervall*intervall<len) 045 intervall*=intervall; 046 if(len>intervall){ 047 int max; 048 for(int i=start;i<to;i+=intervall) { 049 max=(i+intervall)<to?(intervall-1):to-i; 050 ArrayList group=new ArrayList(); 051 lstRows.add(new FDSimpleVariable(frame,"Rows","["+i+"-"+((i+max))+"]",group)); 052 fill(frame, qry, group, i, max, strColumns); 053 } 054 } 055 else { 056 ArrayList values; 057 for(int r=start;r<=to;r++){ 058 values=new ArrayList(); 059 for(int c=0;c<strColumns.length;c++){ 060 values.add(new FDVariable(frame,strColumns[c],new FDQueryNode(frame,qry,r,strColumns[c]))); 061 } 062 lstRows.add(new FDSimpleVariable(frame,"Row","["+r+"]",values)); 063 } 064 } 065 } 066 067 068 /** 069 * @see com.intergral.fusiondebug.server.IFDValue#getChildren() 070 */ 071 public List getChildren() { 072 return children; 073 } 074 075 /** 076 * @see com.intergral.fusiondebug.server.IFDValue#hasChildren() 077 */ 078 public boolean hasChildren() { 079 return true; 080 } 081 082 /** 083 * @see java.lang.Object#toString() 084 */ 085 public String toString() { 086 return "Query(Columns:"+qry.getColumns().length+", Rows:"+qry.getRecordcount()+")"; 087 } 088 089 }