Query.java

Go to the documentation of this file.
00001 /*
00002  * Query.java
00003  *
00004  *  Copyright (C) 2003 Alain MENSEGUEN
00005  *  www.net2map.org
00006  *
00007  *  This program is free software; you can redistribute it and/or
00008  *  modify it under the terms of the GNU General Public License
00009  *  as published by the Free Software Foundation; either version 2
00010  *  of the License, or (at your option) any later version.
00011  *
00012  *  This program is distributed in the hope that it will be useful,
00013  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  *  GNU Lesser General Public License for more details.
00016  *
00017  *  You should have received a copy of the GNU General Public License
00018  *  along with this program; if not, write to the Free Software
00019  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00020  */
00021 package org.net2map.pov.server;
00022 
00023 import java.util.LinkedList;
00024 
00038 public class Query extends java.lang.Object
00039 {
00043     public Query( ParameterSet params )
00044     {
00045         pParameters = params;
00046     }
00047     
00052     public Query( String name, ParameterSet params )
00053     {
00054         sName = name;
00055         pParameters = params;
00056     }
00057     
00061     public String getName()
00062     {
00063         return sName;
00064     }
00065     
00069     public String getSelect()
00070     {
00071         return sSelect;
00072     }
00073     
00077     public String getFrom()
00078     {
00079         return sFrom;
00080     }
00081     
00085     public String getWhere()
00086     {
00087         return sWhere;
00088     }
00089     
00093     public String getGroup()
00094     {
00095         return sGroup;
00096     }
00097     
00101     public String getHaving()
00102     {
00103         return sHaving;
00104     }
00105     
00109     public String getOrder()
00110     {
00111         return sOrder;
00112     }
00113     
00117     public void setName( String name )
00118     {
00119         sName = name;
00120     }
00121     
00125     public void setSelect( String select )
00126     {
00127         sSelect = select;
00128     }
00129     
00133     public void setFrom( String from )
00134     {
00135         sFrom = from;
00136     }
00137     
00141     public void setWhere( String where )
00142     {
00143         sWhere = where;
00144     }
00145     
00149     public void setGroup( String group )
00150     {
00151         sGroup = group;
00152     }
00153     
00157     public void setHaving( String having )
00158     {
00159         sHaving = having;
00160     }
00161     
00165     public void setOrder( String order )
00166     {
00167         sOrder = order;
00168     }
00169     
00173     public String getFieldToJoin()
00174     {
00175         return sFieldToJoin;
00176     }
00177     
00181     public void setFieldToJoin( String field )
00182     {
00183         sFieldToJoin = field;
00184     }
00185     
00189     public DimensionFieldList getDimensionFields()
00190     {
00191         return pDimensionFields;
00192     }
00193     
00197     public DimensionTableList getDimensionTables()
00198     {
00199         return pDimensionTables;
00200     }
00201     
00206     public String toString()
00207     {
00208         String sResult = "";
00209         sResult = "SELECT " + sSelect.trim() + " FROM " + sFrom.trim();
00210         if ( sWhere.trim() != "" ) sResult += " WHERE " + sWhere.trim();
00211         if ( sGroup.trim() != "" ) sResult += " GROUP BY " + sGroup.trim();
00212         if ( sHaving.trim() != "" ) sResult += " HAVING " + sHaving.trim();
00213         if ( sOrder.trim() != "" ) sResult += " ORDER BY " + sOrder.trim();
00214         return sResult;
00215     }
00216     
00220     public boolean isEmpty()
00221     {
00222         return ( sSelect.trim() == "" );
00223     }
00224     
00228     public void joinTo( Query qtoadd )
00229     {
00230         int i = 0;
00231         boolean bFlag = false;
00232         
00233         if ( pParameters.DEBUG > 2 ) System.out.println( "Query before joining : " + this.toString() );
00234 
00235         //Query qResult = new Query( pParameters );
00236         
00237         if ( !this.isEmpty() )
00238         {
00240             //qResult.setSelect ( this.getSelect() );
00241             /*For each dimension name in query to add...*/
00242             for ( i = 0; i < qtoadd.getDimensionFields().count(); i++ )
00243             {
00245                 if ( !qtoadd.getDimensionFields().getDimensionField( i ).isKey() )
00246                 {
00248                     if ( qtoadd.getDimensionFields().getDimensionField( i ).getName() != qtoadd.getDimensionFields().getDimensionField( i ).getValue() )
00249                     {
00250                         this.setSelect ( this.getSelect() + "," + (String)qtoadd.getDimensionFields().getDimensionField( i ).getValue() + " as " + (String)qtoadd.getDimensionFields().getDimensionField( i ).getName() );
00251                     }
00252                     else
00253                     {
00254                         this.setSelect ( this.getSelect() + "," + (String)qtoadd.getDimensionFields().getDimensionField( i ).getValue() );
00255                     }
00256                 }
00257             }
00258 
00260             //this.setFrom ( this.getFrom() );
00265             for ( i = 0; i < qtoadd.getDimensionTables().count(); i++ )
00266             {
00267                 if ( !this.getDimensionTables().isDimensionTable( qtoadd.getDimensionTables().getDimensionTable( i ).getName() ) )
00268                 {
00270                     if ( qtoadd.getDimensionTables().getDimensionTable( i ).getName() != qtoadd.getDimensionTables().getDimensionTable( i ).getValue() )
00271                     {
00272                         this.setFrom ( this.getFrom() + "," + qtoadd.getDimensionTables().getDimensionTable( i ).getValue() + " as " + (String)qtoadd.getDimensionTables().getDimensionTable( i ).getName() );
00273                     }
00274                     else
00275                     {
00276                         this.setFrom ( this.getFrom() + "," + qtoadd.getDimensionTables().getDimensionTable( i ).getValue() );
00277                     }
00278                 }
00279             }
00280             
00283             bFlag = true;
00284             i = 0;
00285             if (sFieldToJoin != qtoadd.getFieldToJoin() )
00286             {
00287                 while ( bFlag )
00288                 {
00289                     if ( i >= qtoadd.getDimensionFields().count() )
00290                     {
00291                         bFlag = false;
00292                     }
00293                     else
00294                     {
00295                         if ( qtoadd.getDimensionFields().getDimensionField( i ).isKey() )
00296                         {
00297                             if ( this.getWhere() != "" )
00298                             {
00299                                 this.setWhere( this.getWhere() + " and " + sFieldToJoin + "=" + qtoadd.getFieldToJoin() );
00300                             }
00301                             else
00302                             {
00303                                 this.setWhere( sFieldToJoin + "=" + qtoadd.getFieldToJoin() );
00304                             }
00305                             bFlag = false;
00306 
00307                         }
00308                     }
00309                     i++;
00310                 }
00311             }
00312             
00313             if ( this.getWhere() != "" )
00314             {
00315                 if ( qtoadd.getWhere() != "" )
00316                 {
00317                     this.setWhere( this.getWhere() + " and " + qtoadd.getWhere() );
00318                 }
00319             }
00320             else
00321             {
00322                 if ( qtoadd.getWhere() != "" )
00323                 {
00324                     this.setWhere( qtoadd.getWhere() );
00325                 }
00326             }
00327             
00331             if ( this.getGroup() != "" )
00332             {
00333                 this.setGroup ( this.getGroup() );
00334                 for ( i = 0; i < qtoadd.getDimensionFields().count(); i++ )
00335                 {
00336                     if ( !qtoadd.getDimensionFields().getDimensionField( i ).mustGroup() && !qtoadd.getDimensionFields().getDimensionField( i ).isKey() )
00337                     {
00338                         this.setGroup ( this.getGroup() + "," + qtoadd.getDimensionFields().getDimensionField( i ).getName() );
00339                     }
00340                 }
00341             }
00342             else
00343             {
00344                 if ( qtoadd.getGroup() != "" )
00345                 {
00346                     for ( i = 0; i < this.getDimensionFields().count(); i++ )
00347                     {
00348                         this.setGroup ( this.getGroup() + "," + this.getDimensionFields().getDimensionField( i ).getName() );
00349                     }
00350                     this.setGroup( this.getGroup() + "," + qtoadd.getGroup() );
00351                 }
00352             }
00353                 
00355             if ( this.getHaving() != "" )
00356             {
00357                 this.setHaving ( this.getHaving() );
00358                 if ( qtoadd.getHaving() != "" )
00359                 {
00360                     this.setHaving( this.getHaving() + " and " + qtoadd.getHaving() );
00361                 }
00362             }
00363             else
00364             {
00365                 if ( qtoadd.getHaving() != "" )
00366                 {
00367                     this.setHaving( this.getHaving() );
00368                 }
00369             }
00370             
00372             if ( this.getOrder() != "" )
00373             {
00374                 this.setOrder ( this.getOrder() );
00375                 if ( qtoadd.getOrder() != "" )
00376                 {
00377                     this.setOrder( this.getOrder() + "," + qtoadd.getOrder() );
00378                 }
00379             }
00380             else
00381             {
00382                 if ( qtoadd.getOrder() != "" )
00383                 {
00384                     this.setOrder( qtoadd.getOrder() );
00385                 }
00386             }
00387         }
00388         else
00389         {
00390             sSelect = qtoadd.getSelect();
00391             sFrom = qtoadd.getFrom();
00392             sWhere = qtoadd.getWhere();
00393             sGroup = qtoadd.getGroup();
00394             sHaving = qtoadd.getHaving();
00395             sOrder = qtoadd.getOrder();
00396         }
00397         
00398         for ( i = 0; i < qtoadd.getDimensionFields().count(); i++ )
00399         {
00400             pDimensionFields.addDimensionField( qtoadd.getDimensionFields().getDimensionField( i ) );
00401         }
00402         
00403         for ( i = 0; i < qtoadd.getDimensionTables().count(); i++ )
00404         {
00405             pDimensionTables.addDimensionTable( qtoadd.getDimensionTables().getDimensionTable( i ) );
00406         }
00407         
00408         if ( pParameters.DEBUG > 2 ) System.out.println( "Query after joining : " + this.toString() );
00409     }
00410     
00411     private String sName = "";
00412     private String sSelect = "";
00413     private String sFrom = "";
00414     private String sWhere = "";
00415     private String sGroup = "";
00416     private String sHaving = "";
00417     private String sOrder = "";
00418     
00419     private String sFieldToJoin;
00420     private DimensionFieldList pDimensionFields = new DimensionFieldList();
00421     private DimensionTableList pDimensionTables = new DimensionTableList();
00422     
00423     private ParameterSet pParameters;
00424 }
Accueil | Téléchargement | Manuel | Doc. technique | Sources CVS | Faq | Nous contacter
©2003 - All Rights Reserved