View Javadoc

1   package uba.db.sql.language;
2   
3   import org.apache.commons.lang.builder.EqualsBuilder;
4   import org.apache.commons.lang.builder.HashCodeBuilder;
5   
6   /***
7    * Representa una sentencia <i>SELECT</i>.
8    * 
9    * @version $Revision: 1.8 $
10   */
11  public class Select implements Sentence, ValueList {
12      private DisplayColumns displayColumns;
13      private SelectionSource source;
14      private SelectionCriteria criteria;
15  
16      /***
17       * Crea una representación de una sentencia <i>SELECT</i>, los
18       * colaboradores de este constructor representan la sentencia de la
19       * siguiente manera:
20       * <code>SELECT <b>displayColumns</b> FROM <b>selectionSource</b> WHERE <b>selectionCriteria</b></code>
21       * 
22       * @param displayColumns
23       *            las columnas que se mostraran en el resultado.
24       * @param selectionSource
25       *            los datos desde donde se obtendran los resultados.
26       * @param selectionCriteria
27       *            el criterio de seleccion que se le aplicará a esos datos.
28       */
29      public Select(DisplayColumns displayColumns, SelectionSource selectionSource,
30              SelectionCriteria selectionCriteria) {
31          this.displayColumns = displayColumns;
32          this.source = selectionSource;
33          this.criteria = selectionCriteria;
34      }
35  
36      /***
37       * Este constructor equivale a: <i>Select(displayColumns, selectionSource,
38       * new NullSelectionCriteria())</i>
39       * 
40       * @see #Select(DisplayColumns, SelectionSource, SelectionCriteria)
41       */
42      public Select(DisplayColumns displayColumns, SelectionSource selectionSource) {
43          this(displayColumns, selectionSource, new NullSelectionCriteria());
44      }
45  
46      /***
47       * Este constructor equivale a: <i>Select(new DisplayAllColumns(),
48       * selectionSource, new NullSelectionCriteria())</i>
49       * 
50       * @see #Select(DisplayColumns, TableSelectionSource, SelectionCriteria)
51       */
52      public Select(SelectionSource selectionSource) {
53          this(new DisplayAllColumns(), selectionSource);
54      }
55  
56      /***
57       * Este constructor equivale a: <i>Select(new DisplayAllColumns(),
58       * selectionSource, selectionCriteria)</i>
59       * 
60       * @see #Select(DisplayColumns, SelectionSource, SelectionCriteria)
61       */
62      public Select(SelectionSource selectionSource, SelectionCriteria selectionCriteria) {
63          this(new DisplayAllColumns(), selectionSource, selectionCriteria);
64      }
65  
66      /***
67       * Retorna la columnas que se mostrarán en el resultado del select.
68       */
69      public DisplayColumns displayColumns() {
70          return displayColumns;
71      }
72  
73      /***
74       * Retorna el criterio que se utilizará para seleccionar las filas.
75       */
76      public SelectionCriteria criteria() {
77          return criteria;
78      }
79  
80      /***
81       * Retorna el "origen" (las tablas) desde donde se obtendrán las filas.
82       */
83      public SelectionSource source() {
84          return source;
85      }
86  
87      /***
88       * @see java.lang.Object#hashCode()
89       */
90      public int hashCode() {
91          return HashCodeBuilder.reflectionHashCode(this);
92      }
93  
94      /***
95       * @see java.lang.Object#equals(java.lang.Object)
96       */
97      public boolean equals(Object obj) {
98          return EqualsBuilder.reflectionEquals(this, obj);
99      }
100 
101     /***
102      * @see java.lang.Object#toString()
103      */
104     public String toString() {
105         StringBuffer buff = new StringBuffer();
106         buff.append("SELECT ").append(displayColumns);
107         if (source != null) {
108             buff.append(" FROM ").append(source);
109             if (!(criteria instanceof NullSelectionCriteria)) {
110                 buff.append(" WHERE ").append(criteria);
111             }
112         }
113 
114         return buff.toString();
115     }
116 
117     /***
118      * @see uba.db.sql.language.Sentence#accept(uba.db.sql.language.Visitor)
119      */
120     public void accept(Visitor visitor) {
121         visitor.visitSelect(this);
122     }
123 }