1 /* 2 * Copyright 2015-2018 HuntLabs.cn 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 module hunt.sql.dialect.postgresql.visitor.PGOutputVisitor; 17 18 import hunt.sql.ast; 19 import hunt.sql.ast.expr; 20 import hunt.sql.ast.statement; 21 // import hunt.sql.dialect.oracle.ast.OracleDataTypeIntervalDay; 22 // import hunt.sql.dialect.oracle.ast.OracleDataTypeIntervalYear; 23 // import hunt.sql.dialect.oracle.ast.clause; 24 // import hunt.sql.dialect.oracle.ast.expr; 25 // import hunt.sql.dialect.oracle.ast.stmt; 26 // import hunt.sql.dialect.oracle.parser.OracleFunctionDataType; 27 // import hunt.sql.dialect.oracle.parser.OracleProcedureDataType; 28 // import hunt.sql.dialect.oracle.visitor.OracleASTVisitor; 29 import hunt.sql.dialect.postgresql.ast.expr.PGBoxExpr; 30 import hunt.sql.dialect.postgresql.ast.expr.PGCidrExpr; 31 import hunt.sql.dialect.postgresql.ast.expr.PGCircleExpr; 32 import hunt.sql.dialect.postgresql.ast.expr.PGExtractExpr; 33 import hunt.sql.dialect.postgresql.ast.expr.PGInetExpr; 34 import hunt.sql.dialect.postgresql.ast.expr.PGLineSegmentsExpr; 35 import hunt.sql.dialect.postgresql.ast.expr.PGMacAddrExpr; 36 import hunt.sql.dialect.postgresql.ast.expr.PGPointExpr; 37 import hunt.sql.dialect.postgresql.ast.expr.PGPolygonExpr; 38 import hunt.sql.dialect.postgresql.ast.expr.PGTypeCastExpr; 39 import hunt.sql.dialect.postgresql.ast.stmt; 40 import hunt.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock; 41 // import hunt.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.FetchClause; 42 // import hunt.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause; 43 // import hunt.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause; 44 import hunt.sql.visitor.SQLASTOutputVisitor; 45 import hunt.sql.util.FnvHash; 46 import hunt.sql.util.DBType; 47 import hunt.sql.dialect.postgresql.visitor.PGASTVisitor; 48 49 import hunt.Byte; 50 import hunt.collection; 51 import hunt.logging; 52 import hunt.String; 53 import hunt.util.Appendable; 54 import hunt.util.Common; 55 import hunt.text; 56 57 import std.array; 58 import std.format; 59 import std.uni; 60 import std.algorithm.searching; 61 62 public class PGOutputVisitor : SQLASTOutputVisitor , PGASTVisitor//, OracleASTVisitor 63 { 64 alias visit = SQLASTOutputVisitor.visit; 65 alias endVisit = SQLASTOutputVisitor.endVisit; 66 67 public this(Appendable appender){ 68 super(appender); 69 this.dbType = DBType.POSTGRESQL.name; 70 } 71 72 public this(Appendable appender, bool parameterized){ 73 super(appender, parameterized); 74 this.dbType = DBType.POSTGRESQL.name; 75 } 76 77 override 78 public void endVisit(PGSelectQueryBlock.WindowClause x) { 79 80 } 81 82 override 83 public bool visit(PGSelectQueryBlock.WindowClause x) { 84 print0(ucase ? "WINDOW " : "window "); 85 x.getName().accept(this); 86 print0(ucase ? " AS " : " as "); 87 for (int i = 0; i < x.getDefinition().size(); ++i) { 88 if (i != 0) { 89 println(", "); 90 } 91 print('('); 92 x.getDefinition().get(i).accept(this); 93 print(')'); 94 } 95 return false; 96 } 97 98 override 99 public void endVisit(PGSelectQueryBlock.FetchClause x) { 100 101 } 102 103 override 104 public bool visit(PGSelectQueryBlock.FetchClause x) { 105 print0(ucase ? "FETCH " : "fetch "); 106 if (PGSelectQueryBlock.FetchClause.Option.FIRST == (x.getOption())) { 107 print0(ucase ? "FIRST " : "first "); 108 } else if (PGSelectQueryBlock.FetchClause.Option.NEXT == (x.getOption())) { 109 print0(ucase ? "NEXT " : "next "); 110 } 111 x.getCount().accept(this); 112 print0(ucase ? " ROWS ONLY" : " rows only"); 113 return false; 114 } 115 116 override 117 public void endVisit(PGSelectQueryBlock.ForClause x) { 118 119 } 120 121 override 122 public bool visit(PGSelectQueryBlock.ForClause x) { 123 print0(ucase ? "FOR " : "for "); 124 if (PGSelectQueryBlock.ForClause.Option.UPDATE == (x.getOption())) { 125 print0(ucase ? "UPDATE " : "update "); 126 } else if (PGSelectQueryBlock.ForClause.Option.SHARE == (x.getOption())) { 127 print0(ucase ? "SHARE " : "share "); 128 } 129 130 if (x.getOf().size() > 0) { 131 for (int i = 0; i < x.getOf().size(); ++i) { 132 if (i != 0) { 133 println(", "); 134 } 135 x.getOf().get(i).accept(this); 136 } 137 } 138 139 if (x.isNoWait()) { 140 print0(ucase ? " NOWAIT" : " nowait"); 141 } 142 143 return false; 144 } 145 146 147 public bool visit(PGSelectQueryBlock x) { 148 print0(ucase ? "SELECT " : "select "); 149 150 if (SQLSetQuantifier.ALL == x.getDistionOption()) { 151 print0(ucase ? "ALL " : "all "); 152 } else if (SQLSetQuantifier.DISTINCT == x.getDistionOption()) { 153 print0(ucase ? "DISTINCT " : "distinct "); 154 155 if (x.getDistinctOn() !is null && x.getDistinctOn().size() > 0) { 156 print0(ucase ? "ON " : "on "); 157 printAndAccept!SQLExpr((x.getDistinctOn()), ", "); 158 } 159 } 160 161 printSelectList(x.getSelectList()); 162 163 if (x.getInto() !is null) { 164 println(); 165 if (x.getIntoOption().name.length != 0) { 166 print0(x.getIntoOption().name()); 167 print(' '); 168 } 169 170 print0(ucase ? "INTO " : "into "); 171 x.getInto().accept(this); 172 } 173 174 if (x.getFrom() !is null) { 175 println(); 176 print0(ucase ? "FROM " : "from "); 177 x.getFrom().accept(this); 178 } 179 180 if (x.getWhere() !is null) { 181 println(); 182 print0(ucase ? "WHERE " : "where "); 183 x.getWhere().accept(this); 184 } 185 186 if (x.getGroupBy() !is null) { 187 println(); 188 x.getGroupBy().accept(this); 189 } 190 191 if (x.getWindow() !is null) { 192 println(); 193 x.getWindow().accept(this); 194 } 195 196 if (x.getOrderBy() !is null) { 197 println(); 198 x.getOrderBy().accept(this); 199 } 200 201 if (x.getLimit() !is null) { 202 println(); 203 x.getLimit().accept(this); 204 } 205 206 if (x.getFetch() !is null) { 207 println(); 208 x.getFetch().accept(this); 209 } 210 211 if (x.getForClause() !is null) { 212 println(); 213 x.getForClause().accept(this); 214 } 215 216 return false; 217 } 218 219 override 220 public bool visit(SQLTruncateStatement x) { 221 print0(ucase ? "TRUNCATE TABLE " : "truncate table "); 222 if (x.isOnly()) { 223 print0(ucase ? "ONLY " : "only "); 224 } 225 226 printlnAndAccept!(SQLExprTableSource)((x.getTableSources()), ", "); 227 228 if (x.getRestartIdentity() !is null) { 229 if (x.getRestartIdentity().booleanValue()) { 230 print0(ucase ? " RESTART IDENTITY" : " restart identity"); 231 } else { 232 print0(ucase ? " CONTINUE IDENTITY" : " continue identity"); 233 } 234 } 235 236 if (x.getCascade() !is null) { 237 if (x.getCascade().booleanValue()) { 238 print0(ucase ? " CASCADE" : " cascade"); 239 } else { 240 print0(ucase ? " RESTRICT" : " restrict"); 241 } 242 } 243 return false; 244 } 245 246 override 247 public void endVisit(PGDeleteStatement x) { 248 249 } 250 251 override 252 public bool visit(PGDeleteStatement x) { 253 if (x.getWith() !is null) { 254 x.getWith().accept(this); 255 println(); 256 } 257 258 print0(ucase ? "DELETE FROM " : "delete from "); 259 260 if (x.isOnly()) { 261 print0(ucase ? "ONLY " : "only "); 262 } 263 264 printTableSourceExpr(x.getTableName()); 265 266 if (x.getAlias() !is null) { 267 print0(ucase ? " AS " : " as "); 268 print0(x.getAlias()); 269 } 270 271 SQLTableSource using = x.getUsing(); 272 if (using !is null) { 273 println(); 274 print0(ucase ? "USING " : "using "); 275 using.accept(this); 276 } 277 278 if (x.getWhere() !is null) { 279 println(); 280 print0(ucase ? "WHERE " : "where "); 281 this.indentCount++; 282 x.getWhere().accept(this); 283 this.indentCount--; 284 } 285 286 if (x.isReturning()) { 287 println(); 288 print0(ucase ? "RETURNING *" : "returning *"); 289 } 290 291 return false; 292 } 293 294 override 295 public void endVisit(PGInsertStatement x) { 296 297 } 298 299 override 300 public bool visit(PGInsertStatement x) { 301 if (x.getWith() !is null) { 302 x.getWith().accept(this); 303 println(); 304 } 305 306 print0(ucase ? "INSERT INTO " : "insert into "); 307 308 x.getTableSource().accept(this); 309 310 printInsertColumns(x.getColumns()); 311 312 if (x.getValues() !is null) { 313 println(); 314 print0(ucase ? "VALUES " : "values "); 315 printlnAndAccept!(ValuesClause)((x.getValuesList()), ", "); 316 } else { 317 if (x.getQuery() !is null) { 318 println(); 319 x.getQuery().accept(this); 320 } 321 } 322 323 List!(SQLExpr) onConflictTarget = x.getOnConflictTarget(); 324 List!(SQLUpdateSetItem) onConflictUpdateSetItems = x.getOnConflictUpdateSetItems(); 325 bool onConflictDoNothing = x.isOnConflictDoNothing(); 326 327 if (onConflictDoNothing 328 || (onConflictTarget !is null && onConflictTarget.size() > 0) 329 || (onConflictUpdateSetItems !is null && onConflictUpdateSetItems.size() > 0)) { 330 println(); 331 print0(ucase ? "ON CONFLICT" : "on conflict"); 332 333 if ((onConflictTarget !is null && onConflictTarget.size() > 0)) { 334 print0(" ("); 335 printAndAccept!SQLExpr((onConflictTarget), ", "); 336 print(')'); 337 } 338 339 SQLName onConflictConstraint = x.getOnConflictConstraint(); 340 if (onConflictConstraint !is null) { 341 print0(ucase ? " ON CONSTRAINT " : " on constraint "); 342 printExpr(onConflictConstraint); 343 } 344 345 SQLExpr onConflictWhere = x.getOnConflictWhere(); 346 if (onConflictWhere !is null) { 347 print0(ucase ? " WHERE " : " where "); 348 printExpr(onConflictWhere); 349 } 350 351 if (onConflictDoNothing) { 352 print0(ucase ? " DO NOTHING" : " do nothing"); 353 } else if ((onConflictUpdateSetItems !is null && onConflictUpdateSetItems.size() > 0)) { 354 print0(ucase ? " UPDATE SET " : " update set "); 355 printAndAccept!SQLUpdateSetItem((onConflictUpdateSetItems), ", "); 356 } 357 } 358 359 if (x.getReturning() !is null) { 360 println(); 361 print0(ucase ? "RETURNING " : "returning "); 362 x.getReturning().accept(this); 363 } 364 365 return false; 366 } 367 368 override 369 public void endVisit(PGSelectStatement x) { 370 371 } 372 373 override 374 public bool visit(PGSelectStatement x) { 375 return visit(cast(SQLSelectStatement) x); 376 } 377 378 override 379 public void endVisit(PGUpdateStatement x) { 380 381 } 382 383 override 384 public bool visit(PGUpdateStatement x) { 385 SQLWithSubqueryClause with_p = x.getWith(); 386 if (with_p !is null) { 387 visit(with_p); 388 println(); 389 } 390 391 print0(ucase ? "UPDATE " : "update "); 392 393 if (x.isOnly()) { 394 print0(ucase ? "ONLY " : "only "); 395 } 396 397 printTableSource(x.getTableSource()); 398 399 println(); 400 print0(ucase ? "SET " : "set "); 401 for (int i = 0, size = x.getItems().size(); i < size; ++i) { 402 if (i != 0) { 403 print0(", "); 404 } 405 SQLUpdateSetItem item = x.getItems().get(i); 406 visit(item); 407 } 408 409 SQLTableSource from = x.getFrom(); 410 if (from !is null) { 411 println(); 412 print0(ucase ? "FROM " : "from "); 413 printTableSource(from); 414 } 415 416 SQLExpr where = x.getWhere(); 417 if (where !is null) { 418 println(); 419 indentCount++; 420 print0(ucase ? "WHERE " : "where "); 421 printExpr(where); 422 indentCount--; 423 } 424 425 List!(SQLExpr) returning = x.getReturning(); 426 if (returning.size() > 0) { 427 println(); 428 print0(ucase ? "RETURNING " : "returning "); 429 printAndAccept!SQLExpr((returning), ", "); 430 } 431 432 return false; 433 } 434 435 override 436 public void endVisit(PGSelectQueryBlock x) { 437 438 } 439 440 override 441 public bool visit(PGFunctionTableSource x) { 442 x.getExpr().accept(this); 443 444 if (x.getAlias() !is null) { 445 print0(ucase ? " AS " : " as "); 446 print0(x.getAlias()); 447 } 448 449 if (x.getParameters().size() > 0) { 450 print('('); 451 printAndAccept!SQLParameter((x.getParameters()), ", "); 452 print(')'); 453 } 454 455 return false; 456 } 457 458 override 459 public void endVisit(PGFunctionTableSource x) { 460 461 } 462 463 override 464 public void endVisit(PGTypeCastExpr x) { 465 466 } 467 468 override 469 public bool visit(PGTypeCastExpr x) { 470 SQLExpr expr = x.getExpr(); 471 SQLDataType dataType = x.getDataType(); 472 473 if (dataType.nameHashCode64() == FnvHash.Constants.VARBIT) { 474 dataType.accept(this); 475 print(' '); 476 printExpr(expr); 477 return false; 478 } 479 480 if (expr !is null) { 481 if (cast(SQLBinaryOpExpr)(expr) !is null) { 482 print('('); 483 expr.accept(this); 484 print(')'); 485 } else if (cast(PGTypeCastExpr)(expr) !is null && dataType.getArguments().size() == 0) { 486 dataType.accept(this); 487 print('('); 488 visit(cast(PGTypeCastExpr) expr); 489 print(')'); 490 return false; 491 } else { 492 expr.accept(this); 493 } 494 } 495 print0("::"); 496 dataType.accept(this); 497 return false; 498 } 499 500 override 501 public void endVisit(PGValuesQuery x) { 502 503 } 504 505 override 506 public bool visit(PGValuesQuery x) { 507 print0(ucase ? "VALUES(" : "values("); 508 printAndAccept!SQLExpr((x.getValues()), ", "); 509 print(')'); 510 return false; 511 } 512 513 override 514 public void endVisit(PGExtractExpr x) { 515 516 } 517 518 override 519 public bool visit(PGExtractExpr x) { 520 print0(ucase ? "EXTRACT (" : "extract ("); 521 print0(x.getField().name()); 522 print0(ucase ? " FROM " : " from "); 523 x.getSource().accept(this); 524 print(')'); 525 return false; 526 } 527 528 override 529 public bool visit(PGBoxExpr x) { 530 print0(ucase ? "BOX " : "box "); 531 x.getValue().accept(this); 532 return false; 533 } 534 535 override 536 public void endVisit(PGBoxExpr x) { 537 538 } 539 540 override 541 public bool visit(PGPointExpr x) { 542 print0(ucase ? "POINT " : "point "); 543 x.getValue().accept(this); 544 return false; 545 } 546 547 override 548 public void endVisit(PGPointExpr x) { 549 550 } 551 552 override 553 public bool visit(PGMacAddrExpr x) { 554 print0("macaddr "); 555 x.getValue().accept(this); 556 return false; 557 } 558 559 override 560 public void endVisit(PGMacAddrExpr x) { 561 562 } 563 564 override 565 public bool visit(PGInetExpr x) { 566 print0("inet "); 567 x.getValue().accept(this); 568 return false; 569 } 570 571 override 572 public void endVisit(PGInetExpr x) { 573 574 } 575 576 override 577 public bool visit(PGCidrExpr x) { 578 print0("cidr "); 579 x.getValue().accept(this); 580 return false; 581 } 582 583 override 584 public void endVisit(PGCidrExpr x) { 585 586 } 587 588 override 589 public bool visit(PGPolygonExpr x) { 590 print0("polygon "); 591 x.getValue().accept(this); 592 return false; 593 } 594 595 override 596 public void endVisit(PGPolygonExpr x) { 597 598 } 599 600 override 601 public bool visit(PGCircleExpr x) { 602 print0("circle "); 603 x.getValue().accept(this); 604 return false; 605 } 606 607 override 608 public void endVisit(PGCircleExpr x) { 609 610 } 611 612 override 613 public bool visit(PGLineSegmentsExpr x) { 614 print0("lseg "); 615 x.getValue().accept(this); 616 return false; 617 } 618 619 override 620 public void endVisit(PGLineSegmentsExpr x) { 621 622 } 623 624 override 625 public bool visit(SQLBinaryExpr x) { 626 print0(ucase ? "B'" : "b'"); 627 print0(x.getText()); 628 print('\''); 629 630 return false; 631 } 632 633 override 634 public void endVisit(PGShowStatement x) { 635 636 } 637 638 override bool visit(SQLBlobExpr x) { 639 print0("'\\x"); 640 print0(x.getHex()); 641 print('\''); 642 643 return false; 644 } 645 646 override void endVisit(SQLBlobExpr x) { 647 648 } 649 650 override 651 public bool visit(PGShowStatement x) { 652 print0(ucase ? "SHOW " : "show "); 653 x.getExpr().accept(this); 654 return false; 655 } 656 657 override public bool visit(SQLLimit x) { 658 print0(ucase ? "LIMIT " : "limit "); 659 660 x.getRowCount().accept(this); 661 662 if (x.getOffset() !is null) { 663 print0(ucase ? " OFFSET " : " offset "); 664 x.getOffset().accept(this); 665 } 666 return false; 667 } 668 669 override 670 public void endVisit(PGStartTransactionStatement x) { 671 672 } 673 674 override 675 public bool visit(PGStartTransactionStatement x) { 676 print0(ucase ? "START TRANSACTION" : "start transaction"); 677 return false; 678 } 679 680 override 681 public void endVisit(PGConnectToStatement x) { 682 683 } 684 685 override 686 public bool visit(PGConnectToStatement x) { 687 print0(ucase ? "CONNECT TO " : "connect to "); 688 x.getTarget().accept(this); 689 return false; 690 } 691 692 override 693 public bool visit(SQLSetStatement x) { 694 print0(ucase ? "SET " : "set "); 695 696 SQLSetStatement.Option option = x.getOption(); 697 if (option.name.length != 0) { 698 print(option.name()); 699 print(' '); 700 } 701 702 List!(SQLAssignItem) items = x.getItems(); 703 for (int i = 0; i < items.size(); i++) { 704 if (i != 0) { 705 print0(", "); 706 } 707 708 SQLAssignItem item = x.getItems().get(i); 709 SQLExpr target = item.getTarget(); 710 target.accept(this); 711 712 SQLExpr value = item.getValue(); 713 714 if (cast(SQLIdentifierExpr)(target) !is null 715 && (cast(SQLIdentifierExpr) target).getName().equalsIgnoreCase("TIME ZONE")) { 716 print(' '); 717 } else { 718 if (cast(SQLPropertyExpr)(value) !is null 719 && cast(SQLVariantRefExpr)((cast(SQLPropertyExpr) value).getOwner()) !is null) { 720 print0(" := "); 721 } else { 722 print0(" TO "); 723 } 724 } 725 726 if (cast(SQLListExpr)(value) !is null) { 727 SQLListExpr listExpr = cast(SQLListExpr) value; 728 printAndAccept!SQLExpr((listExpr.getItems()), ", "); 729 } else { 730 value.accept(this); 731 } 732 } 733 734 return false; 735 } 736 737 override 738 public bool visit(SQLCreateUserStatement x) { 739 print0(ucase ? "CREATE USER " : "create user "); 740 x.getUser().accept(this); 741 print0(ucase ? " PASSWORD " : " password "); 742 743 SQLExpr passoword = x.getPassword(); 744 745 if (cast(SQLIdentifierExpr)(passoword) !is null) { 746 print('\''); 747 passoword.accept(this); 748 print('\''); 749 } else { 750 passoword.accept(this); 751 } 752 753 return false; 754 } 755 756 override protected void printGrantPrivileges(SQLGrantStatement x) { 757 List!(SQLExpr) privileges = x.getPrivileges(); 758 int i = 0; 759 foreach(SQLExpr privilege ; privileges) { 760 if (i != 0) { 761 print(", "); 762 } 763 764 if (cast(SQLIdentifierExpr)(privilege) !is null) { 765 string name = (cast(SQLIdentifierExpr) privilege).getName(); 766 if ("RESOURCE".equalsIgnoreCase(name)) { 767 continue; 768 } 769 } 770 771 privilege.accept(this); 772 i++; 773 } 774 } 775 776 override public bool visit(SQLGrantStatement x) { 777 if (x.getOn() is null) { 778 print("ALTER ROLE "); 779 x.getTo().accept(this); 780 print(' '); 781 Set!(SQLIdentifierExpr) pgPrivilegs = new LinkedHashSet!(SQLIdentifierExpr)(); 782 foreach(SQLExpr privilege ; x.getPrivileges()) { 783 if (cast(SQLIdentifierExpr)(privilege) !is null) { 784 string name = (cast(SQLIdentifierExpr) privilege).getName(); 785 if (equalsIgnoreCase(name, "CONNECT")) { 786 pgPrivilegs.add(new SQLIdentifierExpr("LOGIN")); 787 } 788 if (toLower(name).startsWith("create ")) { 789 pgPrivilegs.add(new SQLIdentifierExpr("CREATEDB")); 790 } 791 } 792 } 793 int i = 0; 794 foreach(SQLIdentifierExpr privilege ; pgPrivilegs) { 795 if (i != 0) { 796 print(' '); 797 } 798 privilege.accept(this); 799 i++; 800 } 801 return false; 802 } 803 804 return super.visit(x); 805 } 806 /** **************************************************************************/ 807 // for oracle to postsql 808 /** **************************************************************************/ 809 810 // public bool visit(OracleSysdateExpr x) { 811 // print0(ucase ? "CURRENT_TIMESTAMP" : "CURRENT_TIMESTAMP"); 812 // return false; 813 // } 814 815 // override 816 // public void endVisit(OracleSysdateExpr x) { 817 818 // } 819 820 // override 821 // public bool visit(OracleExceptionStatement x) { 822 // return false; 823 // } 824 825 // override 826 // public void endVisit(OracleExceptionStatement x) { 827 828 // } 829 830 // override 831 // public bool visit(OracleExceptionStatement.Item x) { 832 // return false; 833 // } 834 835 // override 836 // public void endVisit(OracleExceptionStatement.Item x) { 837 838 // } 839 840 // override 841 // public bool visit(OracleArgumentExpr x) { 842 // return false; 843 // } 844 845 // override 846 // public void endVisit(OracleArgumentExpr x) { 847 848 // } 849 850 // override 851 // public bool visit(OracleSetTransactionStatement x) { 852 // return false; 853 // } 854 855 // override 856 // public void endVisit(OracleSetTransactionStatement x) { 857 858 // } 859 860 // override 861 // public bool visit(OracleExplainStatement x) { 862 // return false; 863 // } 864 865 // override 866 // public void endVisit(OracleExplainStatement x) { 867 868 // } 869 870 // override 871 // public bool visit(OracleAlterTableDropPartition x) { 872 // return false; 873 // } 874 875 // override 876 // public void endVisit(OracleAlterTableDropPartition x) { 877 878 // } 879 880 // override 881 // public bool visit(OracleAlterTableTruncatePartition x) { 882 // return false; 883 // } 884 885 // override 886 // public void endVisit(OracleAlterTableTruncatePartition x) { 887 888 // } 889 890 // override 891 // public bool visit(OracleAlterTableSplitPartition.TableSpaceItem x) { 892 // return false; 893 // } 894 895 // override 896 // public void endVisit(OracleAlterTableSplitPartition.TableSpaceItem x) { 897 898 // } 899 900 // override 901 // public bool visit(OracleAlterTableSplitPartition.UpdateIndexesClause x) { 902 // return false; 903 // } 904 905 // override 906 // public void endVisit(OracleAlterTableSplitPartition.UpdateIndexesClause x) { 907 908 // } 909 910 // override 911 // public bool visit(OracleAlterTableSplitPartition.NestedTablePartitionSpec x) { 912 // return false; 913 // } 914 915 // override 916 // public void endVisit(OracleAlterTableSplitPartition.NestedTablePartitionSpec x) { 917 918 // } 919 920 // override 921 // public bool visit(OracleAlterTableSplitPartition x) { 922 // return false; 923 // } 924 925 // override 926 // public void endVisit(OracleAlterTableSplitPartition x) { 927 928 // } 929 930 // override 931 // public bool visit(OracleAlterTableModify x) { 932 // return false; 933 // } 934 935 // override 936 // public void endVisit(OracleAlterTableModify x) { 937 938 // } 939 940 // override 941 // public bool visit(OracleCreateIndexStatement x) { 942 // return false; 943 // } 944 945 // override 946 // public void endVisit(OracleCreateIndexStatement x) { 947 948 // } 949 950 // override 951 // public bool visit(OracleForStatement x) { 952 // return false; 953 // } 954 955 // override 956 // public void endVisit(OracleForStatement x) { 957 958 // } 959 960 // public bool visit(OracleSizeExpr x) { 961 // x.getValue().accept(this); 962 // print0(x.getUnit().name()); 963 // return false; 964 // } 965 966 // override 967 // public void endVisit(OracleSizeExpr x) { 968 969 // } 970 971 // override 972 // public bool visit(OracleFileSpecification x) { 973 // return false; 974 // } 975 976 // override 977 // public void endVisit(OracleFileSpecification x) { 978 979 // } 980 981 // override 982 // public bool visit(OracleAlterTablespaceAddDataFile x) { 983 // return false; 984 // } 985 986 // override 987 // public void endVisit(OracleAlterTablespaceAddDataFile x) { 988 989 // } 990 991 // override 992 // public bool visit(OracleAlterTablespaceStatement x) { 993 // return false; 994 // } 995 996 // override 997 // public void endVisit(OracleAlterTablespaceStatement x) { 998 999 // } 1000 1001 // override 1002 // public bool visit(OracleExitStatement x) { 1003 // return false; 1004 // } 1005 1006 // override 1007 // public void endVisit(OracleExitStatement x) { 1008 1009 // } 1010 1011 // override 1012 // public bool visit(OracleContinueStatement x) { 1013 // return false; 1014 // } 1015 1016 // override 1017 // public void endVisit(OracleContinueStatement x) { 1018 1019 // } 1020 1021 // override 1022 // public bool visit(OracleRaiseStatement x) { 1023 // return false; 1024 // } 1025 1026 // override 1027 // public void endVisit(OracleRaiseStatement x) { 1028 1029 // } 1030 1031 // override 1032 // public bool visit(OracleCreateDatabaseDbLinkStatement x) { 1033 // return false; 1034 // } 1035 1036 // override 1037 // public void endVisit(OracleCreateDatabaseDbLinkStatement x) { 1038 1039 // } 1040 1041 // override 1042 // public bool visit(OracleDropDbLinkStatement x) { 1043 // return false; 1044 // } 1045 1046 // override 1047 // public void endVisit(OracleDropDbLinkStatement x) { 1048 1049 // } 1050 1051 // override 1052 // public bool visit(OracleDataTypeIntervalYear x) { 1053 // return false; 1054 // } 1055 1056 // override 1057 // public void endVisit(OracleDataTypeIntervalYear x) { 1058 1059 // } 1060 1061 // override 1062 // public bool visit(OracleDataTypeIntervalDay x) { 1063 // return false; 1064 // } 1065 1066 // override 1067 // public void endVisit(OracleDataTypeIntervalDay x) { 1068 1069 // } 1070 1071 // override 1072 // public bool visit(OracleUsingIndexClause x) { 1073 // return false; 1074 // } 1075 1076 // override 1077 // public void endVisit(OracleUsingIndexClause x) { 1078 1079 // } 1080 1081 // override 1082 // public bool visit(OracleLobStorageClause x) { 1083 // return false; 1084 // } 1085 1086 // override 1087 // public void endVisit(OracleLobStorageClause x) { 1088 1089 // } 1090 1091 // public bool visit(OracleSelectTableReference x) { 1092 // if (x.isOnly()) { 1093 // print0(ucase ? "ONLY (" : "only ("); 1094 // printTableSourceExpr(x.getExpr()); 1095 1096 // if (x.getPartition() !is null) { 1097 // print(' '); 1098 // x.getPartition().accept(this); 1099 // } 1100 1101 // print(')'); 1102 // } else { 1103 // printTableSourceExpr(x.getExpr()); 1104 1105 // if (x.getPartition() !is null) { 1106 // print(' '); 1107 // x.getPartition().accept(this); 1108 // } 1109 // } 1110 1111 // if (x.getHints().size() > 0) { 1112 // this.printHints(x.getHints()); 1113 // } 1114 1115 // if (x.getSampleClause() !is null) { 1116 // print(' '); 1117 // x.getSampleClause().accept(this); 1118 // } 1119 1120 // if (x.getPivot() !is null) { 1121 // println(); 1122 // x.getPivot().accept(this); 1123 // } 1124 1125 // printAlias(x.getAlias()); 1126 1127 // return false; 1128 // } 1129 1130 // override 1131 // public void endVisit(OracleSelectTableReference x) { 1132 1133 // } 1134 1135 // override 1136 // public bool visit(PartitionExtensionClause x) { 1137 // return false; 1138 // } 1139 1140 // override 1141 // public void endVisit(PartitionExtensionClause x) { 1142 1143 // } 1144 1145 private void printHints(List!(SQLHint) hints) { 1146 if (hints.size() > 0) { 1147 print0("/*~ "); 1148 printAndAccept!SQLHint((hints), ", "); 1149 print0(" */"); 1150 } 1151 } 1152 1153 // public bool visit(OracleIntervalExpr x) { 1154 // if (cast(SQLLiteralExpr)x.getValue() !is null) { 1155 // print0(ucase ? "INTERVAL " : "interval "); 1156 // x.getValue().accept(this); 1157 // print(' '); 1158 // } else { 1159 // print('('); 1160 // x.getValue().accept(this); 1161 // print0(") "); 1162 // } 1163 1164 // print0(x.getType().name()); 1165 1166 // if (x.getPrecision() !is null) { 1167 // print('('); 1168 // printExpr(x.getPrecision()); 1169 // if (x.getFactionalSecondsPrecision() !is null) { 1170 // print0(", "); 1171 // print(x.getFactionalSecondsPrecision().intValue()); 1172 // } 1173 // print(')'); 1174 // } 1175 1176 // if (x.getToType() !is null) { 1177 // print0(ucase ? " TO " : " to "); 1178 // print0(x.getToType().name()); 1179 // if (x.getToFactionalSecondsPrecision() !is null) { 1180 // print('('); 1181 // printExpr(x.getToFactionalSecondsPrecision()); 1182 // print(')'); 1183 // } 1184 // } 1185 1186 // return false; 1187 // } 1188 1189 // override 1190 // public bool visit(OracleOuterExpr x) { 1191 // x.getExpr().accept(this); 1192 // print0("(+)"); 1193 // return false; 1194 // } 1195 1196 // override 1197 // public void endVisit(OracleDatetimeExpr x) { 1198 1199 // } 1200 1201 // public bool visit(OracleBinaryFloatExpr x) { 1202 // print0(x.getValue().toString()); 1203 // print('F'); 1204 // return false; 1205 // } 1206 1207 // override 1208 // public void endVisit(OracleBinaryFloatExpr x) { 1209 1210 // } 1211 1212 // public bool visit(OracleBinaryDoubleExpr x) { 1213 // print0(x.getValue().toString()); 1214 // print('D'); 1215 // return false; 1216 // } 1217 1218 // override 1219 // public void endVisit(OracleBinaryDoubleExpr x) { 1220 1221 // } 1222 1223 // override 1224 // public void endVisit(OracleCursorExpr x) { 1225 1226 // } 1227 1228 // override 1229 // public bool visit(OracleIsSetExpr x) { 1230 // x.getNestedTable().accept(this); 1231 // print0(ucase ? " IS A SET" : " is a set"); 1232 // return false; 1233 // } 1234 1235 // override 1236 // public void endVisit(OracleIsSetExpr x) { 1237 1238 // } 1239 1240 // override 1241 // public bool visit(ModelClause.ReturnRowsClause x) { 1242 // if (x.isAll()) { 1243 // print0(ucase ? "RETURN ALL ROWS" : "return all rows"); 1244 // } else { 1245 // print0(ucase ? "RETURN UPDATED ROWS" : "return updated rows"); 1246 // } 1247 // return false; 1248 // } 1249 1250 // override 1251 // public void endVisit(ModelClause.ReturnRowsClause x) { 1252 1253 // } 1254 1255 // override 1256 // public bool visit(ModelClause.MainModelClause x) { 1257 // if (x.getMainModelName() !is null) { 1258 // print0(ucase ? " MAIN " : " main "); 1259 // x.getMainModelName().accept(this); 1260 // } 1261 1262 // println(); 1263 // x.getModelColumnClause().accept(this); 1264 1265 // foreach(ModelClause.CellReferenceOption opt ; x.getCellReferenceOptions()) { 1266 // println(); 1267 // print0(opt.name); 1268 // } 1269 1270 // println(); 1271 // x.getModelRulesClause().accept(this); 1272 1273 // return false; 1274 // } 1275 1276 // override 1277 // public void endVisit(ModelClause.MainModelClause x) { 1278 1279 // } 1280 1281 // override 1282 // public bool visit(ModelClause.ModelColumnClause x) { 1283 // if (x.getQueryPartitionClause() !is null) { 1284 // x.getQueryPartitionClause().accept(this); 1285 // println(); 1286 // } 1287 1288 // print0(ucase ? "DIMENSION BY (" : "dimension by ("); 1289 // printAndAccept(x.getDimensionByColumns(), ", "); 1290 // print(')'); 1291 1292 // println(); 1293 // print0(ucase ? "MEASURES (" : "measures ("); 1294 // printAndAccept(x.getMeasuresColumns(), ", "); 1295 // print(')'); 1296 // return false; 1297 // } 1298 1299 // override 1300 // public void endVisit(ModelClause.ModelColumnClause x) { 1301 1302 // } 1303 1304 // override 1305 // public bool visit(ModelClause.QueryPartitionClause x) { 1306 // print0(ucase ? "PARTITION BY (" : "partition by ("); 1307 // printAndAccept(x.getExprList(), ", "); 1308 // print(')'); 1309 // return false; 1310 // } 1311 1312 // override 1313 // public void endVisit(ModelClause.QueryPartitionClause x) { 1314 1315 // } 1316 1317 // override 1318 // public bool visit(ModelClause.ModelColumn x) { 1319 // x.getExpr().accept(this); 1320 // if (x.getAlias() !is null) { 1321 // print(' '); 1322 // print0(x.getAlias()); 1323 // } 1324 // return false; 1325 // } 1326 1327 // override 1328 // public void endVisit(ModelClause.ModelColumn x) { 1329 1330 // } 1331 1332 // override 1333 // public bool visit(ModelClause.ModelRulesClause x) { 1334 // if (x.getOptions().size() > 0) { 1335 // print0(ucase ? "RULES" : "rules"); 1336 // foreach(ModelClause.ModelRuleOption opt ; x.getOptions()) { 1337 // print(' '); 1338 // print0(opt.name); 1339 // } 1340 // } 1341 1342 // if (x.getIterate() !is null) { 1343 // print0(ucase ? " ITERATE (" : " iterate ("); 1344 // x.getIterate().accept(this); 1345 // print(')'); 1346 1347 // if (x.getUntil() !is null) { 1348 // print0(ucase ? " UNTIL (" : " until ("); 1349 // x.getUntil().accept(this); 1350 // print(')'); 1351 // } 1352 // } 1353 1354 // print0(" ("); 1355 // printAndAccept(x.getCellAssignmentItems(), ", "); 1356 // print(')'); 1357 // return false; 1358 1359 // } 1360 1361 // override 1362 // public void endVisit(ModelClause.ModelRulesClause x) { 1363 1364 // } 1365 1366 // override 1367 // public bool visit(ModelClause.CellAssignmentItem x) { 1368 // if (x.getOption() !is null) { 1369 // print0(x.getOption().name); 1370 // print(' '); 1371 // } 1372 1373 // x.getCellAssignment().accept(this); 1374 1375 // if (x.getOrderBy() !is null) { 1376 // print(' '); 1377 // x.getOrderBy().accept(this); 1378 // } 1379 1380 // print0(" = "); 1381 // x.getExpr().accept(this); 1382 1383 // return false; 1384 // } 1385 1386 // override 1387 // public void endVisit(ModelClause.CellAssignmentItem x) { 1388 1389 // } 1390 1391 // override 1392 // public bool visit(ModelClause.CellAssignment x) { 1393 // x.getMeasureColumn().accept(this); 1394 // print0("["); 1395 // printAndAccept(x.getConditions(), ", "); 1396 // print0("]"); 1397 // return false; 1398 // } 1399 1400 // override 1401 // public void endVisit(ModelClause.CellAssignment x) { 1402 1403 // } 1404 1405 // override 1406 // public bool visit(ModelClause x) { 1407 // print0(ucase ? "MODEL" : "model"); 1408 1409 // this.indentCount++; 1410 // foreach(ModelClause.CellReferenceOption opt ; x.getCellReferenceOptions()) { 1411 // print(' '); 1412 // print0(opt.name); 1413 // } 1414 1415 // if (x.getReturnRowsClause() !is null) { 1416 // print(' '); 1417 // x.getReturnRowsClause().accept(this); 1418 // } 1419 1420 // foreach(ModelClause.ReferenceModelClause item ; x.getReferenceModelClauses()) { 1421 // print(' '); 1422 // item.accept(this); 1423 // } 1424 1425 // x.getMainModel().accept(this); 1426 // this.indentCount--; 1427 1428 // return false; 1429 // } 1430 1431 // override 1432 // public void endVisit(ModelClause x) { 1433 1434 // } 1435 1436 // override 1437 // public bool visit(OracleReturningClause x) { 1438 // print0(ucase ? "RETURNING " : "returning "); 1439 // printAndAccept(x.getItems(), ", "); 1440 // print0(ucase ? " INTO " : " into "); 1441 // printAndAccept(x.getValues(), ", "); 1442 1443 // return false; 1444 // } 1445 1446 // override 1447 // public void endVisit(OracleReturningClause x) { 1448 1449 // } 1450 1451 // override 1452 // public bool visit(OracleInsertStatement x) { 1453 // //visit(cast(SQLInsertStatement) x); 1454 1455 // print0(ucase ? "INSERT " : "insert "); 1456 1457 // if (x.getHints().size() > 0) { 1458 // printAndAccept(x.getHints(), ", "); 1459 // print(' '); 1460 // } 1461 1462 // print0(ucase ? "INTO " : "into "); 1463 1464 // x.getTableSource().accept(this); 1465 1466 // printInsertColumns(x.getColumns()); 1467 1468 // if (x.getValues() !is null) { 1469 // println(); 1470 // print0(ucase ? "VALUES " : "values "); 1471 // x.getValues().accept(this); 1472 // } else { 1473 // if (x.getQuery() !is null) { 1474 // println(); 1475 // x.getQuery().accept(this); 1476 // } 1477 // } 1478 1479 // if (x.getReturning() !is null) { 1480 // println(); 1481 // x.getReturning().accept(this); 1482 // } 1483 1484 // if (x.getErrorLogging() !is null) { 1485 // println(); 1486 // x.getErrorLogging().accept(this); 1487 // } 1488 1489 // return false; 1490 // } 1491 1492 // override 1493 // public void endVisit(OracleInsertStatement x) { 1494 1495 // } 1496 1497 // override 1498 // public bool visit(OracleMultiInsertStatement.InsertIntoClause x) { 1499 // print0(ucase ? "INTO " : "into "); 1500 1501 // x.getTableSource().accept(this); 1502 1503 // if (x.getColumns().size() > 0) { 1504 // this.indentCount++; 1505 // println(); 1506 // print('('); 1507 // for (int i = 0, size = x.getColumns().size(); i < size; ++i) { 1508 // if (i != 0) { 1509 // if (i % 5 == 0) { 1510 // println(); 1511 // } 1512 // print0(", "); 1513 // } 1514 // x.getColumns().get(i).accept(this); 1515 // } 1516 // print(')'); 1517 // this.indentCount--; 1518 // } 1519 1520 // if (x.getValues() !is null) { 1521 // println(); 1522 // print0(ucase ? "VALUES " : "values "); 1523 // x.getValues().accept(this); 1524 // } else { 1525 // if (x.getQuery() !is null) { 1526 // println(); 1527 // x.getQuery().accept(this); 1528 // } 1529 // } 1530 1531 // return false; 1532 // } 1533 1534 // override 1535 // public void endVisit(OracleMultiInsertStatement.InsertIntoClause x) { 1536 1537 // } 1538 1539 // override 1540 // public bool visit(OracleMultiInsertStatement x) { 1541 // print0(ucase ? "INSERT " : "insert "); 1542 1543 // if (x.getHints().size() > 0) { 1544 // this.printHints(x.getHints()); 1545 // } 1546 1547 // if (x.getOption() !is null) { 1548 // print0(x.getOption().name()); 1549 // print(' '); 1550 // } 1551 1552 // for (int i = 0, size = x.getEntries().size(); i < size; ++i) { 1553 // this.indentCount++; 1554 // println(); 1555 // x.getEntries().get(i).accept(this); 1556 // this.indentCount--; 1557 // } 1558 1559 // println(); 1560 // x.getSubQuery().accept(this); 1561 1562 // return false; 1563 // } 1564 1565 // override 1566 // public void endVisit(OracleMultiInsertStatement x) { 1567 1568 // } 1569 1570 // override 1571 // public bool visit(OracleMultiInsertStatement.ConditionalInsertClause x) { 1572 // for (int i = 0, size = x.getItems().size(); i < size; ++i) { 1573 // if (i != 0) { 1574 // println(); 1575 // } 1576 1577 // OracleMultiInsertStatement.ConditionalInsertClauseItem item = x.getItems().get(i); 1578 1579 // item.accept(this); 1580 // } 1581 1582 // if (x.getElseItem() !is null) { 1583 // println(); 1584 // print0(ucase ? "ELSE" : "else"); 1585 // this.indentCount++; 1586 // println(); 1587 // x.getElseItem().accept(this); 1588 // this.indentCount--; 1589 // } 1590 1591 // return false; 1592 // } 1593 1594 // override 1595 // public void endVisit(OracleMultiInsertStatement.ConditionalInsertClause x) { 1596 1597 // } 1598 1599 // override 1600 // public bool visit(OracleMultiInsertStatement.ConditionalInsertClauseItem x) { 1601 // print0(ucase ? "WHEN " : "when "); 1602 // x.getWhen().accept(this); 1603 // print0(ucase ? " THEN" : " then"); 1604 // this.indentCount++; 1605 // println(); 1606 // x.getThen().accept(this); 1607 // this.indentCount--; 1608 // return false; 1609 // } 1610 1611 // override 1612 // public void endVisit(OracleMultiInsertStatement.ConditionalInsertClauseItem x) { 1613 1614 // } 1615 1616 // override 1617 // public bool visit(OracleSelectQueryBlock x) { 1618 // if (isPrettyFormat() && x.hasBeforeComment()) { 1619 // printlnComments(x.getBeforeCommentsDirect()); 1620 // } 1621 1622 // print0(ucase ? "SELECT " : "select "); 1623 1624 // if (x.getHintsSize() > 0) { 1625 // printAndAccept(x.getHints(), ", "); 1626 // print(' '); 1627 // } 1628 1629 // if (SQLSetQuantifier.ALL == x.getDistionOption()) { 1630 // print0(ucase ? "ALL " : "all "); 1631 // } else if (SQLSetQuantifier.DISTINCT == x.getDistionOption()) { 1632 // print0(ucase ? "DISTINCT " : "distinct "); 1633 // } else if (SQLSetQuantifier.UNIQUE == x.getDistionOption()) { 1634 // print0(ucase ? "UNIQUE " : "unique "); 1635 // } 1636 1637 // printSelectList(x.getSelectList()); 1638 1639 // if (x.getInto() !is null) { 1640 // println(); 1641 // print0(ucase ? "INTO " : "into "); 1642 // x.getInto().accept(this); 1643 // } 1644 1645 // println(); 1646 // print0(ucase ? "FROM " : "from "); 1647 // if (x.getFrom() is null) { 1648 // print0(ucase ? "DUAL" : "dual"); 1649 // } else { 1650 // x.getFrom().accept(this); 1651 // } 1652 1653 // if (x.getWhere() !is null) { 1654 // println(); 1655 // print0(ucase ? "WHERE " : "where "); 1656 // x.getWhere().accept(this); 1657 // } 1658 1659 // printHierarchical(x); 1660 1661 // if (x.getGroupBy() !is null) { 1662 // println(); 1663 // x.getGroupBy().accept(this); 1664 // } 1665 1666 // if (x.getModelClause() !is null) { 1667 // println(); 1668 // x.getModelClause().accept(this); 1669 // } 1670 1671 // SQLOrderBy orderBy = x.getOrderBy(); 1672 // if (orderBy !is null) { 1673 // println(); 1674 // orderBy.accept(this); 1675 // } 1676 1677 // printFetchFirst(x); 1678 1679 // if (x.isForUpdate()) { 1680 // println(); 1681 // print0(ucase ? "FOR UPDATE" : "for update"); 1682 // if (x.getForUpdateOfSize() > 0) { 1683 // print('('); 1684 // printAndAccept(x.getForUpdateOf(), ", "); 1685 // print(')'); 1686 // } 1687 1688 // if (x.isNoWait()) { 1689 // print0(ucase ? " NOWAIT" : " nowait"); 1690 // } else if (x.isSkipLocked()) { 1691 // print0(ucase ? " SKIP LOCKED" : " skip locked"); 1692 // } else if (x.getWaitTime() !is null) { 1693 // print0(ucase ? " WAIT " : " wait "); 1694 // x.getWaitTime().accept(this); 1695 // } 1696 // } 1697 1698 // return false; 1699 // } 1700 1701 // override 1702 // public void endVisit(OracleSelectQueryBlock x) { 1703 1704 // } 1705 1706 // override 1707 // public bool visit(OracleLockTableStatement x) { 1708 // print0(ucase ? "LOCK TABLE " : "lock table "); 1709 // x.getTable().accept(this); 1710 // print0(ucase ? " IN " : " in "); 1711 // print0(x.getLockMode().toString()); 1712 // print0(ucase ? " MODE " : " mode "); 1713 // if (x.isNoWait()) { 1714 // print0(ucase ? "NOWAIT" : "nowait"); 1715 // } else if (x.getWait() !is null) { 1716 // print0(ucase ? "WAIT " : "wait "); 1717 // x.getWait().accept(this); 1718 // } 1719 // return false; 1720 // } 1721 1722 // override 1723 // public void endVisit(OracleLockTableStatement x) { 1724 1725 // } 1726 1727 // override 1728 // public bool visit(OracleAlterSessionStatement x) { 1729 // print0(ucase ? "ALTER SESSION SET " : "alter session set "); 1730 // printAndAccept(x.getItems(), ", "); 1731 // return false; 1732 // } 1733 1734 // override 1735 // public void endVisit(OracleAlterSessionStatement x) { 1736 1737 // } 1738 1739 // public bool visit(OracleRangeExpr x) { 1740 // x.getLowBound().accept(this); 1741 // print0(".."); 1742 // x.getUpBound().accept(this); 1743 // return false; 1744 // } 1745 1746 // override 1747 // public void endVisit(OracleRangeExpr x) { 1748 1749 // } 1750 1751 // override 1752 // public bool visit(OracleAlterIndexStatement x) { 1753 // print0(ucase ? "ALTER INDEX " : "alter index "); 1754 // x.getName().accept(this); 1755 1756 // if (x.getRenameTo() !is null) { 1757 // print0(ucase ? " RENAME TO " : " rename to "); 1758 // x.getRenameTo().accept(this); 1759 // } 1760 1761 // if (x.getMonitoringUsage() !is null) { 1762 // print0(ucase ? " MONITORING USAGE" : " monitoring usage"); 1763 // } 1764 1765 // if (x.getRebuild() !is null) { 1766 // print(' '); 1767 // x.getRebuild().accept(this); 1768 // } 1769 1770 // if (x.getParallel() !is null) { 1771 // print0(ucase ? " PARALLEL" : " parallel"); 1772 // x.getParallel().accept(this); 1773 // } 1774 1775 // return false; 1776 // } 1777 1778 // override 1779 // public void endVisit(OracleAlterIndexStatement x) { 1780 1781 // } 1782 1783 // public bool visit(OracleCheck x) { 1784 // visit(cast(SQLCheck) x); 1785 // return false; 1786 // } 1787 1788 // override 1789 // public void endVisit(OracleCheck x) { 1790 1791 // } 1792 1793 // override 1794 // public bool visit(OracleSupplementalIdKey x) { 1795 // print0(ucase ? "SUPPLEMENTAL LOG DATA (" : "supplemental log data ("); 1796 1797 // int count = 0; 1798 1799 // if (x.isAll()) { 1800 // print0(ucase ? "ALL" : "all"); 1801 // count++; 1802 // } 1803 1804 // if (x.isPrimaryKey()) { 1805 // if (count != 0) { 1806 // print0(", "); 1807 // } 1808 // print0(ucase ? "PRIMARY KEY" : "primary key"); 1809 // count++; 1810 // } 1811 1812 // if (x.isUnique()) { 1813 // if (count != 0) { 1814 // print0(", "); 1815 // } 1816 // print0(ucase ? "UNIQUE" : "unique"); 1817 // count++; 1818 // } 1819 1820 // if (x.isUniqueIndex()) { 1821 // if (count != 0) { 1822 // print0(", "); 1823 // } 1824 // print0(ucase ? "UNIQUE INDEX" : "unique index"); 1825 // count++; 1826 // } 1827 1828 // if (x.isForeignKey()) { 1829 // if (count != 0) { 1830 // print0(", "); 1831 // } 1832 // print0(ucase ? "FOREIGN KEY" : "foreign key"); 1833 // count++; 1834 // } 1835 1836 // print0(ucase ? ") COLUMNS" : ") columns"); 1837 // return false; 1838 // } 1839 1840 // override 1841 // public void endVisit(OracleSupplementalIdKey x) { 1842 1843 // } 1844 1845 // override 1846 // public bool visit(OracleSupplementalLogGrp x) { 1847 // print0(ucase ? "SUPPLEMENTAL LOG GROUP " : "supplemental log group "); 1848 // x.getGroup().accept(this); 1849 // print0(" ("); 1850 // printAndAccept(x.getColumns(), ", "); 1851 // print(')'); 1852 // if (x.isAlways()) { 1853 // print0(ucase ? " ALWAYS" : " always"); 1854 // } 1855 // return false; 1856 // } 1857 1858 // override 1859 // public void endVisit(OracleSupplementalLogGrp x) { 1860 1861 // } 1862 1863 // override 1864 // public bool visit(OracleCreateTableStatement.Organization x) { 1865 // string type = x.getType(); 1866 1867 // print0(ucase ? "ORGANIZATION " : "organization "); 1868 // print0(ucase ? type : toLower(type)); 1869 1870 // printOracleSegmentAttributes(x); 1871 1872 // if (x.getPctthreshold() !is null) { 1873 // println(); 1874 // print0(ucase ? "PCTTHRESHOLD " : "pctthreshold "); 1875 // print(x.getPctfree()); 1876 // } 1877 1878 // if ("EXTERNAL".equalsIgnoreCase(type)) { 1879 // print0(" ("); 1880 1881 // this.indentCount++; 1882 // if (x.getExternalType() !is null) { 1883 // println(); 1884 // print0(ucase ? "TYPE " : "type "); 1885 // x.getExternalType().accept(this); 1886 // } 1887 1888 // if (x.getExternalDirectory() !is null) { 1889 // println(); 1890 // print0(ucase ? "DEFAULT DIRECTORY " : "default directory "); 1891 // x.getExternalDirectory().accept(this); 1892 // } 1893 1894 // if (x.getExternalDirectoryRecordFormat() !is null) { 1895 // println(); 1896 // this.indentCount++; 1897 // print0(ucase ? "ACCESS PARAMETERS (" : "access parameters ("); 1898 // x.getExternalDirectoryRecordFormat().accept(this); 1899 // this.indentCount--; 1900 // println(); 1901 // print(')'); 1902 // } 1903 1904 // if (x.getExternalDirectoryLocation().size() > 0) { 1905 // println(); 1906 // print0(ucase ? "LOCATION (" : " location("); 1907 // printAndAccept(x.getExternalDirectoryLocation(), ", "); 1908 // print(')'); 1909 // } 1910 1911 // this.indentCount--; 1912 // println(); 1913 // print(')'); 1914 1915 // if (x.getExternalRejectLimit() !is null) { 1916 // println(); 1917 // print0(ucase ? "REJECT LIMIT " : "reject limit "); 1918 // x.getExternalRejectLimit().accept(this); 1919 // } 1920 // } 1921 1922 // return false; 1923 // } 1924 1925 // override 1926 // public void endVisit(OracleCreateTableStatement.Organization x) { 1927 1928 // } 1929 1930 // override 1931 // public bool visit(OracleCreateTableStatement.OIDIndex x) { 1932 // print0(ucase ? "OIDINDEX" : "oidindex"); 1933 1934 // if (x.getName() !is null) { 1935 // print(' '); 1936 // x.getName().accept(this); 1937 // } 1938 // print(" ("); 1939 // this.indentCount++; 1940 // printOracleSegmentAttributes(x); 1941 // this.indentCount--; 1942 // println(); 1943 // print(")"); 1944 // return false; 1945 // } 1946 1947 // override 1948 // public void endVisit(OracleCreateTableStatement.OIDIndex x) { 1949 1950 // } 1951 1952 // override 1953 // public bool visit(OracleCreatePackageStatement x) { 1954 // if (x.isOrReplace()) { 1955 // print0(ucase ? "CREATE OR REPLACE PACKAGE " : "create or replace procedure "); 1956 // } else { 1957 // print0(ucase ? "CREATE PACKAGE " : "create procedure "); 1958 // } 1959 1960 // if (x.isBody()) { 1961 // print0(ucase ? "BODY " : "body "); 1962 // } 1963 1964 // x.getName().accept(this); 1965 1966 // if (x.isBody()) { 1967 // println(); 1968 // print0(ucase ? "BEGIN" : "begin"); 1969 // } 1970 1971 // this.indentCount++; 1972 1973 // List!(SQLStatement) statements = x.getStatements(); 1974 // for (int i = 0, size = statements.size(); i < size; ++i) { 1975 // println(); 1976 // SQLStatement stmt = statements.get(i); 1977 // stmt.accept(this); 1978 // } 1979 1980 // this.indentCount--; 1981 1982 // if (x.isBody() || statements.size() > 0) { 1983 // println(); 1984 // print0(ucase ? "END " : "end "); 1985 // x.getName().accept(this); 1986 // print(';'); 1987 // } 1988 1989 // return false; 1990 // } 1991 1992 // override 1993 // public void endVisit(OracleCreatePackageStatement x) { 1994 1995 // } 1996 1997 // override 1998 // public bool visit(OracleExecuteImmediateStatement x) { 1999 // print0(ucase ? "EXECUTE IMMEDIATE " : "execute immediate "); 2000 // x.getDynamicSql().accept(this); 2001 2002 // List!(SQLExpr) into = x.getInto(); 2003 // if (into.size() > 0) { 2004 // print0(ucase ? " INTO " : " into "); 2005 // printAndAccept(into, ", "); 2006 // } 2007 2008 // List!(SQLArgument) using = x.getArguments(); 2009 // if (using.size() > 0) { 2010 // print0(ucase ? " USING " : " using "); 2011 // printAndAccept(using, ", "); 2012 // } 2013 2014 // List!(SQLExpr) returnInto = x.getReturnInto(); 2015 // if (returnInto.size() > 0) { 2016 // print0(ucase ? " RETURNNING INTO " : " returnning into "); 2017 // printAndAccept(returnInto, ", "); 2018 // } 2019 // return false; 2020 // } 2021 2022 // override 2023 // public void endVisit(OracleExecuteImmediateStatement x) { 2024 2025 // } 2026 2027 // override 2028 // public bool visit(OracleTreatExpr x) { 2029 // print0(ucase ? "TREAT (" : "treat ("); 2030 // x.getExpr().accept(this); 2031 // print0(ucase ? " AS " : " as "); 2032 // if (x.isRef()) { 2033 // print0(ucase ? "REF " : "ref "); 2034 // } 2035 // x.getType().accept(this); 2036 // print(')'); 2037 // return false; 2038 // } 2039 2040 // override 2041 // public void endVisit(OracleTreatExpr x) { 2042 2043 // } 2044 2045 // override 2046 // public bool visit(OracleCreateSynonymStatement x) { 2047 // if (x.isOrReplace()) { 2048 // print0(ucase ? "CREATE OR REPLACE " : "create or replace "); 2049 // } else { 2050 // print0(ucase ? "CREATE " : "create "); 2051 // } 2052 2053 // if (x.isPublic()) { 2054 // print0(ucase ? "PUBLIC " : "public "); 2055 // } 2056 2057 // print0(ucase ? "SYNONYM " : "synonym "); 2058 2059 // x.getName().accept(this); 2060 2061 // print0(ucase ? " FOR " : " for "); 2062 // x.getObject().accept(this); 2063 2064 // return false; 2065 // } 2066 2067 // override 2068 // public void endVisit(OracleCreateSynonymStatement x) { 2069 2070 // } 2071 2072 // override 2073 // public bool visit(OracleCreateTypeStatement x) { 2074 // if (x.isOrReplace()) { 2075 // print0(ucase ? "CREATE OR REPLACE TYPE " : "create or replace type "); 2076 // } else { 2077 // print0(ucase ? "CREATE TYPE " : "create type "); 2078 // } 2079 2080 // if (x.isBody()) { 2081 // print0(ucase ? "BODY " : "body "); 2082 // } 2083 2084 // x.getName().accept(this); 2085 2086 // SQLName under = x.getUnder(); 2087 // if (under !is null) { 2088 // print0(ucase ? " UNDER " : " under "); 2089 // under.accept(this); 2090 // } 2091 2092 // SQLName authId = x.getAuthId(); 2093 // if (authId !is null) { 2094 // print0(ucase ? " AUTHID " : " authid "); 2095 // authId.accept(this); 2096 // } 2097 2098 // if (x.isForce()) { 2099 // print0(ucase ? "FORCE " : "force "); 2100 // } 2101 2102 // List!(SQLParameter) parameters = x.getParameters(); 2103 // SQLDataType tableOf = x.getTableOf(); 2104 2105 // if (x.isObject()) { 2106 // print0(" AS OBJECT"); 2107 // } 2108 2109 // if (parameters.size() > 0) { 2110 // if (x.isParen()) { 2111 // print(" ("); 2112 // } else { 2113 // print0(ucase ? " IS" : " is"); 2114 // } 2115 // indentCount++; 2116 // println(); 2117 2118 // for (int i = 0; i < parameters.size(); ++i) { 2119 // SQLParameter param = parameters.get(i); 2120 // param.accept(this); 2121 2122 // SQLDataType dataType = param.getDataType(); 2123 2124 // if (i < parameters.size() - 1) { 2125 // if (cast(OracleFunctionDataType)(dataType) !is null 2126 // && (cast(OracleFunctionDataType) dataType).getBlock() !is null) { 2127 // // skip 2128 // println(); 2129 // } else if (cast(OracleProcedureDataType)(dataType) !is null 2130 // && (cast(OracleProcedureDataType) dataType).getBlock() !is null) { 2131 // // skip 2132 // println(); 2133 // } else { 2134 // println(", "); 2135 // } 2136 // } 2137 // } 2138 2139 // indentCount--; 2140 // println(); 2141 2142 // if (x.isParen()) { 2143 // print0(")"); 2144 // } else { 2145 // print0("END"); 2146 // } 2147 // } else if (tableOf !is null) { 2148 // print0(ucase ? " AS TABLE OF " : " as table of "); 2149 // tableOf.accept(this); 2150 // } else if (x.getVarraySizeLimit() !is null) { 2151 // print0(ucase ? " VARRAY (" : " varray ("); 2152 // x.getVarraySizeLimit().accept(this); 2153 // print0(ucase ? ") OF " : ") of "); 2154 // x.getVarrayDataType().accept(this); 2155 // } 2156 2157 // bool isFinal = x.getFinal(); 2158 // if (isFinal !is null) { 2159 // if (isFinal.booleanValue()) { 2160 // print0(ucase ? " FINAL" : " "); 2161 // } else { 2162 // print0(ucase ? " NOT FINAL" : " not "); 2163 // } 2164 // } 2165 2166 // bool instantiable = x.getInstantiable(); 2167 // if (instantiable !is null) { 2168 // if (instantiable.booleanValue()) { 2169 // print0(ucase ? " INSTANTIABLE" : " instantiable"); 2170 // } else { 2171 // print0(ucase ? " NOT INSTANTIABLE" : " not instantiable"); 2172 // } 2173 // } 2174 2175 // return false; 2176 // } 2177 2178 // override 2179 // public void endVisit(OracleCreateTypeStatement x) { 2180 2181 // } 2182 2183 // override 2184 // public bool visit(OraclePipeRowStatement x) { 2185 // print0(ucase ? "PIPE ROW(" : "pipe row("); 2186 // printAndAccept(x.getParameters(), ", "); 2187 // print(')'); 2188 // return false; 2189 // } 2190 2191 // override 2192 // public void endVisit(OraclePipeRowStatement x) { 2193 2194 // } 2195 2196 // public bool visit(OraclePrimaryKey x) { 2197 // visit(cast(SQLPrimaryKey) x); 2198 // return false; 2199 // } 2200 2201 // override 2202 // public void endVisit(OraclePrimaryKey x) { 2203 2204 // } 2205 2206 // override 2207 // public bool visit(OracleCreateTableStatement x) { 2208 // printCreateTable(x, false); 2209 2210 // if (x.getOf() !is null) { 2211 // println(); 2212 // print0(ucase ? "OF " : "of "); 2213 // x.getOf().accept(this); 2214 // } 2215 2216 // if (x.getOidIndex() !is null) { 2217 // println(); 2218 // x.getOidIndex().accept(this); 2219 // } 2220 2221 // if (x.getOrganization() !is null) { 2222 // println(); 2223 // this.indentCount++; 2224 // x.getOrganization().accept(this); 2225 // this.indentCount--; 2226 // } 2227 2228 // printOracleSegmentAttributes(x); 2229 2230 // if (x.isInMemoryMetadata()) { 2231 // println(); 2232 // print0(ucase ? "IN_MEMORY_METADATA" : "in_memory_metadata"); 2233 // } 2234 2235 // if (x.isCursorSpecificSegment()) { 2236 // println(); 2237 // print0(ucase ? "CURSOR_SPECIFIC_SEGMENT" : "cursor_specific_segment"); 2238 // } 2239 2240 // if (x.getParallel() == Boolean.TRUE) { 2241 // println(); 2242 // print0(ucase ? "PARALLEL" : "parallel"); 2243 // } else if (x.getParallel() == Boolean.FALSE) { 2244 // println(); 2245 // print0(ucase ? "NOPARALLEL" : "noparallel"); 2246 // } 2247 2248 // if (x.getCache() == Boolean.TRUE) { 2249 // println(); 2250 // print0(ucase ? "CACHE" : "cache"); 2251 // } else if (x.getCache() == Boolean.FALSE) { 2252 // println(); 2253 // print0(ucase ? "NOCACHE" : "nocache"); 2254 // } 2255 2256 // if (x.getLobStorage() !is null) { 2257 // println(); 2258 // x.getLobStorage().accept(this); 2259 // } 2260 2261 // if (x.isOnCommitPreserveRows()) { 2262 // println(); 2263 // print0(ucase ? "ON COMMIT PRESERVE ROWS" : "on commit preserve rows"); 2264 // } else if (x.isOnCommitDeleteRows()) { 2265 // println(); 2266 // print0(ucase ? "ON COMMIT DELETE ROWS" : "on commit delete rows"); 2267 // } 2268 2269 // if (x.isMonitoring()) { 2270 // println(); 2271 // print0(ucase ? "MONITORING" : "monitoring"); 2272 // } 2273 2274 // SQLPartitionBy partitionBy = x.getPartitioning(); 2275 // if (partitionBy !is null) { 2276 // println(); 2277 // print0(ucase ? "PARTITION BY " : "partition by "); 2278 // partitionBy.accept(this); 2279 // } 2280 2281 // if (x.getCluster() !is null) { 2282 // println(); 2283 // print0(ucase ? "CLUSTER " : "cluster "); 2284 // x.getCluster().accept(this); 2285 // print0(" ("); 2286 // printAndAccept(x.getClusterColumns(), ","); 2287 // print0(")"); 2288 // } 2289 2290 // if (x.getSelect() !is null) { 2291 // println(); 2292 // print0(ucase ? "AS" : "as"); 2293 // println(); 2294 // x.getSelect().accept(this); 2295 // } 2296 2297 // return false; 2298 // } 2299 2300 // override 2301 // public void endVisit(OracleCreateTableStatement x) { 2302 2303 // } 2304 2305 // override 2306 // public bool visit(OracleAlterIndexStatement.Rebuild x) { 2307 // print0(ucase ? "REBUILD" : "rebuild"); 2308 2309 // if (x.getOption() !is null) { 2310 // print(' '); 2311 // x.getOption().accept(this); 2312 // } 2313 // return false; 2314 // } 2315 2316 // override 2317 // public void endVisit(OracleAlterIndexStatement.Rebuild x) { 2318 2319 // } 2320 2321 // override 2322 // public bool visit(OracleStorageClause x) { 2323 // return false; 2324 // } 2325 2326 // override 2327 // public void endVisit(OracleStorageClause x) { 2328 2329 // } 2330 2331 // override 2332 // public bool visit(OracleGotoStatement x) { 2333 // print0(ucase ? "GOTO " : "GOTO "); 2334 // x.getLabel().accept(this); 2335 // return false; 2336 // } 2337 2338 // override 2339 // public void endVisit(OracleGotoStatement x) { 2340 2341 // } 2342 2343 // override 2344 // public bool visit(OracleLabelStatement x) { 2345 // print0("<<"); 2346 // x.getLabel().accept(this); 2347 // print0(">>"); 2348 // return false; 2349 // } 2350 2351 // override 2352 // public void endVisit(OracleLabelStatement x) { 2353 2354 // } 2355 2356 // override 2357 // public bool visit(OracleAlterTriggerStatement x) { 2358 // print0(ucase ? "ALTER TRIGGER " : "alter trigger "); 2359 // x.getName().accept(this); 2360 2361 // if (x.isCompile()) { 2362 // print0(ucase ? " COMPILE" : " compile"); 2363 // } 2364 2365 // if (x.getEnable() !is null) { 2366 // if (x.getEnable().booleanValue()) { 2367 // print0(ucase ? "ENABLE" : "enable"); 2368 // } else { 2369 // print0(ucase ? "DISABLE" : "disable"); 2370 // } 2371 // } 2372 // return false; 2373 // } 2374 2375 // override 2376 // public void endVisit(OracleAlterTriggerStatement x) { 2377 2378 // } 2379 2380 // override 2381 // public bool visit(OracleAlterSynonymStatement x) { 2382 // print0(ucase ? "ALTER SYNONYM " : "alter synonym "); 2383 // x.getName().accept(this); 2384 2385 // if (x.isCompile()) { 2386 // print0(ucase ? " COMPILE" : " compile"); 2387 // } 2388 2389 // if (x.getEnable() !is null) { 2390 // if (x.getEnable().booleanValue()) { 2391 // print0(ucase ? "ENABLE" : "enable"); 2392 // } else { 2393 // print0(ucase ? "DISABLE" : "disable"); 2394 // } 2395 // } 2396 // return false; 2397 // } 2398 2399 // override 2400 // public void endVisit(OracleAlterSynonymStatement x) { 2401 2402 // } 2403 2404 // override 2405 // public bool visit(OracleAlterViewStatement x) { 2406 // print0(ucase ? "ALTER VIEW " : "alter view "); 2407 // x.getName().accept(this); 2408 2409 // if (x.isCompile()) { 2410 // print0(ucase ? " COMPILE" : " compile"); 2411 // } 2412 2413 // if (x.getEnable() !is null) { 2414 // if (x.getEnable().booleanValue()) { 2415 // print0(ucase ? "ENABLE" : "enable"); 2416 // } else { 2417 // print0(ucase ? "DISABLE" : "disable"); 2418 // } 2419 // } 2420 // return false; 2421 // } 2422 2423 // override 2424 // public void endVisit(OracleAlterViewStatement x) { 2425 2426 // } 2427 2428 // override 2429 // public bool visit(OracleAlterTableMoveTablespace x) { 2430 // print0(ucase ? " MOVE TABLESPACE " : " move tablespace "); 2431 // x.getName().accept(this); 2432 // return false; 2433 // } 2434 2435 // override 2436 // public void endVisit(OracleAlterTableMoveTablespace x) { 2437 2438 // } 2439 2440 // public bool visit(OracleForeignKey x) { 2441 // visit(cast(SQLForeignKeyImpl) x); 2442 // return false; 2443 // } 2444 2445 // override 2446 // public void endVisit(OracleForeignKey x) { 2447 2448 // } 2449 2450 // public bool visit(OracleUnique x) { 2451 // visit(cast(SQLUnique) x); 2452 // return false; 2453 // } 2454 2455 // override 2456 // public void endVisit(OracleUnique x) { 2457 2458 // } 2459 2460 // public bool visit(OracleSelectSubqueryTableSource x) { 2461 // print('('); 2462 // this.indentCount++; 2463 // println(); 2464 // x.getSelect().accept(this); 2465 // this.indentCount--; 2466 // println(); 2467 // print(')'); 2468 2469 // if (x.getPivot() !is null) { 2470 // println(); 2471 // x.getPivot().accept(this); 2472 // } 2473 2474 // printFlashback(x.getFlashback()); 2475 2476 // if ((x.getAlias() !is null) && (x.getAlias().length != 0)) { 2477 // print(' '); 2478 // print0(x.getAlias()); 2479 // } 2480 2481 // return false; 2482 // } 2483 2484 // override 2485 // public bool visit(OracleSelectUnPivot x) { 2486 // print0(ucase ? "UNPIVOT" : "unpivot"); 2487 // if (x.getNullsIncludeType() !is null) { 2488 // print(' '); 2489 // print0(OracleSelectUnPivot.NullsIncludeType.toString(x.getNullsIncludeType(), ucase)); 2490 // } 2491 2492 // print0(" ("); 2493 // if (x.getItems().size() == 1) { 2494 // (cast(SQLExpr) x.getItems().get(0)).accept(this); 2495 // } else { 2496 // print0(" ("); 2497 // printAndAccept(x.getItems(), ", "); 2498 // print(')'); 2499 // } 2500 2501 // if (x.getPivotFor().size() > 0) { 2502 // print0(ucase ? " FOR " : " for "); 2503 // if (x.getPivotFor().size() == 1) { 2504 // (cast(SQLExpr) x.getPivotFor().get(0)).accept(this); 2505 // } else { 2506 // print('('); 2507 // printAndAccept(x.getPivotFor(), ", "); 2508 // print(')'); 2509 // } 2510 // } 2511 2512 // if (x.getPivotIn().size() > 0) { 2513 // print0(ucase ? " IN (" : " in ("); 2514 // printAndAccept(x.getPivotIn(), ", "); 2515 // print(')'); 2516 // } 2517 2518 // print(')'); 2519 // return false; 2520 // } 2521 2522 // override 2523 // public bool visit(OracleUpdateStatement x) { 2524 // print0(ucase ? "UPDATE " : "update "); 2525 2526 // if (x.getHints().size() > 0) { 2527 // printAndAccept(x.getHints(), ", "); 2528 // print(' '); 2529 // } 2530 2531 // if (x.isOnly()) { 2532 // print0(ucase ? "ONLY (" : "only ("); 2533 // x.getTableSource().accept(this); 2534 // print(')'); 2535 // } else { 2536 // x.getTableSource().accept(this); 2537 // } 2538 2539 // printAlias(x.getAlias()); 2540 2541 // println(); 2542 2543 // print0(ucase ? "SET " : "set "); 2544 // for (int i = 0, size = x.getItems().size(); i < size; ++i) { 2545 // if (i != 0) { 2546 // print0(", "); 2547 // } 2548 // x.getItems().get(i).accept(this); 2549 // } 2550 2551 // if (x.getWhere() !is null) { 2552 // println(); 2553 // print0(ucase ? "WHERE " : "where "); 2554 // this.indentCount++; 2555 // x.getWhere().accept(this); 2556 // this.indentCount--; 2557 // } 2558 2559 // if (x.getReturning().size() > 0) { 2560 // println(); 2561 // print0(ucase ? "RETURNING " : "returning "); 2562 // printAndAccept(x.getReturning(), ", "); 2563 // print0(ucase ? " INTO " : " into "); 2564 // printAndAccept(x.getReturningInto(), ", "); 2565 // } 2566 2567 // return false; 2568 // } 2569 2570 // override 2571 // public bool visit(SampleClause x) { 2572 // print0(ucase ? "SAMPLE " : "sample "); 2573 2574 // if (x.isBlock()) { 2575 // print0(ucase ? "BLOCK " : "block "); 2576 // } 2577 2578 // print('('); 2579 // printAndAccept(x.getPercent(), ", "); 2580 // print(')'); 2581 2582 // if (x.getSeedValue() !is null) { 2583 // print0(ucase ? " SEED (" : " seed ("); 2584 // x.getSeedValue().accept(this); 2585 // print(')'); 2586 // } 2587 2588 // return false; 2589 // } 2590 2591 // override 2592 // public void endVisit(SampleClause x) { 2593 2594 // } 2595 2596 // public bool visit(OracleSelectJoin x) { 2597 // x.getLeft().accept(this); 2598 // SQLTableSource right = x.getRight(); 2599 2600 // if (x.getJoinType() == SQLJoinTableSource.JoinType.COMMA) { 2601 // print0(", "); 2602 // x.getRight().accept(this); 2603 // } else { 2604 // bool isRoot = cast(SQLSelectQueryBlock)x.getParent() !is null; 2605 // if (isRoot) { 2606 // this.indentCount++; 2607 // } 2608 2609 // println(); 2610 // print0(ucase ? x.getJoinType().name : x.getJoinType().name_lcase); 2611 // print(' '); 2612 2613 // if (cast(SQLJoinTableSource)(right) !is null) { 2614 // print('('); 2615 // right.accept(this); 2616 // print(')'); 2617 // } else { 2618 // right.accept(this); 2619 // } 2620 2621 // if (isRoot) { 2622 // this.indentCount--; 2623 // } 2624 2625 // if (x.getCondition() !is null) { 2626 // print0(ucase ? " ON " : " on "); 2627 // x.getCondition().accept(this); 2628 // print(' '); 2629 // } 2630 2631 // if (x.getUsing().size() > 0) { 2632 // print0(ucase ? " USING (" : " using ("); 2633 // printAndAccept(x.getUsing(), ", "); 2634 // print(')'); 2635 // } 2636 2637 // printFlashback(x.getFlashback()); 2638 // } 2639 2640 // return false; 2641 // } 2642 2643 // override 2644 // public bool visit(OracleSelectPivot x) { 2645 // print0(ucase ? "PIVOT" : "pivot"); 2646 // if (x.isXml()) { 2647 // print0(ucase ? " XML" : " xml"); 2648 // } 2649 // print0(" ("); 2650 // printAndAccept(x.getItems(), ", "); 2651 2652 // if (x.getPivotFor().size() > 0) { 2653 // print0(ucase ? " FOR " : " for "); 2654 // if (x.getPivotFor().size() == 1) { 2655 // (cast(SQLExpr) x.getPivotFor().get(0)).accept(this); 2656 // } else { 2657 // print('('); 2658 // printAndAccept(x.getPivotFor(), ", "); 2659 // print(')'); 2660 // } 2661 // } 2662 2663 // if (x.getPivotIn().size() > 0) { 2664 // print0(ucase ? " IN (" : " in ("); 2665 // printAndAccept(x.getPivotIn(), ", "); 2666 // print(')'); 2667 // } 2668 2669 // print(')'); 2670 2671 // return false; 2672 // } 2673 2674 // override 2675 // public bool visit(OracleSelectPivot.Item x) { 2676 // x.getExpr().accept(this); 2677 // if ((x.getAlias() !is null) && (x.getAlias().length > 0)) { 2678 // print0(ucase ? " AS " : " as "); 2679 // print0(x.getAlias()); 2680 // } 2681 // return false; 2682 // } 2683 2684 // override 2685 // public bool visit(OracleSelectRestriction.CheckOption x) { 2686 // print0(ucase ? "CHECK OPTION" : "check option"); 2687 // if (x.getConstraint() !is null) { 2688 // print(' '); 2689 // x.getConstraint().accept(this); 2690 // } 2691 // return false; 2692 // } 2693 2694 // override 2695 // public bool visit(OracleSelectRestriction.ReadOnly x) { 2696 // print0(ucase ? "READ ONLY" : "read only"); 2697 // return false; 2698 // } 2699 2700 // public bool visit(OracleDbLinkExpr x) { 2701 // SQLExpr expr = x.getExpr(); 2702 // if (expr !is null) { 2703 // expr.accept(this); 2704 // print('@'); 2705 // } 2706 // print0(x.getDbLink()); 2707 // return false; 2708 // } 2709 2710 // override 2711 // public void endVisit(OracleAnalytic x) { 2712 2713 // } 2714 2715 // override 2716 // public void endVisit(OracleAnalyticWindowing x) { 2717 2718 // } 2719 2720 // public void endVisit(OracleDbLinkExpr x) { 2721 2722 // } 2723 2724 // override 2725 // public void endVisit(OracleDeleteStatement x) { 2726 2727 // } 2728 2729 // override 2730 // public void endVisit(OracleIntervalExpr x) { 2731 2732 // } 2733 2734 // override 2735 // public void endVisit(OracleOuterExpr x) { 2736 2737 // } 2738 2739 // override 2740 // public void endVisit(OracleSelectJoin x) { 2741 2742 // } 2743 2744 // override 2745 // public void endVisit(OracleSelectPivot x) { 2746 2747 // } 2748 2749 // override 2750 // public void endVisit(OracleSelectPivot.Item x) { 2751 2752 // } 2753 2754 // override 2755 // public void endVisit(OracleSelectRestriction.CheckOption x) { 2756 2757 // } 2758 2759 // override 2760 // public void endVisit(OracleSelectRestriction.ReadOnly x) { 2761 2762 // } 2763 2764 // override 2765 // public void endVisit(OracleSelectSubqueryTableSource x) { 2766 2767 // } 2768 2769 // override 2770 // public void endVisit(OracleSelectUnPivot x) { 2771 2772 // } 2773 2774 // override 2775 // public void endVisit(OracleUpdateStatement x) { 2776 2777 // } 2778 2779 // public bool visit(OracleDeleteStatement x) { 2780 // return visit(cast(SQLDeleteStatement) x); 2781 // } 2782 2783 private void printFlashback(SQLExpr flashback) { 2784 if (flashback is null) { 2785 return; 2786 } 2787 2788 println(); 2789 2790 if (cast(SQLBetweenExpr)(flashback) !is null) { 2791 flashback.accept(this); 2792 } else { 2793 print0(ucase ? "AS OF " : "as of "); 2794 flashback.accept(this); 2795 } 2796 } 2797 2798 // public bool visit(OracleWithSubqueryEntry x) { 2799 // print0(x.getAlias()); 2800 2801 // if (x.getColumns().size() > 0) { 2802 // print0(" ("); 2803 // printAndAccept(x.getColumns(), ", "); 2804 // print(')'); 2805 // } 2806 2807 // print0(ucase ? " AS " : " as "); 2808 // print('('); 2809 // this.indentCount++; 2810 // println(); 2811 // x.getSubQuery().accept(this); 2812 // this.indentCount--; 2813 // println(); 2814 // print(')'); 2815 2816 // if (x.getSearchClause() !is null) { 2817 // println(); 2818 // x.getSearchClause().accept(this); 2819 // } 2820 2821 // if (x.getCycleClause() !is null) { 2822 // println(); 2823 // x.getCycleClause().accept(this); 2824 // } 2825 // return false; 2826 // } 2827 2828 // override 2829 // public void endVisit(OracleWithSubqueryEntry x) { 2830 2831 // } 2832 2833 // override 2834 // public bool visit(SearchClause x) { 2835 // print0(ucase ? "SEARCH " : "search "); 2836 // print0(x.getType().name()); 2837 // print0(ucase ? " FIRST BY " : " first by "); 2838 // printAndAccept(x.getItems(), ", "); 2839 // print0(ucase ? " SET " : " set "); 2840 // x.getOrderingColumn().accept(this); 2841 2842 // return false; 2843 // } 2844 2845 // override 2846 // public void endVisit(SearchClause x) { 2847 2848 // } 2849 2850 // override 2851 // public bool visit(CycleClause x) { 2852 // print0(ucase ? "CYCLE " : "cycle "); 2853 // printAndAccept(x.getAliases(), ", "); 2854 // print0(ucase ? " SET " : " set "); 2855 // x.getMark().accept(this); 2856 // print0(ucase ? " TO " : " to "); 2857 // x.getValue().accept(this); 2858 // print0(ucase ? " DEFAULT " : " default "); 2859 // x.getDefaultValue().accept(this); 2860 2861 // return false; 2862 // } 2863 2864 // override 2865 // public void endVisit(CycleClause x) { 2866 2867 // } 2868 2869 // public bool visit(OracleAnalytic x) { 2870 // print0(ucase ? "OVER (" : "over ("); 2871 2872 // bool space = false; 2873 // if (x.getPartitionBy().size() > 0) { 2874 // print0(ucase ? "PARTITION BY " : "partition by "); 2875 // printAndAccept(x.getPartitionBy(), ", "); 2876 2877 // space = true; 2878 // } 2879 2880 // SQLOrderBy orderBy = x.getOrderBy(); 2881 // if (orderBy !is null) { 2882 // if (space) { 2883 // print(' '); 2884 // } 2885 // visit(orderBy); 2886 // space = true; 2887 // } 2888 2889 // OracleAnalyticWindowing windowing = x.getWindowing(); 2890 // if (windowing !is null) { 2891 // if (space) { 2892 // print(' '); 2893 // } 2894 // visit(windowing); 2895 // } 2896 2897 // print(')'); 2898 2899 // return false; 2900 // } 2901 2902 // public bool visit(OracleAnalyticWindowing x) { 2903 // print0(x.getType().name().toUpperCase()); 2904 // print(' '); 2905 // x.getExpr().accept(this); 2906 // return false; 2907 // } 2908 2909 // override 2910 // public bool visit(OracleIsOfTypeExpr x) { 2911 // printExpr(x.getExpr()); 2912 // print0(ucase ? " IS OF TYPE (" : " is of type ("); 2913 2914 // List!(SQLExpr) types = x.getTypes(); 2915 // for (int i = 0, size = types.size(); i < size; ++i) { 2916 // if (i != 0) { 2917 // print0(", "); 2918 // } 2919 // SQLExpr type = types.get(i); 2920 // if (Boolean.TRUE == type.getAttribute("ONLY")) { 2921 // print0(ucase ? "ONLY " : "only "); 2922 // } 2923 // type.accept(this); 2924 // } 2925 2926 // print(')'); 2927 // return false; 2928 // } 2929 2930 // public void endVisit(OracleIsOfTypeExpr x) { 2931 2932 // } 2933 2934 // override 2935 // public bool visit(OracleRunStatement x) { 2936 // print0("@@"); 2937 // printExpr(x.getExpr()); 2938 // return false; 2939 // } 2940 2941 // override 2942 // public void endVisit(OracleRunStatement x) { 2943 2944 // } 2945 2946 override 2947 public bool visit(SQLIfStatement.Else x) { 2948 print0(ucase ? "ELSE" : "else"); 2949 this.indentCount++; 2950 println(); 2951 2952 for (int i = 0, size = x.getStatements().size(); i < size; ++i) { 2953 if (i != 0) { 2954 println(); 2955 } 2956 SQLStatement item = x.getStatements().get(i); 2957 item.accept(this); 2958 } 2959 2960 this.indentCount--; 2961 return false; 2962 } 2963 2964 override 2965 public bool visit(SQLIfStatement.ElseIf x) { 2966 print0(ucase ? "ELSE IF " : "else if "); 2967 x.getCondition().accept(this); 2968 print0(ucase ? " THEN" : " then"); 2969 this.indentCount++; 2970 2971 for (int i = 0, size = x.getStatements().size(); i < size; ++i) { 2972 println(); 2973 SQLStatement item = x.getStatements().get(i); 2974 item.accept(this); 2975 } 2976 2977 this.indentCount--; 2978 return false; 2979 } 2980 2981 override 2982 public bool visit(SQLIfStatement x) { 2983 print0(ucase ? "IF " : "if "); 2984 int lines = this.lines; 2985 this.indentCount++; 2986 x.getCondition().accept(this); 2987 this.indentCount--; 2988 2989 if (lines != this.lines) { 2990 println(); 2991 } else { 2992 print(' '); 2993 } 2994 print0(ucase ? "THEN" : "then"); 2995 2996 this.indentCount++; 2997 for (int i = 0, size = x.getStatements().size(); i < size; ++i) { 2998 println(); 2999 SQLStatement item = x.getStatements().get(i); 3000 item.accept(this); 3001 } 3002 this.indentCount--; 3003 3004 foreach(SQLIfStatement.ElseIf elseIf ; x.getElseIfList()) { 3005 println(); 3006 elseIf.accept(this); 3007 } 3008 3009 if (x.getElseItem() !is null) { 3010 println(); 3011 x.getElseItem().accept(this); 3012 } 3013 println(); 3014 print0(ucase ? "END IF" : "end if"); 3015 return false; 3016 } 3017 3018 override 3019 public bool visit(SQLCreateIndexStatement x) { 3020 print0(ucase ? "CREATE " : "create "); 3021 if (x.getType() !is null) { 3022 print0(x.getType()); 3023 print(' '); 3024 } 3025 3026 print0(ucase ? "INDEX " : "index "); 3027 3028 x.getName().accept(this); 3029 3030 if (x.getUsing() !is null) { 3031 print0(ucase ? " USING " : " using "); 3032 print0(x.getUsing()); 3033 } 3034 3035 print0(ucase ? " ON " : " on "); 3036 x.getTable().accept(this); 3037 print0(" ("); 3038 printAndAccept!SQLSelectOrderByItem((x.getItems()), ", "); 3039 print(')'); 3040 3041 SQLExpr comment = x.getComment(); 3042 if (comment !is null) { 3043 print0(ucase ? " COMMENT " : " comment "); 3044 comment.accept(this); 3045 } 3046 3047 return false; 3048 } 3049 3050 override 3051 public bool visit(SQLAlterTableAddColumn x) { 3052 bool odps = isOdps(); 3053 print0(ucase ? "ADD COLUMN " : "add column "); 3054 printAndAccept!SQLColumnDefinition((x.getColumns()), ", "); 3055 return false; 3056 } 3057 3058 override protected void visitAggreateRest(SQLAggregateExpr x) { 3059 SQLOrderBy orderBy = x.getWithinGroup(); 3060 if (orderBy !is null) { 3061 print(' '); 3062 orderBy.accept(this); 3063 } 3064 } 3065 3066 override protected void print0(Bytes data) { 3067 string s = format("E'%(\\\\%03o%)'", data.value()); 3068 print0(s); 3069 } 3070 3071 alias print0 = SQLASTOutputVisitor.print0; 3072 }