| 1 package com.daffodilwoods.daffodildb.server.sql99.dql.plan.set; 2 3 import com.daffodilwoods.daffodildb.client.*; 4 import com.daffodilwoods.daffodildb.server.serversystem.*; 5 import com.daffodilwoods.daffodildb.server.sql99.common.*; 6 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 7 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.set.*; 8 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.table.*; 9 import com.daffodilwoods.daffodildb.server.sql99.dql.listenerevents.*; 10 import com.daffodilwoods.daffodildb.server.sql99.dql.plan.*; 11 import com.daffodilwoods.daffodildb.server.sql99.dql.plan.table.*; 12 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*; 13 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 14 import com.daffodilwoods.daffodildb.utils.comparator.*; 15 import com.daffodilwoods.database.resource.*; 16 import com.daffodilwoods.database.sqlinitiator.*; 17 import com.daffodilwoods.database.utility.*; 18 19 57 58 public class SetOperatorPlan extends PlanExceptionAbstract implements _TablePlanAdditional { 59 60 63 64 private _TablePlan queryExpressionBodyPlan; 65 66 69 70 private _TablePlan queryTermPlan; 71 72 75 76 private ColumnDetails[] columnDetails1; 77 78 81 82 private ColumnDetails[] columnDetails2; 83 84 88 89 private ColumnDetails[] orderLeftCD; 90 91 95 96 private ColumnDetails[] orderRightCD; 97 98 101 102 private int distinctOrAll; 103 104 107 108 private int union_int_except; 109 110 114 115 private _Reference[] references; 116 117 121 122 private SuperComparator superComparator; 123 124 128 129 private int[] appropriateDataTypes; 130 131 135 136 137 private int[] appropriateSizes; 138 139 142 143 private ColumnDetails[] leftOriginal; 144 145 148 149 private ColumnDetails[] rightOriginal; 150 151 154 155 private _Order leftOrder; 156 157 160 161 private _Order rightOrder; 162 163 public SetOperatorPlan(_TablePlan tablePlanLeft0, _TablePlan tablePlanRight0, int distinctOrAll0, int union_int_except0, _Reference[] references0, SuperComparator superComparator0, ColumnDetails[] columnDetailsLeft0, ColumnDetails[] columnDetailsRight0, int[] appropriateDataTypes0, int[] appropriateSizes0, ColumnDetails[] orderLeftCD0, ColumnDetails[] orderRightCD0) { 164 queryExpressionBodyPlan = tablePlanLeft0; 165 queryTermPlan = tablePlanRight0; 166 distinctOrAll = distinctOrAll0; 167 union_int_except = union_int_except0; 168 references = references0; 169 superComparator = superComparator0; 170 columnDetails1 = columnDetailsLeft0; 171 columnDetails2 = columnDetailsRight0; 172 orderLeftCD = orderLeftCD0; 173 orderRightCD = orderRightCD0; 174 childPlans = new _TablePlan[] {queryExpressionBodyPlan, queryTermPlan}; 175 appropriateDataTypes = appropriateDataTypes0; 176 appropriateSizes = appropriateSizes0; 177 } 178 179 187 188 public void setOriginalColumnDetails(ColumnDetails[] leftOriginal0, ColumnDetails[] rightOriginal0, _Order leftOrder0, _Order rightOrder0) { 189 leftOriginal = leftOriginal0; 190 rightOriginal = rightOriginal0; 191 leftOrder = leftOrder0; 192 rightOrder = rightOrder0; 193 } 194 195 201 202 public int getType() throws DException { 203 throw new UnsupportedOperationException ("MEthod not supported"); 204 } 205 206 213 214 public long getRowCount(_ServerSession serverSession) throws DException { 215 long rowOfqueryexpressionbody = queryExpressionBodyPlan.getRowCount(serverSession); 216 long rowOfqueryprimary = queryTermPlan.getRowCount(serverSession); 217 long returnValue = 0; 218 switch (union_int_except) { 219 case SetOperatorConstants.UNION: 220 if (distinctOrAll == SetOperatorConstants.DISTINCT) { 221 returnValue = rowOfqueryexpressionbody > rowOfqueryprimary ? rowOfqueryexpressionbody : rowOfqueryprimary; 222 } else { 223 return rowOfqueryexpressionbody + rowOfqueryprimary; 224 } 225 case SetOperatorConstants.EXCEPT: 226 case SetOperatorConstants.INTERSECT: 227 returnValue = rowOfqueryexpressionbody > rowOfqueryprimary ? rowOfqueryprimary : rowOfqueryexpressionbody; 228 } 229 return returnValue; 230 } 231 232 237 238 public String getVerifier() throws DException { 239 StringBuffer buffer = new StringBuffer (); 240 inc(); 241 buffer.append(tabW("[ SET_OPERATOR_PALN ]")); 242 buffer.append("\n" + queryTermPlan.getVerifier()); 243 buffer.append("\n" + queryExpressionBodyPlan.getVerifier()); 244 inc(); 245 buffer.append(tab("[Distinct Check = " + superComparator + "]")); 246 buffer.append(tab("[ColumnDetailsLeft = " + P.print(columnDetails1)) + "]"); 247 buffer.append(tab("[ColumnDetailsRight = " + P.print(columnDetails2)) + "]"); 248 dec(); 249 buffer.append(tab("[/ SET_OPERATOR_PALN ]")); 250 dec(); 251 return buffer.toString(); 252 } 253 254 260 261 public _QueryPlan getQueryPlan() throws DException { 262 _QueryPlan cplan = queryExpressionBodyPlan.getQueryPlan(); 263 _QueryPlan[] cplans = cplan == null ? null : new _QueryPlan[] {cplan}; 264 return new QueryPlan("QueryExpressionBodySRESERVEDWORD1206543922OptSetQuantifierOptCorrespondingSpecQueryTerm", cplans, "" + null, "" + null); 265 } 266 267 272 273 public _Order getOrder() throws DException { 274 return null; 275 } 276 277 289 290 private _SelectIterator getUnionSetOperatorObject(_ServerSession session, int distinctOrAll) throws DException { 291 _Iterator leftIterator = (_Iterator) queryExpressionBodyPlan.execute(session); 292 _Iterator rightIterator = (_Iterator) queryTermPlan.execute(session); 293 UnionAllOrderedIterator iterator = null; 294 if (distinctOrAll == SetOperatorConstants.DISTINCT) { 295 iterator = new UnionDistinctIterator(leftIterator, rightIterator, (_Reference[]) columnDetails1, (_Reference[]) columnDetails2, superComparator, appropriateDataTypes, appropriateSizes, (_Reference[]) orderLeftCD, (_Reference[]) orderRightCD, leftOrder.getComparator(), rightOrder.getComparator()); 296 } else if (superComparator == null) { 297 iterator = new UnionAllIterator(leftIterator, rightIterator, (_Reference[]) columnDetails1, (_Reference[]) columnDetails2, appropriateDataTypes, appropriateSizes, (_Reference[]) orderLeftCD, (_Reference[]) orderRightCD); 298 } else { 299 iterator = new UnionAllOrderedIterator(leftIterator, rightIterator, (_Reference[]) columnDetails1, (_Reference[]) columnDetails2, superComparator, appropriateDataTypes, appropriateSizes, (_Reference[]) orderLeftCD, (_Reference[]) orderRightCD); 300 } 301 iterator.setOriginalColumnDetails(leftOriginal, rightOriginal); 302 return new SelectIterator(columnDetails1, iterator); 303 } 304 305 314 315 private _SelectIterator getExceptSetOperatorObject(_ServerSession session, int distinctOrAll) throws DException { 316 _Iterator leftIterator = (_Iterator) queryExpressionBodyPlan.execute(session); 317 _Iterator rightIterator = (_Iterator) queryTermPlan.execute(session); 318 if (distinctOrAll == SetOperatorConstants.DISTINCT) { 319 return new SelectIterator(columnDetails1, new ExceptDistinctIterator(leftIterator, rightIterator, (_Reference[]) columnDetails1, (_Reference[]) columnDetails2, superComparator, orderLeftCD, orderRightCD, leftOrder.getComparator(), rightOrder.getComparator())); 320 } 321 return new SelectIterator(columnDetails1, new ExceptAllIterator(leftIterator, rightIterator, (_Reference[]) columnDetails1, (_Reference[]) columnDetails2, superComparator, orderLeftCD, orderRightCD, leftOrder.getComparator(), rightOrder.getComparator())); 322 323 } 324 325 334 335 private _SelectIterator getIntersectSetOperatorObject(_ServerSession session, int distinctOrAll) throws DException { 336 _Iterator leftIterator = (_Iterator) queryExpressionBodyPlan.execute(session); 337 _Iterator rightIterator = (_Iterator) queryTermPlan.execute(session); 338 _SelectIterator selectIterator = distinctOrAll == SetOperatorConstants.DISTINCT ? 339 new SelectIterator(columnDetails1, new IntersectDistinctIterator(leftIterator, rightIterator, (_Reference[]) columnDetails1, (_Reference[]) columnDetails2, superComparator, orderLeftCD, orderRightCD)) : 340 new SelectIterator(columnDetails1, new IntersectAllIterator(leftIterator, rightIterator, (_Reference[]) columnDetails1, (_Reference[]) columnDetails2, superComparator, orderLeftCD, orderRightCD)); 341 return selectIterator; 342 } 343 344 349 350 public _TablePlan[] getChildTablePlans() throws DException { 351 childPlans = new _TablePlan[] {queryExpressionBodyPlan, queryTermPlan}; 352 return new _TablePlan[] {this}; 353 } 354 355 361 362 public double getCost(_ServerSession session) throws DException { 363 return queryExpressionBodyPlan.getCost(session) + queryTermPlan.getCost(session); 364 } 365 366 375 376 public double getCost(_ServerSession session, booleanvalueexpression condition, long estimatedRows) throws DException { 377 long rows = getRowCount(session); 378 double conditionCost = condition.getCost(rows, false); 379 return conditionCost + (queryTermPlan.getCost(session) + queryExpressionBodyPlan.getCost(session)); 380 381 } 382 383 389 390 public _Iterator execute(_ServerSession session) throws DException { 391 _SelectIterator selIter = 392 union_int_except == SetOperatorConstants.UNION 393 ? getUnionSetOperatorObject(session, distinctOrAll) 394 : union_int_except == SetOperatorConstants.EXCEPT ? 395 getExceptSetOperatorObject(session, distinctOrAll) : 396 getIntersectSetOperatorObject(session, distinctOrAll); 397 _Iterator iterator = (_Iterator) selIter; 398 return iterator; 399 } 400 401 410 411 public _Iterator execute(_ServerSession session, booleanvalueexpression condition) throws DException { 412 return getNonIndexedFilteredIterator(execute(session), session, condition); 413 } 414 415 420 421 public double getCostWithoutOrder(_ServerSession session, booleanvalueexpression condition, long estimatedRowCount) throws DException { 422 return getCost(session, condition, estimatedRowCount); 423 } 424 425 public double getCostWithoutOrder(_ServerSession session) throws DException { 426 return getCost(session); 427 } 428 429 public _Iterator executeWithOutOrder(_ServerSession session, booleanvalueexpression condition) throws DException { 430 return execute(session, condition); 431 } 432 433 public _Iterator executeWithoutOrder(_ServerSession session) throws DException { 434 return execute(session); 435 } 436 446 447 public long getEstimatedRows(booleanvalueexpression conditionArg, long estimatedRowCount, _ServerSession serverSession) throws DException { 448 return conditionArg.getEstimatedRows(estimatedRowCount*getRowCount(serverSession)); 449 } 450 451 457 458 public _Iterator executeWithOutOrderPlan(_ServerSession session, booleanvalueexpression condition) throws DException { 459 return executeWithOutOrder(session,condition); 460 } 461 462 public _Iterator executeWithoutOrderPlan(_ServerSession session) throws DException { 463 return executeWithoutOrder(session); 464 } 465 466 public _Iterator executePlan(_ServerSession session) throws DException { 467 return execute(session); 468 } 469 470 public _Iterator executePlan(_ServerSession session, booleanvalueexpression condition) throws DException { 471 return execute(session,condition); 472 } 473 474 } 475 | Popular Tags |