1 package com.daffodilwoods.daffodildb.server.sql99.dql.queryexpression; 2 3 import java.util.*; 4 5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 6 import com.daffodilwoods.daffodildb.server.serversystem.*; 7 import com.daffodilwoods.daffodildb.server.sql99.*; 8 import com.daffodilwoods.daffodildb.server.sql99.common.*; 9 import com.daffodilwoods.daffodildb.server.sql99.dql.execution.*; 10 import com.daffodilwoods.daffodildb.server.sql99.dql.plan.*; 11 import com.daffodilwoods.daffodildb.server.sql99.dql.plan.set.*; 12 import com.daffodilwoods.daffodildb.server.sql99.dql.plan.set.SetOperatorAbstract.*; 13 import com.daffodilwoods.daffodildb.server.sql99.dql.queryexpression.queryspecification.*; 14 import com.daffodilwoods.daffodildb.server.sql99.dql.semanticchecker.*; 15 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*; 16 import com.daffodilwoods.daffodildb.server.sql99.token.*; 17 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 18 import com.daffodilwoods.database.resource.*; 19 import com.daffodilwoods.database.sqlinitiator.*; 20 import com.daffodilwoods.database.utility.P; 21 22 58 59 public class queryexpressionbodySRESERVEDWORD1206543922OptsetquantifierOptdummyrulequeryterm extends SetOperatorAbstract implements com.daffodilwoods.daffodildb.utils.parser.StatementExecuter, non_joinqueryexpression, SetOperatorConstants, queryexpressionbody { 60 61 64 65 public queryterm _queryterm0; 66 public dummyrule _Optdummyrule1; 67 68 72 73 public setquantifier _Optsetquantifier2; 74 75 78 79 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439223; 80 81 84 85 public queryexpressionbody _queryexpressionbody4; 86 87 public String toString() { 88 StringBuffer sb = new StringBuffer (); 89 sb.append(" "); 90 sb.append(_queryexpressionbody4); 91 sb.append(" "); 92 sb.append(_SRESERVEDWORD12065439223); 93 sb.append(" "); 94 if (_Optsetquantifier2 != null) { 95 sb.append(_Optsetquantifier2); 96 } 97 sb.append(" "); 98 if (_Optdummyrule1 != null) { 99 sb.append(_Optdummyrule1); 100 } 101 sb.append(" "); 102 sb.append(_queryterm0); 103 return sb.toString(); 104 } 105 106 public Object clone() throws CloneNotSupportedException { 107 queryexpressionbodySRESERVEDWORD1206543922OptsetquantifierOptdummyrulequeryterm tempClass = new queryexpressionbodySRESERVEDWORD1206543922OptsetquantifierOptdummyrulequeryterm(); 108 tempClass._queryterm0 = (queryterm) _queryterm0.clone(); 109 if (_Optdummyrule1 != null) { 110 tempClass._Optdummyrule1 = (dummyrule) _Optdummyrule1.clone(); 111 } 112 if (_Optsetquantifier2 != null) { 113 tempClass._Optsetquantifier2 = (setquantifier) _Optsetquantifier2.clone(); 114 } 115 tempClass._SRESERVEDWORD12065439223 = (SRESERVEDWORD1206543922) _SRESERVEDWORD12065439223.clone(); 116 tempClass._queryexpressionbody4 = (queryexpressionbody) _queryexpressionbody4.clone(); 117 return tempClass; 118 } 119 120 133 134 private booleanvalueexpression getClonedBVE(booleanvalueexpression bve) throws DException { 135 booleanvalueexpression clonedBVE = null; 136 try { 137 if (bve != null) { 138 clonedBVE = (booleanvalueexpression) bve.clone(); 139 changeColumnDetails(clonedBVE.getColumnDetails(), _queryexpressionbody4.getColumnDetails(), _queryterm0.getColumnDetails()); 140 } 141 } catch (CloneNotSupportedException ex) { 142 throw new DException("DSE3524", null); 143 } 144 return clonedBVE; 145 } 146 147 152 153 private int isDistinctOrAll() throws DException { 154 int distinctOrAll = (_Optsetquantifier2 == null) ? DISTINCT 155 : ( (String ) _Optsetquantifier2.run(null)).equalsIgnoreCase("all") ? ALL : DISTINCT; 156 return distinctOrAll; 157 } 158 159 164 private int isUnionOrExcept() throws DException { 165 String unionOrExcept = (String ) _SRESERVEDWORD12065439223.run(null); 166 int except = (unionOrExcept.equalsIgnoreCase("union")) ? UNION : EXCEPT; 167 return except; 168 } 169 170 218 219 public _TablePlan getExecutionPlan(_ServerSession session, booleanvalueexpression bve, _DatedFramework datedFrameWork, _Order order, ColumnDetails[] cdsWithActualTableDetails, ConditionArray conditionArray) throws DException, DException { 220 booleanvalueexpression clonedBVE = getClonedBVE(bve); 221 if (clonedBVE != null) { 222 cdsWithActualTableDetails = GeneralPurposeStaticClass.getCombinedCDArray(cdsWithActualTableDetails, clonedBVE.getColumnDetails()); 223 } 224 ConditionArray clonedConditionArray = getClonedConditionArray(conditionArray, clonedBVE); 225 _DatedFramework clonedDatedFrameWork = getClonedDatedFrameWork(datedFrameWork); 226 int distinctOrAll = isDistinctOrAll(); 227 int exceptOrUnion = isUnionOrExcept(); 228 ComparatorAndOrder comparatorAndOrder = getAdjustedSelectOrder(order, exceptOrUnion, distinctOrAll, session); 229 _Order[] ordersForBothQueries = (comparatorAndOrder == null) ? new _Order[] {null, null} 230 : comparatorAndOrder.order; 231 232 233 234 235 _TablePlan tPlan1 = _queryexpressionbody4.getExecutionPlan(session, bve, datedFrameWork, ordersForBothQueries[0], GeneralPurposeStaticClass.getCombinedCDArray(cdsWithActualTableDetails, GeneralPurposeStaticClass.getCombinedCDArray(clonedLeftColumnDetails,clonedLeftOrderColumnDetails)), conditionArray); 236 _TablePlan tPlan2 = _queryterm0.getExecutionPlan(session, clonedBVE, clonedDatedFrameWork, ordersForBothQueries[1], GeneralPurposeStaticClass.getCombinedCDArray(cdsWithActualTableDetails,GeneralPurposeStaticClass.getCombinedCDArray( clonedRightColumnDetails,clonedRightOrderColumnDetails)) , clonedConditionArray); 237 238 239 240 SetOperatorPlan sop = new SetOperatorPlan(tPlan1, tPlan2, distinctOrAll, exceptOrUnion, getReferences(getAllTableDetails()), comparatorAndOrder == null ? null : comparatorAndOrder.comparator, clonedLeftColumnDetails, clonedRightColumnDetails, appropriateDataTypes, appropriateSizes, ordersForBothQueries[0] == null ? clonedLeftColumnDetails : ordersForBothQueries[0].getKeyColumnDetails(), ordersForBothQueries[1] == null ? clonedRightColumnDetails : ordersForBothQueries[1].getKeyColumnDetails()); 241 sop.setOriginalColumnDetails(_queryexpressionbody4.getSelectedColumns(), _queryterm0.getSelectedColumns(), ordersForBothQueries[0], ordersForBothQueries[1]); 242 243 return sop; 244 } 245 246 254 255 private _DatedFramework getClonedDatedFrameWork(_DatedFramework datedFrameWork) throws DException { 256 try { 257 if (datedFrameWork != null) { 258 return (_DatedFramework) datedFrameWork.clone(); 259 } 260 } catch (CloneNotSupportedException ex) { 261 throw new DException("DSE3524", null); 262 } 263 return datedFrameWork; 264 } 265 266 274 275 private ConditionArray getClonedConditionArray(ConditionArray conditionArray, booleanvalueexpression clonedBVE) throws DException { 276 ConditionArray clonedArray = new ConditionArray(); 277 if (clonedBVE != null) { 278 clonedArray.addCondition(clonedBVE); 279 } 280 return clonedArray; 281 } 282 283 299 private ComparatorAndOrder getAdjustedSelectOrder(_Order order, int exceptOrUnion, int distinctOrAll, _ServerSession serverSession) throws DException { 300 311 312 if (exceptOrUnion == UNION && distinctOrAll == ALL && order == null) { 313 return null; 314 } 315 316 clonedLeftOrderColumnDetails=SemanticChecker.getClonedColumns(_queryexpressionbody4.getSelectedColumns()); 317 clonedRightOrderColumnDetails= SemanticChecker.getClonedColumns( _queryterm0.getSelectedColumns()); 318 return exceptOrUnion == UNION && distinctOrAll == ALL && order != null ? getOrderWhenUnionAllwithOrderby(order,clonedLeftOrderColumnDetails, clonedRightOrderColumnDetails, serverSession): getAdjustedSelectOrder(order, clonedLeftOrderColumnDetails, clonedRightOrderColumnDetails,serverSession); 319 } 320 321 348 public _Reference[] checkSemantic(_ServerSession session, _OrderByClause orderClause0, boolean checkUserRight,boolean checkSetOperatorPresent) throws DException { 349 _Reference[] leftRef = _queryexpressionbody4.checkSemantic(session, null, checkUserRight,true); 350 _Reference[] rightRef = _queryterm0.checkSemantic(session, null, checkUserRight,true); _Reference[] references = GeneralPurposeStaticClass.getJointReferences(leftRef, rightRef); 352 ColumnDetails[] leftColDetails = _queryexpressionbody4.getSelectedColumns(); 353 ColumnDetails[] rightColDetails = _queryterm0.getSelectedColumns(); 354 355 try{ 356 SemanticChecker.checkCardinalityAndDataTypeComptability(leftColDetails, rightColDetails); 357 } catch (DException ex) { 358 if (ex.getDseCode().equalsIgnoreCase("DSE6001")) { if (! (_Optsetquantifier2 != null && ( (String ) _SRESERVEDWORD12065439223.run(null)).equalsIgnoreCase("Union") && ( (String ) _Optsetquantifier2.run(null)).equalsIgnoreCase("ALL"))) { 360 throw ex; 361 } 362 } else { 363 throw ex; 364 } 365 } 366 370 clonedLeftColumnDetails = SemanticChecker.getClonedColumns(leftColDetails); 371 clonedRightColumnDetails = SemanticChecker.getClonedColumns(rightColDetails); 372 if (references==null){ 373 if ( ( (String ) _SRESERVEDWORD12065439223.run(null)).equalsIgnoreCase("union")) { 374 initializeAppropriateDataTypeAndSizeForUnion(); 375 deligateCall(appropriateDataTypes, appropriateSizes); 376 } else { 377 initializeAppropriateDataTypeAndSize(); 378 } 379 if (orderClause0 != null) { 380 ColumnDetails[] orderKeyColDetails = orderClause0.getKeyColumnDetails(); 381 SemanticChecker.checkingForOrder(orderKeyColDetails); 382 SemanticChecker.checkSemanticCheckingForOrderInSetOperators(leftColDetails, orderClause0.getKeyColumnDetails()); 383 } 384 } 385 return references; 386 } 387 388 public void setDataTypesForSetOperatorQuery(_OrderByClause orderClause0) throws DException { 389 if ( ( (String ) _SRESERVEDWORD12065439223.run(null)).equalsIgnoreCase("union")) { 390 initializeAppropriateDataTypeAndSizeForUnion(); 391 deligateCall(appropriateDataTypes, appropriateSizes); 392 } else { 393 initializeAppropriateDataTypeAndSize(); 394 } 395 if (orderClause0 != null) { 396 ColumnDetails[] orderKeyColDetails = orderClause0.getKeyColumnDetails(); 397 SemanticChecker.checkingForOrder(orderKeyColDetails); 398 SemanticChecker.checkSemanticCheckingForOrderInSetOperators(_queryexpressionbody4.getSelectedColumns(), orderClause0.getKeyColumnDetails()); 399 } 400 } 401 402 411 412 private boolean deligateCall(int[] appropriateDataTypes0, int[] appropriateSizes0) throws DException { 413 boolean result = false; 414 if (_queryexpressionbody4 instanceof queryexpressionbodySRESERVEDWORD1206543922OptsetquantifierOptdummyrulequeryterm) { 415 result = ( (queryexpressionbodySRESERVEDWORD1206543922OptsetquantifierOptdummyrulequeryterm) _queryexpressionbody4).initializeDataTypeAndSize(appropriateDataTypes0, appropriateSizes0); 416 } else if (_queryexpressionbody4 instanceof queryexpressionbodySRESERVEDWORD1206543922OptsetquantifierOptdummyrulequeryprimary) { 417 result = ( (queryexpressionbodySRESERVEDWORD1206543922OptsetquantifierOptdummyrulequeryprimary) _queryexpressionbody4).initializeDataTypeAndSize(appropriateDataTypes0, appropriateSizes0); 418 } 419 if (_queryterm0 instanceof queryexpressionbodySRESERVEDWORD1206543922OptsetquantifierOptdummyrulequeryterm) { 420 ( (queryexpressionbodySRESERVEDWORD1206543922OptsetquantifierOptdummyrulequeryterm) _queryterm0).initializeDataTypeAndSize(appropriateDataTypes0, appropriateSizes0); 421 } else if (_queryterm0 instanceof queryexpressionbodySRESERVEDWORD1206543922OptsetquantifierOptdummyrulequeryprimary) { 422 ( (queryexpressionbodySRESERVEDWORD1206543922OptsetquantifierOptdummyrulequeryprimary) _queryterm0).initializeDataTypeAndSize(appropriateDataTypes0, appropriateSizes0); 423 } 424 return result; 425 } 426 427 441 public boolean initializeDataTypeAndSize(int[] appropriateDataTypes0, int[] appropriateSizes0) throws DException { 442 appropriateDataTypes = appropriateDataTypes0; 443 appropriateSizes = appropriateSizes0; 444 boolean b = deligateCall(appropriateDataTypes0, appropriateSizes0); 445 boolean union = ( (String ) _SRESERVEDWORD12065439223.run(null)).equalsIgnoreCase("union"); 446 if (union || b) { 447 for (int i = 0; i < clonedLeftColumnDetails.length; i++) { 448 clonedLeftColumnDetails[i].setDatatype(appropriateDataTypes0[i]); 449 clonedRightColumnDetails[i].setDatatype(appropriateDataTypes0[i]); 450 clonedLeftColumnDetails[i].setSize(appropriateSizes0[i]); 451 clonedRightColumnDetails[i].setSize(appropriateSizes0[i]); 452 } 453 } 454 return union || b; 455 } 456 457 470 471 private void initializeAppropriateDataTypeAndSizeForUnion() throws DException{ 472 int length = clonedLeftColumnDetails.length; 473 appropriateDataTypes = new int[length]; 474 appropriateSizes = new int[length]; 475 for (int i = 0; i < length; i++) { 476 int dt1 = clonedLeftColumnDetails[i].getDatatype(); 477 int dt2 = clonedRightColumnDetails[i].getDatatype(); 478 479 appropriateDataTypes[i] = dt1 > dt2 ? dt1 : dt2; 480 clonedLeftColumnDetails[i].setDataTypeForSetOperators(appropriateDataTypes[i]); 481 clonedRightColumnDetails[i].setDataTypeForSetOperators(appropriateDataTypes[i]); 482 int sz1 = clonedLeftColumnDetails[i].getSize(); 483 int sz2 = clonedRightColumnDetails[i].getSize(); 484 appropriateSizes[i] = sz1 > sz2 ? sz1 : sz2; 485 clonedLeftColumnDetails[i].setSizeForSetOperators(appropriateSizes[i]); 486 clonedRightColumnDetails[i].setSizeForSetOperators(appropriateSizes[i]); 487 if(clonedRightColumnDetails[i].getType() != TypeConstants.REFERENCE) 488 clonedLeftColumnDetails[i].setByteComparison(false); 489 } 490 } 491 492 493 505 506 public ComparatorAndOrder getComparatorAndOrderForNormalOrder(ColumnDetails[] columnDetailsLeft, ColumnDetails[] columnDetailsRight, _ServerSession serverSession, boolean[] columnOrder) throws DException { 507 _Order leftQueryOrder = new SelectOrder(columnDetailsLeft, columnOrder); 508 _Order rightQueryOrder = new SelectOrder(columnDetailsRight, columnOrder); 509 return new ComparatorAndOrder(getComparableComparator(_queryexpressionbody4.getSelectedColumns(), _queryterm0.getSelectedColumns(), columnOrder, serverSession), new _Order[] {leftQueryOrder, rightQueryOrder}); 510 } 511 512 524 public ComparatorAndOrder getComparatorAndOrderForRearrangedOrder(ColumnDetails[] columnDetailsLeft, ColumnDetails[] columnDetailsRight, _ServerSession serverSession, boolean[] orderSpecifications) throws DException { 525 _Order derivedOrderLeft = new SelectOrder(columnDetailsLeft, orderSpecifications, true); 526 _Order derivedOrderRight = new SelectOrder(columnDetailsRight, orderSpecifications, true); 527 return new ComparatorAndOrder(getComparableComparator(adjust(_queryexpressionbody4.getSelectedColumns(), columnDetailsLeft), adjust(_queryterm0.getSelectedColumns(), columnDetailsRight), orderSpecifications, serverSession), new _Order[] {derivedOrderLeft, derivedOrderRight}); 528 } 529 530 544 public ComparatorAndOrder getComparatorAndOrderForAlreadyAdjustedOrder(_Order order, ColumnDetails[] columnDetailsLeft, ColumnDetails[] columnDetailsRight, _ServerSession serverSession, boolean[] orderSpecifications) throws DException { 545 _Order derivedOrderRight = new SelectOrder(columnDetailsRight, orderSpecifications, true); 546 547 _Order derivedOrderLeft = new SelectOrder(columnDetailsLeft,orderSpecifications,true); 548 549 550 551 ColumnDetails[] cd = adjust(_queryterm0.getSelectedColumns(),columnDetailsRight); 552 ColumnDetails[] cdLeft = adjust(_queryexpressionbody4.getSelectedColumns(),columnDetailsLeft); 553 554 555 return new ComparatorAndOrder(getComparableComparator(cdLeft, cd, orderSpecifications, serverSession), new _Order[] {derivedOrderLeft, derivedOrderRight}); 556 } 557 558 566 567 private ColumnDetails[] adjust(ColumnDetails[] source, ColumnDetails[] target) throws DException { 568 int length = target.length; 569 ColumnDetails[] result = new ColumnDetails[length]; 570 for (int i = 0; i < length; i++) { 571 for (int j = 0; j < source.length; j++) { 572 if (source[j].getTable() == target[i].getTable() && source[j].getAppropriateColumn().equalsIgnoreCase(target[i].getAppropriateColumn()) && result[i] == null) { 573 result[i] = source[j]; 574 break; 575 } 576 } 577 } 578 return result; 579 } 580 581 582 583 584 593 602 607 608 609 public ColumnDetails[] getSelectedColumns() throws DException { 610 return clonedLeftColumnDetails; 611 } 612 613 619 620 public ColumnDetails[] getColumnDetails() throws DException { 621 ColumnDetails columnDetails1[] = _queryexpressionbody4.getColumnDetails(); 622 ColumnDetails columnDetails2[] = _queryterm0.getColumnDetails(); 623 return GeneralPurposeStaticClass.getCombinedCDArray(columnDetails1, columnDetails2); 624 } 625 626 public Object [] getParameters(Object object) throws DException { 627 Object [] first = _queryexpressionbody4.getParameters(object); 628 Object [] second = _queryterm0.getParameters(object); 629 return GeneralPurposeStaticClass.getCombinedArray(first, second); 630 } 631 632 public void getColumnsIncluded(ArrayList aList) throws DException { 633 _queryexpressionbody4.getColumnsIncluded(aList); 634 _queryterm0.getColumnsIncluded(aList); 635 } 636 637 public void getTablesIncluded(ArrayList aList) throws DException { 638 _queryexpressionbody4.getTablesIncluded(aList); 639 _queryterm0.getTablesIncluded(aList); 640 } 641 642 public ParameterInfo[] getParameterInfo() throws DException { 643 ParameterInfo[] info1 = _queryexpressionbody4.getParameterInfo(); 644 ParameterInfo[] info2 = _queryterm0.getParameterInfo(); 645 return GeneralPurposeStaticClass.getCombinedParameterInfoArray(info1, info2); 646 } 647 648 public _Reference[] getReferences(TableDetails[] tableDetails) throws DException { 649 _Reference[] first = _queryexpressionbody4.getReferences(tableDetails); 650 _Reference[] second = _queryterm0.getReferences(tableDetails); 651 return GeneralPurposeStaticClass.getJointReferences(first, second); 652 } 653 654 658 659 public void setDefaultValues(_VariableValueOperations variableValueOperation) throws DException { 660 _queryexpressionbody4.setDefaultValues(variableValueOperation); 661 } 662 663 public _ColumnCharacteristics getColumnCharacteristics(Object object) throws DException { 664 return _queryexpressionbody4.getColumnCharacteristics(object); 665 } 666 667 public void setFKeyColumnDetails(ColumnDetails[] fKeyColumns) throws DException { 668 _queryexpressionbody4.setFKeyColumnDetails(fKeyColumns); 669 } 670 671 public TableDetails[] getAllTableDetails() throws DException { 672 return _queryexpressionbody4.getAllTableDetails(); 673 } 674 675 public boolean hasConstantSelectedColumn(booleanvalueexpression bve) throws DException{ 676 return _queryexpressionbody4.hasConstantSelectedColumn(bve) || _queryterm0.hasConstantSelectedColumn(bve); 677 } 678 } 679 | Popular Tags |