KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > hibernate > sql > SimpleSelect


1 //$Id: SimpleSelect.java,v 1.7 2005/06/15 02:57:03 oneovthafew Exp $
2
package org.hibernate.sql;
3
4 import java.util.ArrayList JavaDoc;
5 import java.util.HashMap JavaDoc;
6 import java.util.HashSet JavaDoc;
7 import java.util.Iterator JavaDoc;
8 import java.util.List JavaDoc;
9 import java.util.Map JavaDoc;
10 import java.util.Set JavaDoc;
11
12 import org.hibernate.LockMode;
13 import org.hibernate.dialect.Dialect;
14
15 /**
16  * An SQL <tt>SELECT</tt> statement with no table joins
17  *
18  * @author Gavin King
19  */

20 public class SimpleSelect {
21
22     public SimpleSelect(Dialect dialect) {
23         this.dialect = dialect;
24     }
25
26     //private static final Alias DEFAULT_ALIAS = new Alias(10, null);
27

28     private String JavaDoc tableName;
29     private String JavaDoc orderBy;
30     private Dialect dialect;
31     private LockMode lockMode = LockMode.READ;
32     private String JavaDoc comment;
33
34     private List JavaDoc columns = new ArrayList JavaDoc();
35     private Map JavaDoc aliases = new HashMap JavaDoc();
36     private List JavaDoc whereTokens = new ArrayList JavaDoc();
37
38     public SimpleSelect addColumns(String JavaDoc[] columnNames, String JavaDoc[] columnAliases) {
39         for ( int i=0; i<columnNames.length; i++ ) {
40             addColumn( columnNames[i], columnAliases[i] );
41         }
42         return this;
43     }
44
45     public SimpleSelect addColumns(String JavaDoc[] columns, String JavaDoc[] aliases, boolean[] ignore) {
46         for ( int i=0; i<ignore.length; i++ ) {
47             if ( !ignore[i] ) addColumn( columns[i], aliases[i] );
48         }
49         return this;
50     }
51
52     public SimpleSelect addColumns(String JavaDoc[] columnNames) {
53         for ( int i=0; i<columnNames.length; i++ ) {
54             addColumn( columnNames[i] );
55         }
56         return this;
57     }
58     public SimpleSelect addColumn(String JavaDoc columnName) {
59         columns.add(columnName);
60         //aliases.put( columnName, DEFAULT_ALIAS.toAliasString(columnName) );
61
return this;
62     }
63
64     public SimpleSelect addColumn(String JavaDoc columnName, String JavaDoc alias) {
65         columns.add(columnName);
66         aliases.put(columnName, alias);
67         return this;
68     }
69
70     public SimpleSelect setTableName(String JavaDoc tableName) {
71         this.tableName = tableName;
72         return this;
73     }
74
75     public SimpleSelect setLockMode(LockMode lockMode) {
76         this.lockMode = lockMode;
77         return this;
78     }
79
80     public SimpleSelect addWhereToken(String JavaDoc token) {
81         whereTokens.add(token);
82         return this;
83     }
84
85     public SimpleSelect addCondition(String JavaDoc lhs, String JavaDoc op, String JavaDoc rhs) {
86         whereTokens.add( lhs + ' ' + op + ' ' + rhs );
87         return this;
88     }
89
90     public SimpleSelect addCondition(String JavaDoc lhs, String JavaDoc condition) {
91         whereTokens.add( lhs + ' ' + condition );
92         return this;
93     }
94
95     public SimpleSelect addCondition(String JavaDoc[] lhs, String JavaDoc op, String JavaDoc[] rhs) {
96         for ( int i=0; i<lhs.length; i++ ) {
97             addCondition( lhs[i], op, rhs[i] );
98             if ( i!=lhs.length-1) whereTokens.add("and");
99         }
100         return this;
101     }
102
103     public SimpleSelect addCondition(String JavaDoc[] lhs, String JavaDoc condition) {
104         for ( int i=0; i<lhs.length; i++ ) {
105             addCondition( lhs[i], condition );
106             if ( i!=lhs.length-1) whereTokens.add("and");
107         }
108         return this;
109     }
110
111     public String JavaDoc toStatementString() {
112         StringBuffer JavaDoc buf = new StringBuffer JavaDoc(
113                 columns.size()*10 +
114                 tableName.length() +
115                 whereTokens.size() * 10 +
116                 10
117             );
118         
119         if ( comment!=null ) {
120             buf.append("/* ").append(comment).append(" */ ");
121         }
122         
123         buf.append("select ");
124         Set JavaDoc uniqueColumns = new HashSet JavaDoc();
125         Iterator JavaDoc iter = columns.iterator();
126         boolean appendComma = false;
127         while ( iter.hasNext() ) {
128             String JavaDoc col = (String JavaDoc) iter.next();
129             String JavaDoc alias = (String JavaDoc) aliases.get(col);
130             if ( uniqueColumns.add(alias==null ? col : alias) ) {
131                 if (appendComma) buf.append(", ");
132                 buf.append(col);
133                 if ( alias!=null && !alias.equals(col) ) {
134                     buf.append(" as ")
135                         .append(alias);
136                 }
137                 appendComma = true;
138             }
139         }
140         
141         buf.append(" from ")
142             .append( dialect.appendLockHint(lockMode, tableName) );
143         
144         if ( whereTokens.size() > 0 ) {
145             buf.append(" where ")
146                 .append( toWhereClause() );
147         }
148         
149         if (orderBy!=null) buf.append(orderBy);
150         
151         if (lockMode!=null) {
152             buf.append( dialect.getForUpdateString(lockMode) );
153         }
154
155         return dialect.transformSelectString( buf.toString() );
156     }
157
158     public String JavaDoc toWhereClause() {
159         StringBuffer JavaDoc buf = new StringBuffer JavaDoc( whereTokens.size() * 5 );
160         Iterator JavaDoc iter = whereTokens.iterator();
161         while ( iter.hasNext() ) {
162             buf.append( iter.next() );
163             if ( iter.hasNext() ) buf.append(' ');
164         }
165         return buf.toString();
166     }
167
168     public SimpleSelect setOrderBy(String JavaDoc orderBy) {
169         this.orderBy = orderBy;
170         return this;
171     }
172
173     public SimpleSelect setComment(String JavaDoc comment) {
174         this.comment = comment;
175         return this;
176     }
177
178 }
179
Popular Tags