1 package org.hibernate.sql; 3 4 import java.util.ArrayList ; 5 import java.util.HashMap ; 6 import java.util.HashSet ; 7 import java.util.Iterator ; 8 import java.util.List ; 9 import java.util.Map ; 10 import java.util.Set ; 11 12 import org.hibernate.LockMode; 13 import org.hibernate.dialect.Dialect; 14 15 20 public class SimpleSelect { 21 22 public SimpleSelect(Dialect dialect) { 23 this.dialect = dialect; 24 } 25 26 28 private String tableName; 29 private String orderBy; 30 private Dialect dialect; 31 private LockMode lockMode = LockMode.READ; 32 private String comment; 33 34 private List columns = new ArrayList (); 35 private Map aliases = new HashMap (); 36 private List whereTokens = new ArrayList (); 37 38 public SimpleSelect addColumns(String [] columnNames, String [] 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 [] columns, String [] 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 [] columnNames) { 53 for ( int i=0; i<columnNames.length; i++ ) { 54 addColumn( columnNames[i] ); 55 } 56 return this; 57 } 58 public SimpleSelect addColumn(String columnName) { 59 columns.add(columnName); 60 return this; 62 } 63 64 public SimpleSelect addColumn(String columnName, String alias) { 65 columns.add(columnName); 66 aliases.put(columnName, alias); 67 return this; 68 } 69 70 public SimpleSelect setTableName(String 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 token) { 81 whereTokens.add(token); 82 return this; 83 } 84 85 public SimpleSelect addCondition(String lhs, String op, String rhs) { 86 whereTokens.add( lhs + ' ' + op + ' ' + rhs ); 87 return this; 88 } 89 90 public SimpleSelect addCondition(String lhs, String condition) { 91 whereTokens.add( lhs + ' ' + condition ); 92 return this; 93 } 94 95 public SimpleSelect addCondition(String [] lhs, String op, String [] 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 [] lhs, String 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 toStatementString() { 112 StringBuffer buf = new StringBuffer ( 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 uniqueColumns = new HashSet (); 125 Iterator iter = columns.iterator(); 126 boolean appendComma = false; 127 while ( iter.hasNext() ) { 128 String col = (String ) iter.next(); 129 String alias = (String ) 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 toWhereClause() { 159 StringBuffer buf = new StringBuffer ( whereTokens.size() * 5 ); 160 Iterator 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 orderBy) { 169 this.orderBy = orderBy; 170 return this; 171 } 172 173 public SimpleSelect setComment(String comment) { 174 this.comment = comment; 175 return this; 176 } 177 178 } 179 | Popular Tags |