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 }