| 1 package com.daffodilwoods.daffodildb.server.sql99.expression. 2 numericvalueexpression; 3 4 import java.math.*; 5 6 import com.daffodilwoods.daffodildb.server.serversystem.*; 7 import com.daffodilwoods.daffodildb.server.sql99.common.*; 8 import com.daffodilwoods.daffodildb.server.sql99.expression.rowvalueexpression.*; 9 import com.daffodilwoods.daffodildb.server.sql99.token.*; 10 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 11 import com.daffodilwoods.daffodildb.utils.field.*; 12 import com.daffodilwoods.database.resource.*; 13 import com.daffodilwoods.database.utility.P; 14 15 public class termSsolidus_2030455159factor 16 extends AbstractTerm 17 implements term, Datatypes, _sortspecificationAndselectSubList { 18 public factor _factor0; 19 public Ssolidus_2030455159 _Ssolidus_20304551591; 20 public term _term2; 21 22 public _Reference[] checkSemantic(_ServerSession parent) throws DException { 23 _Reference[] refs = super.checkSemantic(parent); 24 if (refs == null || refs.length == 0) { ByteComparison bc1 = _term2.getByteComparison(parent); 26 ByteComparison bc2 = _factor0.getByteComparison(parent); 27 checkSemantic(parent, bc1, bc2); 28 } 29 setAppropriateDatatypeAndCheck(parent); 30 return refs; 31 } 32 33 int dtType = -1; 34 private void setAppropriateDatatypeAndCheck(Object object) throws DException { 35 ColumnDetails[] cd = _term2.getColumnDetails(); 36 ColumnDetails[] Rcd = _factor0.getColumnDetails(); 37 int dataType1 = 0; 38 int dataType2 = 0; 39 switch (cd.length) { 40 case 0: switch (Rcd.length) { 42 case 0: dataType1 = getDataTypeForByte(childs[0].getByteComparison(object)); 44 dataType2 = getDataTypeForByte(childs[1].getByteComparison(object)); 45 break; 46 default: dataType1 = getDataTypeForByte(childs[0].getByteComparison(object)); 48 Rcd[0].setDatatype(Datatypes.BIGDECIMAL); 49 dataType2 = Datatypes.BIGDECIMAL; 50 } 51 break; 52 default: 53 switch (Rcd.length) { 54 case 0: dataType2 = getDataTypeForByte(childs[1].getByteComparison(object)); 56 dataType1 = Datatypes.BIGDECIMAL; 57 break; 58 default: 59 if ( (cd[0].getQuestion() && (Rcd[0].getQuestion()))) { 60 cd[0].setDatatype(BIGDECIMAL); Rcd[0].setDatatype(BIGDECIMAL); dataType1 = BIGDECIMAL; 63 dataType2 = BIGDECIMAL; 64 } 65 else 66 if (cd[0].getQuestion()) { 67 dataType2 = getDataTypeForByte(childs[1].getByteComparison(object)); 68 cd[0].setDatatype(BIGDECIMAL); dataType1 = BIGDECIMAL; 70 } 71 else 72 if (Rcd[0].getQuestion()) { 73 dataType1 = getDataTypeForByte(childs[0].getByteComparison(object)); 74 Rcd[0].setDatatype(BIGDECIMAL); dataType2 = BIGDECIMAL; 76 } 77 else { 78 dataType1 = getDataTypeForByte(childs[0].getByteComparison(object)); 79 dataType2 = getDataTypeForByte(childs[1].getByteComparison(object)); 80 81 } 82 } 83 } 84 if (dataType1 == -1 || dataType2 == -1) { dtType = -1; 86 return; 87 } 88 89 switch (dataType1) { 90 case BYTE: 91 case TINYINT: 92 switch (dataType2) { 93 case BYTE: 94 case TINYINT: 95 dtType = DOUBLE; 96 break; 97 case SHORT: 98 case SMALLINT: 99 dtType = DOUBLE; 100 break; 101 case INTEGER: 102 case INT: 103 dtType = DOUBLE; 104 break; 105 case LONG: 106 case BIGINT: 107 dtType = DOUBLE; 108 break; 109 case BIGDECIMAL: 110 case DEC: 111 case DECIMAL: 112 case NUMERIC: 113 dtType = BIGDECIMAL; 114 break; 115 case REAL: 116 dtType = DOUBLE; 117 break; 118 case DOUBLE: 119 case FLOAT: 120 case DOUBLEPRECISION: 121 dtType = DOUBLE; 122 break; 123 case CHARACTER: 124 case VARCHAR: 125 case CHAR: 126 case CHARACTERVARYING: 127 throw new DException("DSE87", new Object [] {"CHARACTER", "BYTE"}); 128 case DATE: 129 case TIME: 130 case TIMESTAMP: 131 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 132 "BYTE"}); 133 } 134 break; 135 case SHORT: 136 case SMALLINT: 137 switch (dataType2) { 138 case SHORT: 139 case SMALLINT: 140 dtType = DOUBLE; 141 break; 142 case BYTE: 143 case TINYINT: 144 dtType = DOUBLE; 145 break; 146 case INTEGER: 147 case INT: 148 dtType = DOUBLE; 149 break; 150 case LONG: 151 case BIGINT: 152 dtType = DOUBLE; 153 break; 154 case BIGDECIMAL: 155 case DEC: 156 case DECIMAL: 157 case NUMERIC: 158 dtType = BIGDECIMAL; 159 break; 160 case REAL: 161 dtType = DOUBLE; 162 break; 163 case DOUBLE: 164 case FLOAT: 165 case DOUBLEPRECISION: 166 dtType = DOUBLE; 167 break; 168 case CHARACTER: 169 case VARCHAR: 170 case CHAR: 171 case CHARACTERVARYING: 172 throw new DException("DSE87", new Object [] {"CHARACTER", "SHORT"}); 173 case DATE: 174 case TIME: 175 case TIMESTAMP: 176 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 177 "SHORT"}); 178 } 179 break; 180 case INTEGER: 181 case INT: 182 switch (dataType2) { 183 case SHORT: 184 case SMALLINT: 185 dtType = DOUBLE; 186 break; 187 case BYTE: 188 case TINYINT: 189 dtType = DOUBLE; 190 break; 191 case INTEGER: 192 case INT: 193 dtType = DOUBLE; 194 break; 195 case LONG: 196 case BIGINT: 197 dtType = DOUBLE; 198 break; 199 case BIGDECIMAL: 200 case DEC: 201 case DECIMAL: 202 case NUMERIC: 203 dtType = BIGDECIMAL; 204 break; 205 case REAL: 206 dtType = DOUBLE; 207 break; 208 case DOUBLE: 209 case FLOAT: 210 case DOUBLEPRECISION: 211 dtType = DOUBLE; 212 break; 213 case CHARACTER: 214 case VARCHAR: 215 case CHAR: 216 case CHARACTERVARYING: 217 throw new DException("DSE87", new Object [] {"CHARACTER", "INT"}); 218 case DATE: 219 case TIME: 220 case TIMESTAMP: 221 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 222 "INT"}); 223 } 224 break; 225 case LONG: 226 case BIGINT: 227 switch (dataType2) { 228 case SHORT: 229 case SMALLINT: 230 dtType = DOUBLE; 231 break; 232 case BYTE: 233 case TINYINT: 234 dtType = DOUBLE; 235 break; 236 case INTEGER: 237 case INT: 238 dtType = DOUBLE; 239 break; 240 case LONG: 241 case BIGINT: 242 dtType = DOUBLE; 243 break; 244 case BIGDECIMAL: 245 case DEC: 246 case DECIMAL: 247 case NUMERIC: 248 dtType = BIGDECIMAL; 249 break; 250 case REAL: 251 dtType = DOUBLE; 252 break; 253 case DOUBLE: 254 case FLOAT: 255 case DOUBLEPRECISION: 256 dtType = DOUBLE; 257 break; 258 case CHARACTER: 259 case VARCHAR: 260 case CHAR: 261 case CHARACTERVARYING: 262 throw new DException("DSE87", new Object [] {"CHARACTER", "LONG"}); 263 case DATE: 264 case TIME: 265 case TIMESTAMP: 266 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 267 "LONG"}); 268 } 269 break; 270 case BIGDECIMAL: 271 case DEC: 272 case DECIMAL: 273 case NUMERIC: 274 switch (dataType2) { 275 case SHORT: 276 case SMALLINT: 277 dtType = BIGDECIMAL; 278 break; 279 case INTEGER: 280 case INT: 281 dtType = BIGDECIMAL; 282 break; 283 case LONG: 284 case BIGINT: 285 dtType = BIGDECIMAL; 286 break; 287 case BYTE: 288 case TINYINT: 289 dtType = BIGDECIMAL; 290 break; 291 case DOUBLE: 292 case FLOAT: 293 case DOUBLEPRECISION: 294 dtType = BIGDECIMAL; 295 break; 296 case REAL: 297 dtType = BIGDECIMAL; 298 break; 299 case BIGDECIMAL: 300 case DEC: 301 case DECIMAL: 302 case NUMERIC: 303 dtType = BIGDECIMAL; 304 break; 305 case CHARACTER: 306 case VARCHAR: 307 case CHAR: 308 case CHARACTERVARYING: 309 throw new DException("DSE87", new Object [] {"CHARACTER", 310 "BIGDECIMAL"}); 311 case DATE: 312 case TIME: 313 case TIMESTAMP: 314 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 315 "LONG"}); 316 } 317 break; 318 case REAL: 319 switch (dataType2) { 320 case SHORT: 321 case SMALLINT: 322 dtType = DOUBLE; 323 break; 324 case BYTE: 325 case TINYINT: 326 dtType = DOUBLE; 327 break; 328 case INTEGER: 329 case INT: 330 dtType = DOUBLE; 331 break; 332 case LONG: 333 case BIGINT: 334 dtType = DOUBLE; 335 break; 336 case BIGDECIMAL: 337 case DEC: 338 case DECIMAL: 339 case NUMERIC: 340 dtType = BIGDECIMAL; 341 break; 342 case REAL: 343 dtType = DOUBLE; 344 break; 345 case DOUBLE: 346 case FLOAT: 347 case DOUBLEPRECISION: 348 dtType = DOUBLE; 349 break; 350 case CHARACTER: 351 case VARCHAR: 352 case CHAR: 353 case CHARACTERVARYING: 354 throw new DException("DSE87", new Object [] {"CHARACTER", "FLOAT"}); 355 case DATE: 356 case TIME: 357 case TIMESTAMP: 358 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 359 "FLOAT"}); 360 } 361 break; 362 case DOUBLE: 363 case FLOAT: 364 case DOUBLEPRECISION: 365 switch (dataType2) { 366 case BYTE: 367 case TINYINT: 368 dtType = DOUBLE; 369 break; 370 case SHORT: 371 case SMALLINT: 372 dtType = DOUBLE; 373 break; 374 case INTEGER: 375 case INT: 376 dtType = DOUBLE; 377 break; 378 case LONG: 379 case BIGINT: 380 dtType = DOUBLE; 381 break; 382 case BIGDECIMAL: 383 case DEC: 384 case DECIMAL: 385 case NUMERIC: 386 dtType = BIGDECIMAL; 387 break; 388 case REAL: 389 dtType = DOUBLE; 390 break; 391 case DOUBLE: 392 case FLOAT: 393 case DOUBLEPRECISION: 394 dtType = DOUBLE; 395 break; 396 case CHARACTER: 397 case VARCHAR: 398 case CHAR: 399 case CHARACTERVARYING: 400 throw new DException("DSE87", new Object [] {"CHARACTER", "DOUBLE"}); 401 case DATE: 402 case TIME: 403 case TIMESTAMP: 404 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 405 "DOUBLE"}); 406 } 407 break; 408 case CHARACTER: 409 case VARCHAR: 410 case CHAR: 411 case CHARACTERVARYING: 412 switch (dataType2) { 413 case SHORT: 414 case SMALLINT: 415 throw new DException("DSE87", new Object [] {"CHARACTER", "SHORT"}); 416 case INTEGER: 417 case INT: 418 throw new DException("DSE87", new Object [] {"CHARACTER", "INT"}); 419 case LONG: 420 case BIGINT: 421 throw new DException("DSE87", new Object [] {"CHARACTER", "LONG"}); 422 case BIGDECIMAL: 423 case DEC: 424 case DECIMAL: 425 case NUMERIC: 426 throw new DException("DSE87", new Object [] {"CHARACTER", 427 "BIGDECIMAL"}); 428 case REAL: 429 throw new DException("DSE87", new Object [] {"CHARACTER", "FLOAT"}); 430 case DOUBLE: 431 case FLOAT: 432 case DOUBLEPRECISION: 433 throw new DException("DSE87", new Object [] {"CHARACTER", "DOUBLE"}); 434 case DATE: 435 case TIME: 436 case TIMESTAMP: 437 throw new DException("DSE87", new Object [] {"CHARACTER", 438 "DATE/TIME/TIMESTAMP"}); 439 } 440 break; 441 case DATE: 442 case TIME: 443 case TIMESTAMP: 444 switch (dataType2) { 445 case SHORT: 446 case SMALLINT: 447 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 448 "SHORT"}); 449 case INTEGER: 450 case INT: 451 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 452 "INT"}); 453 case LONG: 454 case BIGINT: 455 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 456 "LONG"}); 457 case BIGDECIMAL: 458 case DEC: 459 case DECIMAL: 460 case NUMERIC: 461 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 462 "BIGDECIMAL"}); 463 case REAL: 464 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 465 "FLOAT"}); 466 case DOUBLE: 467 case FLOAT: 468 case DOUBLEPRECISION: 469 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 470 "DOUBLE"}); 471 case DATE: 472 case TIME: 473 case TIMESTAMP: 474 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 475 "DATE/TIME/TIMESTAMP"}); 476 } 477 break; 478 default: 479 throw new DException("DSE35", 480 new Object [] {StaticClass.getDataTypeName( 481 dataType1), 482 StaticClass.getDataTypeName(dataType2)}); 483 484 } 485 486 } 487 488 public void checkSemantic(_ServerSession parent, ByteComparison bc1, 489 ByteComparison bc2) throws DException { 490 super.checkSemantic(parent, bc1, bc2); 491 if (childs[1].getColumnDetails().length > 0) { 492 493 if ( (childs[1].getColumnDetails()[0].getType() == CONSTANT) && 494 (!childs[1].getColumnDetails()[0].getUnderLyingReference()) && 495 (!childs[1].getColumnDetails()[0].getQuestion()) && 496 (!childs[0].checkForSubQuery() && 497 !childs[0].getColumnDetails()[0].getQuestion())) { 498 VariableValues vv = new VariableValues(parent); 499 Object obj = ( (FieldBase) childs[1].run(vv)).getObject(); 500 if (obj instanceof Number ) 501 if ( ( (Number ) obj).doubleValue() == 0) { 502 throw new DException("DSE334", null); 503 } 504 } 505 } 506 } 507 508 public FieldBase getObject(int type1, int type2, Object result1, 509 Object result2) throws DException { 510 if (result2 instanceof Number ) 511 if ( ( (Number ) result2).doubleValue() == 0) { 512 throw new DException("DSE334", null); 513 } 514 515 try { 516 switch (type1) { 517 case BYTE: 518 case TINYINT: 519 byte operand0 = ( (Byte ) result1).byteValue(); 520 switch (type2) { 521 case BYTE: 522 case TINYINT: 523 double s11 = ( (Byte ) result2).doubleValue(); 524 return new FieldLiteral(new Double (operand0 / s11), DOUBLE); 525 case SHORT: 526 case SMALLINT: 527 double s1 = ( (Short ) result2).doubleValue(); 528 return new FieldLiteral(new Double (operand0 / s1), DOUBLE); 529 case INTEGER: 530 case INT: 531 double s2 = ( (Integer ) result2).doubleValue(); 532 return new FieldLiteral(new Double (operand0 / s2), DOUBLE); 533 case LONG: 534 case BIGINT: 535 double s3 = ( (Long ) result2).longValue(); 536 return new FieldLiteral(new Double (operand0 / s3), DOUBLE); 537 case BIGDECIMAL: 538 case DEC: 539 case DECIMAL: 540 case NUMERIC: 541 BigDecimal bbb = new BigDecimal(operand0 + ""); 542 return new FieldLiteral(bbb.divide( (BigDecimal) result2, 5, 0), 543 BIGDECIMAL); 544 case REAL: 545 float s4 = ( (Float ) result2).floatValue(); 546 return new FieldLiteral(new Double (operand0 / s4), DOUBLE); 547 case DOUBLE: 548 case FLOAT: 549 case DOUBLEPRECISION: 550 double s5 = ( (Double ) result2).doubleValue(); 551 return new FieldLiteral(new Double (operand0 / s5), DOUBLE); 552 case CHARACTER: 553 case VARCHAR: 554 case CHAR: 555 case CHARACTERVARYING: 556 throw new DException("DSE87", new Object [] {"CHARACTER", "BYTE"}); 557 case DATE: 558 case TIME: 559 case TIMESTAMP: 560 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 561 "BYTE"}); 562 } 563 break; 564 case SHORT: 565 case SMALLINT: 566 short operand = ( (Short ) result1).shortValue(); 567 switch (type2) { 568 case SHORT: 569 case SMALLINT: 570 double s1 = ( (Short ) result2).doubleValue(); 571 return new FieldLiteral(new Double (operand / s1), DOUBLE); 572 case BYTE: 573 case TINYINT: 574 double s11 = ( (Byte ) result2).doubleValue(); 575 return new FieldLiteral(new Double (operand / s11), DOUBLE); 576 case INTEGER: 577 case INT: 578 double s2 = ( (Integer ) result2).doubleValue(); 579 return new FieldLiteral(new Double (operand / s2), DOUBLE); 580 case LONG: 581 case BIGINT: 582 long s3 = ( (Long ) result2).longValue(); 583 return new FieldLiteral(new Double (operand / s3), DOUBLE); 584 case BIGDECIMAL: 585 case DEC: 586 case DECIMAL: 587 case NUMERIC: 588 BigDecimal bbb = new BigDecimal(operand + ""); 589 return new FieldLiteral(bbb.divide( (BigDecimal) result2, 5, 0), 590 BIGDECIMAL); 591 case REAL: 592 double s4 = ( (Float ) result2).doubleValue(); 593 return new FieldLiteral(new Double (operand / s4), DOUBLE); 594 case DOUBLE: 595 case FLOAT: 596 case DOUBLEPRECISION: 597 double s5 = ( (Double ) result2).doubleValue(); 598 return new FieldLiteral(new Double (operand / s5), DOUBLE); 599 case CHARACTER: 600 case VARCHAR: 601 case CHAR: 602 case CHARACTERVARYING: 603 throw new DException("DSE87", new Object [] {"CHARACTER", "SHORT"}); 604 case DATE: 605 case TIME: 606 case TIMESTAMP: 607 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 608 "SHORT"}); 609 } 610 break; 611 case INTEGER: 612 case INT: 613 int operand1 = ( (Integer ) result1).intValue(); 614 switch (type2) { 615 case SHORT: 616 case SMALLINT: 617 double s6 = ( (Short ) result2).doubleValue(); 618 return new FieldLiteral(new Double (operand1 / s6), DOUBLE); 619 case BYTE: 620 case TINYINT: 621 double s11 = ( (Byte ) result2).doubleValue(); 622 return new FieldLiteral(new Double ( (operand1 / s11)), DOUBLE); 623 case INTEGER: 624 case INT: 625 double operand2 = ( (Integer ) result2).doubleValue(); 626 return new FieldLiteral(new Double (operand1 / operand2), DOUBLE); 627 case LONG: 628 case BIGINT: 629 long operand3 = ( (Long ) result2).longValue(); 630 return new FieldLiteral(new Double (operand1 / operand3), DOUBLE); 631 case BIGDECIMAL: 632 case DEC: 633 case DECIMAL: 634 case NUMERIC: 635 BigDecimal bbb1 = new BigDecimal(operand1 + ""); 636 return new FieldLiteral(bbb1.divide( (BigDecimal) result2, 5, 0), 637 BIGDECIMAL); 638 case REAL: 639 double operand4 = ( (Double ) result2).doubleValue(); 640 return new FieldLiteral(new Double (operand1 / operand4), DOUBLE); 641 case DOUBLE: 642 case FLOAT: 643 case DOUBLEPRECISION: 644 double operand5 = ( (Double ) result2).doubleValue(); 645 return new FieldLiteral(new Double (operand1 / operand5), DOUBLE); 646 case CHARACTER: 647 case VARCHAR: 648 case CHAR: 649 case CHARACTERVARYING: 650 throw new DException("DSE87", new Object [] {"CHARACTER", "INT"}); 651 case DATE: 652 case TIME: 653 case TIMESTAMP: 654 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 655 "INT"}); 656 } 657 break; 658 case LONG: 659 case BIGINT: 660 long operand11 = ( (Long ) result1).longValue(); 661 switch (type2) { 662 case SHORT: 663 case SMALLINT: 664 double s7 = ( (Short ) result2).doubleValue(); 665 return new FieldLiteral(new Double (operand11 / s7), DOUBLE); 666 case BYTE: 667 case TINYINT: 668 double s11 = ( (Byte ) result2).doubleValue(); 669 return new FieldLiteral(new Double (operand11 / s11), DOUBLE); 670 case INTEGER: 671 case INT: 672 double operand6 = ( (Integer ) result2).doubleValue(); 673 return new FieldLiteral(new Double (operand11 / operand6), DOUBLE); 674 case LONG: 675 case BIGINT: 676 double operand7 = ( (Long ) result2).longValue(); 677 return new FieldLiteral(new Double (operand11 / operand7), DOUBLE); 678 case BIGDECIMAL: 679 case DEC: 680 case DECIMAL: 681 case NUMERIC: 682 BigDecimal bbb2 = new BigDecimal(operand11 + ""); 683 return new FieldLiteral(bbb2.divide( (BigDecimal) result2, 5, 0), 684 BIGDECIMAL); 685 case REAL: 686 double operand8 = ( (Float ) result2).doubleValue(); 687 return new FieldLiteral(new Double (operand11 / operand8), DOUBLE); 688 case DOUBLE: 689 case FLOAT: 690 case DOUBLEPRECISION: 691 double operand9 = ( (Double ) result2).doubleValue(); 692 return new FieldLiteral(new Double (operand11 / operand9), DOUBLE); 693 case CHARACTER: 694 case VARCHAR: 695 case CHAR: 696 case CHARACTERVARYING: 697 throw new DException("DSE87", new Object [] {"CHARACTER", "LONG"}); 698 case DATE: 699 case TIME: 700 case TIMESTAMP: 701 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 702 "LONG"}); 703 } 704 break; 705 case BIGDECIMAL: 706 case DEC: 707 case DECIMAL: 708 case NUMERIC: 709 switch (type2) { 710 case SHORT: 711 case SMALLINT: 712 double d1 = ( (Short ) result2).doubleValue(); 713 return new FieldLiteral( ( (BigDecimal) result1).divide(new 714 BigDecimal(d1), 5, 0), BIGDECIMAL); 715 case INTEGER: 716 case INT: 717 double d2 = ( (Integer ) result2).doubleValue(); 718 return new FieldLiteral( ( (BigDecimal) result1).divide(new 719 BigDecimal(d2), 5, 0), BIGDECIMAL); 720 case LONG: 721 case BIGINT: 722 723 return new FieldLiteral( ( (BigDecimal) result1).divide(new 724 BigDecimal("" + result2), 5, 0), BIGDECIMAL); case BYTE: 726 case TINYINT: 727 double d4 = ( (Byte ) result2).doubleValue(); 728 return new FieldLiteral( ( (BigDecimal) result1).divide(new 729 BigDecimal(d4), 5, 0), BIGDECIMAL); 730 case DOUBLE: 731 case FLOAT: 732 case DOUBLEPRECISION: 733 734 return new FieldLiteral( ( (BigDecimal) result1).divide(new 735 BigDecimal("" + result2), 5, 0), BIGDECIMAL); 736 case REAL: 737 738 return new FieldLiteral( ( (BigDecimal) result1).divide(new 739 BigDecimal("" + result2), 5, 0), BIGDECIMAL); 740 case BIGDECIMAL: 741 case DEC: 742 case DECIMAL: 743 case NUMERIC: 744 return new FieldLiteral( ( (BigDecimal) result1).divide( ( 745 BigDecimal) result2, 5, 0), BIGDECIMAL); 746 case CHARACTER: 747 case VARCHAR: 748 case CHAR: 749 case CHARACTERVARYING: 750 throw new DException("DSE87", new Object [] {"CHARACTER", 751 "BIGDECIMAL"}); 752 case DATE: 753 case TIME: 754 case TIMESTAMP: 755 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 756 "LONG"}); 757 } 758 break; 759 case REAL: 760 float operand111 = ( (Float ) result1).floatValue(); 761 switch (type2) { 762 case SHORT: 763 case SMALLINT: 764 short s8 = ( (Short ) result2).shortValue(); 765 return new FieldLiteral(new Double (operand111 / s8), DOUBLE); 766 case BYTE: 767 case TINYINT: 768 byte d4 = ( (Byte ) result2).byteValue(); 769 return new FieldLiteral(new Double (operand111 / d4), DOUBLE); 770 case INTEGER: 771 case INT: 772 int operand12 = ( (Integer ) result2).intValue(); 773 return new FieldLiteral(new Double (operand111 / operand12), 774 DOUBLE); 775 case LONG: 776 case BIGINT: 777 long operand13 = ( (Long ) result2).longValue(); 778 return new FieldLiteral(new Double (operand111 / operand13), 779 DOUBLE); 780 case BIGDECIMAL: 781 case DEC: 782 case DECIMAL: 783 case NUMERIC: 784 BigDecimal bbb3 = new BigDecimal(operand111 + ""); 785 return new FieldLiteral(bbb3.divide( (BigDecimal) result2, 5, 0), 786 BIGDECIMAL); 787 case REAL: 788 float operand14 = ( (Float ) result2).floatValue(); 789 return new FieldLiteral(new Double (operand111 / operand14), 790 DOUBLE); 791 case DOUBLE: 792 case FLOAT: 793 case DOUBLEPRECISION: 794 double operand15 = ( (Double ) result2).doubleValue(); 795 return new FieldLiteral(new Double (operand111 / operand15), 796 DOUBLE); 797 case CHARACTER: 798 case VARCHAR: 799 case CHAR: 800 case CHARACTERVARYING: 801 throw new DException("DSE87", new Object [] {"CHARACTER", "FLOAT"}); 802 case DATE: 803 case TIME: 804 case TIMESTAMP: 805 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 806 "FLOAT"}); 807 } 808 break; 809 case DOUBLE: 810 case FLOAT: 811 case DOUBLEPRECISION: 812 double operand1111 = ( (Double ) result1).doubleValue(); 813 switch (type2) { 814 case BYTE: 815 case TINYINT: 816 byte d4 = ( (Byte ) result2).byteValue(); 817 return new FieldLiteral(new Double (operand1111 / d4), DOUBLE); 818 case SHORT: 819 case SMALLINT: 820 short s9 = ( (Short ) result2).shortValue(); 821 return new FieldLiteral(new Double (operand1111 / s9), DOUBLE); 822 case INTEGER: 823 case INT: 824 int operand16 = ( (Integer ) result2).intValue(); 825 return new FieldLiteral(new Double (operand1111 / operand16), 826 DOUBLE); 827 case LONG: 828 case BIGINT: 829 long operand17 = ( (Long ) result2).longValue(); 830 return new FieldLiteral(new Double (operand1111 / operand17), 831 DOUBLE); 832 case BIGDECIMAL: 833 case DEC: 834 case DECIMAL: 835 case NUMERIC: 836 BigDecimal bbb4 = new BigDecimal(operand1111 + ""); 837 return new FieldLiteral(bbb4.divide( (BigDecimal) result2, 5, 0), 838 BIGDECIMAL); 839 case REAL: 840 float operand18 = ( (Float ) result2).floatValue(); 841 return new FieldLiteral(new Double (operand1111 / operand18), 842 DOUBLE); 843 case DOUBLE: 844 case FLOAT: 845 case DOUBLEPRECISION: 846 double operand19 = ( (Double ) result2).doubleValue(); 847 return new FieldLiteral(new Double (operand1111 / operand19), 848 DOUBLE); 849 case CHARACTER: 850 case VARCHAR: 851 case CHAR: 852 case CHARACTERVARYING: 853 throw new DException("DSE87", new Object [] {"CHARACTER", "DOUBLE"}); 854 case DATE: 855 case TIME: 856 case TIMESTAMP: 857 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 858 "DOUBLE"}); 859 } 860 break; 861 case CHARACTER: 862 case VARCHAR: 863 case CHAR: 864 case CHARACTERVARYING: 865 switch (type2) { 866 case SHORT: 867 case SMALLINT: 868 throw new DException("DSE87", new Object [] {"CHARACTER", "SHORT"}); 869 case INTEGER: 870 case INT: 871 throw new DException("DSE87", new Object [] {"CHARACTER", "INT"}); 872 case LONG: 873 case BIGINT: 874 throw new DException("DSE87", new Object [] {"CHARACTER", "LONG"}); 875 case BIGDECIMAL: 876 case DEC: 877 case DECIMAL: 878 case NUMERIC: 879 throw new DException("DSE87", new Object [] {"CHARACTER", 880 "BIGDECIMAL"}); 881 case REAL: 882 throw new DException("DSE87", new Object [] {"CHARACTER", "FLOAT"}); 883 case DOUBLE: 884 case FLOAT: 885 case DOUBLEPRECISION: 886 throw new DException("DSE87", new Object [] {"CHARACTER", "DOUBLE"}); 887 case DATE: 888 case TIME: 889 case TIMESTAMP: 890 throw new DException("DSE87", new Object [] {"CHARACTER", 891 "DATE/TIME/TIMESTAMP"}); 892 } 893 break; 894 case DATE: 895 case TIME: 896 case TIMESTAMP: 897 switch (type2) { 898 case SHORT: 899 case SMALLINT: 900 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 901 "SHORT"}); 902 case INTEGER: 903 case INT: 904 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 905 "INT"}); 906 case LONG: 907 case BIGINT: 908 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 909 "LONG"}); 910 case BIGDECIMAL: 911 case DEC: 912 case DECIMAL: 913 case NUMERIC: 914 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 915 "BIGDECIMAL"}); 916 case REAL: 917 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 918 "FLOAT"}); 919 case DOUBLE: 920 case FLOAT: 921 case DOUBLEPRECISION: 922 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 923 "DOUBLE"}); 924 case DATE: 925 case TIME: 926 case TIMESTAMP: 927 throw new DException("DSE87", new Object [] {"DATE/TIME/TIMESTAMP", 928 "DATE/TIME/TIMESTAMP"}); 929 } 930 } 931 throw new DException("DSE35", 932 new Object [] {StaticClass.getDataTypeName(type1), 933 StaticClass.getDataTypeName(type2)}); 934 } 935 catch (ArithmeticException ex) { 936 throw new DException("DSE334", null); 937 } 938 } 939 940 public int getDataType(Object object) throws DException { 941 return super.getDataType(object, "DIVIDE"); 942 } 943 944 public AbstractRowValueExpression[] getChilds() { 945 AbstractRowValueExpression[] childs = new AbstractRowValueExpression[] { 946 (AbstractRowValueExpression) _term2, 947 (AbstractRowValueExpression) _factor0}; 948 return childs; 949 } 950 951 968 public String toString() { 969 StringBuffer sb = new StringBuffer (); 970 sb.append(" "); 971 sb.append(_term2); 972 sb.append(" "); 973 sb.append(_Ssolidus_20304551591); 974 sb.append(" "); 975 sb.append(_factor0); 976 return sb.toString(); 977 } 978 979 public Object clone() throws CloneNotSupportedException { 980 termSsolidus_2030455159factor tempClass = new termSsolidus_2030455159factor(); 981 tempClass._factor0 = (factor) _factor0.clone(); 982 tempClass._Ssolidus_20304551591 = (Ssolidus_2030455159) 983 _Ssolidus_20304551591.clone(); 984 tempClass._term2 = (term) _term2.clone(); 985 return tempClass; 986 } 987 988 1331 1332 public ByteComparison getByteComparison(Object object) throws DException { 1333 1334 initializeChildren(); 1335 return new ByteComparison(false, 1336 new int[] {dtType}); 1337 } 1338 1339 public ColumnDetails[] getColumnDetails() throws DException { 1340 if (columnDetails == null) { 1341 ColumnDetails firstlistOfColumns[] = _term2.getColumnDetails(); 1342 ColumnDetails secondlistOfColumns[] = _factor0.getColumnDetails(); 1343 int length = firstlistOfColumns.length + secondlistOfColumns.length; 1344 columnDetails = new ColumnDetails[length]; 1345 int index = 0; 1346 for (; index < firstlistOfColumns.length; ++index) { 1347 columnDetails[index] = firstlistOfColumns[index]; 1348 } 1349 for (int i = 0; i < secondlistOfColumns.length; ++i, ++index) { 1350 columnDetails[index] = secondlistOfColumns[i]; 1351 } 1352 } 1353 1354 if (columnDetails.length == 1) 1355 return columnDetails; 1356 1357 ColumnDetails columnDetail = new ColumnDetails(); 1358 String str = toString(); 1359 columnDetail.setColumn(new String [] {str}); 1360 columnDetail.setType(FUNCTIONAL); 1361 columnDetail.setObject(this); 1362 columnDetail.setExpression(str); 1363 return new ColumnDetails[] { 1364 columnDetail}; 1365 } 1366 1367 public ColumnDetails[] getChildColumnDetails() throws DException { 1368 return columnDetails; 1369 } 1370 1371 1372 public ParameterInfo[] getParameterInfo() throws DException { 1373 ParameterInfo[] parameterInfo = super.getParameterInfo(); 1374 for (int i = 0; i < parameterInfo.length; i++) { 1375 if (parameterInfo[i].getQuestionMark()) { 1376 parameterInfo[i].setDataType(Datatypes.BIGDECIMAL); 1377 } 1378 } 1379 return parameterInfo; 1380 } 1381 1382} 1383 | Popular Tags |