1 24 25 package com.mckoi.database.interpret; 26 27 import com.mckoi.database.*; 28 import java.util.*; 29 30 45 46 public final class TableSelectExpression 47 implements java.io.Serializable , StatementTreeObject, Cloneable { 48 49 static final long serialVersionUID = 6946017316981412561L; 50 51 54 public boolean distinct = false; 55 56 60 public ArrayList columns = new ArrayList(); 61 62 65 public FromClause from_clause = new FromClause(); 66 67 70 public SearchExpression where_clause = new SearchExpression(); 71 72 73 74 78 public ArrayList group_by = new ArrayList(); 79 80 83 public Variable group_max = null; 84 85 88 public SearchExpression having_clause = new SearchExpression(); 89 90 91 95 int composite_function = -1; 97 100 boolean is_composite_all; 101 102 105 TableSelectExpression next_composite; 106 107 110 public TableSelectExpression() { 111 } 112 113 118 public void chainComposite(TableSelectExpression expression, 119 String composite, boolean is_all) { 120 this.next_composite = expression; 121 composite = composite.toLowerCase(); 122 if (composite.equals("union")) { 123 composite_function = CompositeTable.UNION; 124 } 125 else if (composite.equals("intersect")) { 126 composite_function = CompositeTable.INTERSECT; 127 } 128 else if (composite.equals("except")) { 129 composite_function = CompositeTable.EXCEPT; 130 } 131 else { 132 throw new Error ("Don't understand composite function '" + 133 composite + "'"); 134 } 135 is_composite_all = is_all; 136 } 137 138 139 140 141 143 146 private static void prepareAllInList( 147 List list, ExpressionPreparer preparer) throws DatabaseException { 148 for (int n = 0; n < list.size(); ++n) { 149 StatementTreeObject ob = (StatementTreeObject) list.get(n); 150 ob.prepareExpressions(preparer); 151 } 152 } 153 154 155 public void prepareExpressions(ExpressionPreparer preparer) 156 throws DatabaseException { 157 prepareAllInList(columns, preparer); 158 from_clause.prepareExpressions(preparer); 159 where_clause.prepareExpressions(preparer); 160 prepareAllInList(group_by, preparer); 161 having_clause.prepareExpressions(preparer); 162 163 if (next_composite != null) { 165 next_composite.prepareExpressions(preparer); 166 } 167 } 168 169 public Object clone() throws CloneNotSupportedException { 170 TableSelectExpression v = (TableSelectExpression) super.clone(); 171 if (columns != null) { 172 v.columns = (ArrayList) StatementTree.cloneSingleObject(columns); 173 } 174 if (from_clause != null) { 175 v.from_clause = (FromClause) from_clause.clone(); 176 } 177 if (where_clause != null) { 178 v.where_clause = (SearchExpression) where_clause.clone(); 179 } 180 if (group_by != null) { 181 v.group_by = (ArrayList) StatementTree.cloneSingleObject(group_by); 182 } 183 if (group_max != null) { 184 v.group_max = (Variable) group_max.clone(); 185 } 186 if (having_clause != null) { 187 v.having_clause = (SearchExpression) having_clause.clone(); 188 } 189 if (next_composite != null) { 190 v.next_composite = (TableSelectExpression) next_composite.clone(); 191 } 192 return v; 193 } 194 195 } 196 | Popular Tags |