001package gudusoft.gsqlparser.nodes; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.nodes.hive.THiveFromQuerySqlNode; 005import gudusoft.gsqlparser.nodes.hive.THiveKeyValueProperty; 006import gudusoft.gsqlparser.nodes.hive.THivePartitionedTableFunction; 007import gudusoft.gsqlparser.nodes.snowflake.TAtBeforeClause; 008import gudusoft.gsqlparser.nodes.snowflake.TStageReference; 009import gudusoft.gsqlparser.nodes.teradata.TTDUnpivot; 010 011import java.util.ArrayList; 012 013/** 014* Represents table source in from clause of select/delete statement, and update table clause of update statement. 015* 016*/ 017public class TFromTable extends TNodeWithAliasClause{ 018 019// private TPartitionClause partitionClause; 020// 021// public void setPartitionClause(TPartitionClause partitionClause) { 022// 023// this.partitionClause = partitionClause; 024// } 025// 026// public TPartitionClause getPartitionClause() { 027// return partitionClause; 028// } 029 030 private TStageReference stageReference; 031 032 public TStageReference getStageReference() { 033 return stageReference; 034 } 035 036 private TAtBeforeClause timeTravelClause; 037 038 public void setTimeTravelClause(TAtBeforeClause timeTravelClause) { 039 this.timeTravelClause = timeTravelClause; 040 } 041 042 public TAtBeforeClause getTimeTravelClause() { 043 return timeTravelClause; 044 } 045 private TCaseJoinClause caseJoin; 046 047 public TCaseJoinClause getCaseJoin() { 048 return caseJoin; 049 } 050 051 private TExpression joinCondition; 052 053 public void setJoinCondition(TExpression joinCondition) { 054 this.joinCondition = joinCondition; 055 } 056 057 /** 058 * used in couchbase only 059 * @return 060 */ 061 public TExpression getJoinCondition() { 062 063 return joinCondition; 064 } 065 066 private int parenthesisCount = 0; 067 private int parenthesisAfterAliasCount = 0; 068 069 public TPxGranule getPxGranule() { 070 return pxGranule; 071 } 072 073 public void incParenthesisCount(){ 074 parenthesisCount++; 075 } 076 077 public void incParenthesisAfterAliasCount(){ 078 parenthesisAfterAliasCount++; 079 } 080 081 public int getParenthesisCount() { 082 return parenthesisCount; 083 } 084 085 public int getParenthesisAfterAliasCount() { 086 return parenthesisAfterAliasCount; 087 } 088 089 public void setTableProperties(TPTNodeList<THiveKeyValueProperty> tableProperties) { 090 this.tableProperties = tableProperties; 091 } 092 093 /** 094 * 095 * @return hive table property list 096 */ 097 public TPTNodeList<THiveKeyValueProperty> getTableProperties() { 098 099 return tableProperties; 100 } 101 102 private TPTNodeList<THiveKeyValueProperty> tableProperties; 103 104 private THiveFromQuerySqlNode fromQuerySqlNode; 105 106 private TPartitionExtensionClause partitionExtensionClause; 107 108 public TPartitionExtensionClause getPartitionExtensionClause() { 109 return partitionExtensionClause; 110 } 111 112 public void setPartitionExtensionClause(TPartitionExtensionClause partitionExtensionClause) { 113 114 this.partitionExtensionClause = partitionExtensionClause; 115 } 116 117 private TColumnDefinitionList columnDefinitions; 118 119 public TColumnDefinitionList getColumnDefinitions() { 120 return columnDefinitions; 121 } 122 123 private TValueClause valueClause; 124 125 public TValueClause getValueClause() { 126 return valueClause; 127 } 128 129 private TJsonTable jsonTable; 130 131 public TJsonTable getJsonTable() { 132 return jsonTable; 133 } 134 135 private TXmlTable xmlTable; 136 137 public TXmlTable getXmlTable() { 138 return xmlTable; 139 } 140 141 public TObjectName getTableObjectName() { 142 return tableObjectName; 143 } 144 145 public TExpression getTableExpr() { 146 return tableExpr; 147 } 148 149 public void setTableObjectName(TObjectName tableObjectName) { 150 //tableObjectName.parseTablename(); 151 this.tableObjectName = tableObjectName; 152 this.tableObjectName.setObjectType(TObjectName.ttobjTable); 153 this.tableObjectName.setDbObjectType(EDbObjectType.table); 154 } 155 156 private TObjectName tableObjectName; 157 158 public TOpenQuery getOpenQuery() { 159 return openQuery; 160 } 161 162 private TPTNodeList<TTableHint> tableHintList; 163 164 public void setTableHintList(TPTNodeList<TTableHint> tableHintList) { 165 this.tableHintList = tableHintList; 166 } 167 168 public TPTNodeList<TTableHint> getTableHintList() { 169 170 return tableHintList; 171 } 172 173 public TSelectSqlNode getSubquerynode() { 174 return subquerynode; 175 } 176 177 private TSelectSqlNode subquerynode; 178 private TExpression tableExpr; 179 180 private TMultiTargetList rowList; 181 182 public TMultiTargetList getRowList() { 183 return rowList; 184 } 185 186 private TSourceToken tableonly; 187 188 private boolean tableKeyword = false; 189 private boolean onlyKeyword = false; 190 191 public boolean isTableKeyword() { 192 return tableKeyword; 193 } 194 195 public boolean isOnlyKeyword() { 196 return onlyKeyword; 197 } 198 199 public TJoinExpr getJoinExpr() { 200 return joinExpr; 201 } 202 203 private TJoinExpr joinExpr; 204 205 public ETableSource getFromtableType() { 206 return fromtableType; 207 208 } 209 210 private ETableSource fromtableType; 211 212 213 public TOpenDatasource getOpenDatasource() { 214 return openDatasource; 215 } 216 217 private TOpenDatasource openDatasource = null; 218 219 public TOpenRowSet getOpenRowSet() { 220 return openRowSet; 221 } 222 223 public TOpenXML getOpenXML() { 224 return openXML; 225 } 226 227 private TOpenXML openXML = null; 228 229 private TOpenRowSet openRowSet = null; 230 231 private TOpenQuery openQuery = null; 232 233 public TContainsTable getContainsTable() { 234 return containsTable; 235 } 236 237 private TContainsTable containsTable = null; 238 239 public void setTableonly(TSourceToken tableonly) { 240 this.tableonly = tableonly; 241 if (tableonly.toString().equalsIgnoreCase("only")){ 242 onlyKeyword = true; 243 }else if(tableonly.toString().equalsIgnoreCase("table")){ 244 tableKeyword = true; 245 if (tableExpr != null){ 246 fromtableType = ETableSource.tableExpr; 247 } 248 } 249 } 250 251 public void setTableSample(TTableSample tableSample) { 252 this.tableSample = tableSample; 253 } 254 255 public void setPxGranule(TPxGranule pxGranule) { 256 this.pxGranule = pxGranule; 257 } 258 259 public void setFlashback(TFlashback flashback) { 260 this.flashback = flashback; 261 } 262 263 private TTableSample tableSample; 264 private TPxGranule pxGranule; 265 266 public TFlashback getFlashback() { 267 return flashback; 268 } 269 270 private TFlashback flashback; 271 272 public TTableSample getTableSample() { 273 return tableSample; 274 } 275 276 private TDataChangeTable datachangeTable = null; 277 private TRelationExpr relationExpr; 278 279 /** 280 * Postgresql relation expr 281 * @return 282 */ 283 public TRelationExpr getRelationExpr() { 284 return relationExpr; 285 } 286 287 /** 288 * DB2 data change 289 * @return 290 */ 291 public TDataChangeTable getDatachangeTable() { 292 return datachangeTable; 293 } 294 295 296 public TMergeSqlNode getMergeSqlNode() { 297 return mergeSqlNode; 298 } 299 300 private TMergeSqlNode mergeSqlNode; 301 private TPivotedTable pivotedTable; 302 303 public TPivotedTable getPivotedTable() { 304 return pivotedTable; 305 } 306 307 public void setPivotClause(TPivotClause pivotClause) { 308 this.pivotClause = pivotClause; 309 } 310 311 public TPivotClause getPivotClause() { 312 313 return pivotClause; 314 } 315 316 private TPivotClause pivotClause = null; 317 318 /** 319 * a table-valued function, in SQL Server, Postgresql 320 * @return 321 */ 322 public TFunctionCall getFuncCall() { 323 return funcCall; 324 } 325 326 private TFunctionCall funcCall = null; 327 328 private TInformixOuterClause outerClause; 329 330 private TFromTableList fromTableList; 331 332 public TFromTableList getFromTableList() { 333 return fromTableList; 334 } 335 336 public TInformixOuterClause getOuterClause() { 337 return outerClause; 338 } 339 340 private THivePartitionedTableFunction partitionedTableFunction; 341 342 343 public THivePartitionedTableFunction getPartitionedTableFunction() { 344 return partitionedTableFunction; 345 } 346 347 private ArrayList<TLateralView> lateralViewList; 348 349 public void setLateralViewList(ArrayList<TLateralView> lateralViewList) { 350 this.lateralViewList = lateralViewList; 351 } 352 353 /** 354 * 355 * @return hive lateral view list 356 */ 357 public ArrayList<TLateralView> getLateralViewList() { 358 359 return lateralViewList; 360 } 361 362 private TExpressionList joinExprList; 363 364 public void setJoinExprList(TExpressionList joinExprList) { 365 this.joinExprList = joinExprList; 366 } 367 368 /** 369 * 370 * @return hive uniqueJoinExpr list 371 */ 372 public TExpressionList getJoinExprList() { 373 374 return joinExprList; 375 } 376 377 public THiveFromQuerySqlNode getFromQuerySqlNode() { 378 return fromQuerySqlNode; 379 } 380 381 public void setColumnDefinitions(TColumnDefinitionList columnDefinitions) { 382 this.columnDefinitions = columnDefinitions; 383 if (this.columnDefinitions != null){ 384 fromtableType = ETableSource.externalTable; 385 } 386 } 387 388 private TDummy tableFunctionReturn; 389 390 public void setTableFunctionReturn(TDummy tableFunctionReturn) { 391 if (tableFunctionReturn == null) return; 392 this.tableFunctionReturn = tableFunctionReturn; 393 if (this.tableFunctionReturn.list1 != null){ 394 this.columnDefinitions = (TColumnDefinitionList)this.tableFunctionReturn.list1; 395 } 396 } 397 398 // Constants for type codes 399 private static final int TYPE_OBJECT_NAME = 1; 400 private static final int TYPE_SELECT_SQL_NODE = 2; 401 private static final int TYPE_EXPRESSION = 3; 402 private static final int TYPE_JOIN_EXPR = 4; 403 private static final int TYPE_DUMMY = 5; 404 private static final int TYPE_CONTAINS_TABLE = 6; 405 private static final int TYPE_OPEN_ROW_SET = 7; 406 private static final int TYPE_OPEN_XML = 8; 407 private static final int TYPE_OPEN_DATASOURCE = 9; 408 private static final int TYPE_OPEN_QUERY = 10; 409 private static final int TYPE_DATA_CHANGE_TABLE = 11; 410 private static final int TYPE_RELATION_EXPR = 12; 411 private static final int TYPE_JSON_TABLE = 13; 412 private static final int TYPE_FUNCTION_CALL = 14; 413 private static final int TYPE_XML_TABLE = 15; 414 private static final int TYPE_INFORMIX_OUTER_CLAUSE = 16; 415 private static final int TYPE_FROM_TABLE_LIST = 17; 416 private static final int TYPE_HIVE_PARTITIONED_TABLE_FUNCTION = 18; 417 private static final int TYPE_HIVE_FROM_QUERY_SQL_NODE = 19; 418 private static final int TYPE_PIVOTED_TABLE = 20; 419 private static final int TYPE_MERGE_SQL_NODE = 21; 420 private static final int TYPE_TD_UNPIVOT = 22; 421 private static final int TYPE_UNNEST_CLAUSE = 23; 422 private static final int TYPE_VALUE_CLAUSE = 24; 423 private static final int TYPE_CASE_JOIN_CLAUSE = 25; 424 private static final int TYPE_STAGE_REFERENCE = 26; 425 426 public void init(Object arg1) { 427 if (arg1 == null) return; 428 429 int typeCode = getTypeCode(arg1); 430 431 switch (typeCode) { 432 case TYPE_OBJECT_NAME: 433 setTableObjectName((TObjectName) arg1); 434 fromtableType = ETableSource.objectname; 435 break; 436 case TYPE_SELECT_SQL_NODE: 437 subquerynode = (TSelectSqlNode) arg1; 438 fromtableType = ETableSource.subquery; 439 setStartToken(subquerynode.getStartToken()); 440 setEndToken(subquerynode.getEndToken()); 441 break; 442 case TYPE_EXPRESSION: 443 initExpression((TExpression) arg1); 444 break; 445 case TYPE_JOIN_EXPR: 446 joinExpr = (TJoinExpr) arg1; 447 fromtableType = ETableSource.join; 448 break; 449 case TYPE_DUMMY: 450 initTableDefInDummyNode((TDummy) arg1); 451 break; 452 case TYPE_CONTAINS_TABLE: 453 containsTable = (TContainsTable) arg1; 454 fromtableType = ETableSource.containsTable; 455 break; 456 case TYPE_OPEN_ROW_SET: 457 openRowSet = (TOpenRowSet) arg1; 458 fromtableType = ETableSource.openrowset; 459 break; 460 case TYPE_OPEN_XML: 461 openXML = (TOpenXML) arg1; 462 fromtableType = ETableSource.openxml; 463 break; 464 case TYPE_OPEN_DATASOURCE: 465 openDatasource = (TOpenDatasource) arg1; 466 fromtableType = ETableSource.opendatasource; 467 break; 468 case TYPE_OPEN_QUERY: 469 openQuery = (TOpenQuery) arg1; 470 fromtableType = ETableSource.openquery; 471 break; 472 case TYPE_DATA_CHANGE_TABLE: 473 datachangeTable = (TDataChangeTable) arg1; 474 fromtableType = ETableSource.datachangeTable; 475 break; 476 case TYPE_RELATION_EXPR: 477 initRelationExpr((TRelationExpr) arg1); 478 break; 479 case TYPE_JSON_TABLE: 480 jsonTable = (TJsonTable) arg1; 481 fromtableType = ETableSource.jsonTable; 482 break; 483 case TYPE_FUNCTION_CALL: 484 // This will handle TFunctionCall and all its subclasses 485 funcCall = (TFunctionCall) arg1; 486 fromtableType = ETableSource.function; 487 break; 488 case TYPE_XML_TABLE: 489 xmlTable = (TXmlTable) arg1; 490 fromtableType = ETableSource.xmltable; 491 break; 492 case TYPE_INFORMIX_OUTER_CLAUSE: 493 outerClause = (TInformixOuterClause) arg1; 494 fromtableType = ETableSource.informixOuter; 495 break; 496 case TYPE_FROM_TABLE_LIST: 497 fromTableList = (TFromTableList) arg1; 498 fromtableType = ETableSource.table_ref_list; 499 break; 500 case TYPE_HIVE_PARTITIONED_TABLE_FUNCTION: 501 partitionedTableFunction = (THivePartitionedTableFunction) arg1; 502 break; 503 case TYPE_HIVE_FROM_QUERY_SQL_NODE: 504 fromQuerySqlNode = (THiveFromQuerySqlNode) arg1; 505 fromtableType = ETableSource.hiveFromQuery; 506 break; 507 case TYPE_PIVOTED_TABLE: 508 pivotedTable = (TPivotedTable) arg1; 509 fromtableType = ETableSource.pivoted_table; 510 break; 511 case TYPE_MERGE_SQL_NODE: 512 mergeSqlNode = (TMergeSqlNode) arg1; 513 fromtableType = ETableSource.output_merge; 514 break; 515 case TYPE_TD_UNPIVOT: 516 tdUnpivot = (TTDUnpivot) arg1; 517 fromtableType = ETableSource.td_unpivot; 518 break; 519 case TYPE_UNNEST_CLAUSE: 520 unnestClause = (TUnnestClause) arg1; 521 fromtableType = ETableSource.unnest; 522 break; 523 case TYPE_VALUE_CLAUSE: 524 valueClause = (TValueClause) arg1; 525 fromtableType = ETableSource.rowList; 526 break; 527 case TYPE_CASE_JOIN_CLAUSE: 528 caseJoin = (TCaseJoinClause) arg1; 529 fromtableType = ETableSource.caseJoin; 530 break; 531 case TYPE_STAGE_REFERENCE: 532 stageReference = (TStageReference) arg1; 533 fromtableType = ETableSource.stageReference; 534 break; 535 default: 536 // Handle unexpected types or throw an exception 537 throw new IllegalArgumentException("Unexpected argument type: " + arg1.getClass().getSimpleName()); 538 } 539 } 540 541 private int getTypeCode(Object arg1) { 542 if (arg1 instanceof TObjectName) return TYPE_OBJECT_NAME; 543 if (arg1 instanceof TSelectSqlNode) return TYPE_SELECT_SQL_NODE; 544 if (arg1 instanceof TExpression) return TYPE_EXPRESSION; 545 if (arg1 instanceof TJoinExpr) return TYPE_JOIN_EXPR; 546 if (arg1 instanceof TDummy) return TYPE_DUMMY; 547 if (arg1 instanceof TContainsTable) return TYPE_CONTAINS_TABLE; 548 if (arg1 instanceof TOpenRowSet) return TYPE_OPEN_ROW_SET; 549 if (arg1 instanceof TOpenXML) return TYPE_OPEN_XML; 550 if (arg1 instanceof TOpenDatasource) return TYPE_OPEN_DATASOURCE; 551 if (arg1 instanceof TOpenQuery) return TYPE_OPEN_QUERY; 552 if (arg1 instanceof TDataChangeTable) return TYPE_DATA_CHANGE_TABLE; 553 if (arg1 instanceof TRelationExpr) return TYPE_RELATION_EXPR; 554 if (arg1 instanceof TJsonTable) return TYPE_JSON_TABLE; 555 if (arg1 instanceof TFunctionCall) return TYPE_FUNCTION_CALL; 556 if (arg1 instanceof TXmlTable) return TYPE_XML_TABLE; 557 if (arg1 instanceof TInformixOuterClause) return TYPE_INFORMIX_OUTER_CLAUSE; 558 if (arg1 instanceof TFromTableList) return TYPE_FROM_TABLE_LIST; 559 if (arg1 instanceof THivePartitionedTableFunction) return TYPE_HIVE_PARTITIONED_TABLE_FUNCTION; 560 if (arg1 instanceof THiveFromQuerySqlNode) return TYPE_HIVE_FROM_QUERY_SQL_NODE; 561 if (arg1 instanceof TPivotedTable) return TYPE_PIVOTED_TABLE; 562 if (arg1 instanceof TMergeSqlNode) return TYPE_MERGE_SQL_NODE; 563 if (arg1 instanceof TTDUnpivot) return TYPE_TD_UNPIVOT; 564 if (arg1 instanceof TUnnestClause) return TYPE_UNNEST_CLAUSE; 565 if (arg1 instanceof TValueClause) return TYPE_VALUE_CLAUSE; 566 if (arg1 instanceof TCaseJoinClause) return TYPE_CASE_JOIN_CLAUSE; 567 if (arg1 instanceof TStageReference) return TYPE_STAGE_REFERENCE; 568 return 0; // Unknown type 569 } 570 private void initExpression(TExpression expr) { 571 tableExpr = expr; 572 fromtableType = ETableSource.tableExpr; 573 if (tableExpr.getExpressionType() == EExpressionType.simple_object_name_t) { 574 setTableObjectName(tableExpr.getObjectOperand()); 575 fromtableType = ETableSource.objectname; 576 } 577 } 578 579 private void initRelationExpr(TRelationExpr expr) { 580 relationExpr = expr; 581 setTableObjectName(relationExpr.getRelationName()); 582 fromtableType = ETableSource.objectname; 583 } 584 private TUnnestClause unnestClause; 585 586 public TUnnestClause getUnnestClause() { 587 return unnestClause; 588 } 589 590 private TTDUnpivot tdUnpivot; 591 592 public TTDUnpivot getTdUnpivot() { 593 return tdUnpivot; 594 } 595 596 private TPTNodeList <TTableHint> nameListToTableHint(Object arg1,boolean isSybaseIndexHint){ 597 TPTNodeList<TTableHint> hints = new TPTNodeList<TTableHint>(); 598 if (arg1 instanceof TObjectNameList){ 599 TObjectNameList columns = (TObjectNameList)arg1; 600 for (int i=0;i<columns.size();i++){ 601 TObjectName column = columns.getObjectName(i); 602 if ((isSybaseIndexHint)||(isSQLServerHint(column.toString()))){ 603 TTableHint tableHint = new TTableHint(); 604 tableHint.setHint(column); 605 if (i == 0) 606 tableHint.setStartToken(column.getStartToken()); 607 if (i == columns.size() - 1) 608 tableHint.setEndToken(column.getStartToken()); 609 hints.addElement(tableHint); 610 }else { 611 hints.removeAllElements(); 612 break; 613 } 614 } 615 }else if (arg1 instanceof TExpressionList){ 616 TExpressionList expressionList = (TExpressionList)arg1; 617 for(int i=0;i<expressionList.size();i++){ 618 TExpression expression = expressionList.getExpression(i); 619 if ((isSybaseIndexHint)||(isSQLServerHint(expression.toString()))){ 620 TTableHint tableHint = new TTableHint(); 621 tableHint.setHint(expression.getObjectOperand()); 622 if (i == 0) 623 tableHint.setStartToken(expression.getStartToken()); 624 if (i == expressionList.size() - 1) 625 tableHint.setEndToken(expression.getStartToken()); 626 hints.addElement(tableHint); 627 }else { 628 hints.removeAllElements(); 629 break; 630 } 631 } 632 } 633 634 if (hints.size() > 0) 635 return hints; 636 else 637 return null; 638 } 639 640 private boolean isSQLServerHint(String pstr){ 641 boolean retval = false; 642 String[] hints = new String[] { 643 "fastfirstrow","holdlock","nolock","nowait","paglock", 644 "readcommitted","readcommittedlock","readpast","readuncommitted","repeatableread", 645 "rowlock","serializable","tablock","tablockx","updlock", 646 "xlock","keepidentity","keepdefaults","ignore_constraints","ignore_triggers", 647 "index" 648 }; 649 650 for(int i=0;i<21;i++) 651 { 652 if (hints[i].compareToIgnoreCase(pstr) == 0){ 653 retval = true; 654 break; 655 } 656 } 657 658 return retval; 659 } 660 661 private void initTableDefInDummyNode(TDummy pdummy){ 662 fromtableType = ETableSource.objectname; //default, may change to ftt_function later 663 664 if (pdummy.int1 == 0){ 665 setTableObjectName((TObjectName)(pdummy.node1)); 666 }else if (pdummy.int1 == 1){ 667 if (pdummy.list1 == null){ 668 //it's a function 669 funcCall = new TFunctionCall();//(TFunctionCall)createNode(ENodeType.T_FunctionCall.getId(),((TObjectName)pdummy.node1)); 670 funcCall.init(((TObjectName) pdummy.node1),EFunctionType.udf_t); 671 //((TObjectName)pdummy.node1).parseFunctionName(); 672 // ((TObjectName)pdummy.node1).setObjectType(TObjectName.ttobjFunctionName); 673 funcCall.setStartToken(pdummy.getStartToken()); 674 funcCall.setEndToken(pdummy.getEndToken()); 675 funcCall.setArgs(null); 676 fromtableType = ETableSource.function; 677 }else{ 678 tableHintList = nameListToTableHint(((TExpressionList)pdummy.list1),false); 679 if ( tableHintList != null){ 680 //if (isSQLServerHint(((TExpressionList)pdummy.list1).getExpression(0).toString())){ 681 //this is sql server hint, not a function, so set table name 682 setTableObjectName((TObjectName)(pdummy.node1)); 683 }else{ 684 //it's a function 685 funcCall = new TFunctionCall();//(TFunctionCall)createNode(ENodeType.T_FunctionCall.getId(),((TObjectName)pdummy.node1)); 686 funcCall.init(((TObjectName)pdummy.node1),EFunctionType.udf_t); 687 //((TObjectName)pdummy.node1).parseFunctionName(); 688 // ((TObjectName)pdummy.node1).setObjectType(TObjectName.ttobjFunctionName); 689 funcCall.setArgs((TExpressionList)pdummy.list1); 690 fromtableType = ETableSource.function; 691 funcCall.setStartToken(pdummy.getStartToken()); 692 funcCall.setEndToken(pdummy.getEndToken()); 693 } 694 } 695 }else if (pdummy.int1 == 2){ 696 setTableObjectName((TObjectName)(pdummy.node1)); 697 tableHintList = nameListToTableHint(pdummy.list1,false); //sql server only, maybe deleted in future 698 }else if (pdummy.int1 == 3){ 699 setTableObjectName((TObjectName)(pdummy.node1)); 700 tableHintList = (TPTNodeList)(pdummy.node3); //sybase index table hint 701 } 702 703 if (pdummy.node2 != null){ 704 this.setAliasClause((TAliasClause)(pdummy.node2)); 705 if (this.getAliasClause().isSybaseIndexHint()){ 706 tableHintList = this.getAliasClause().getTableHints(); 707 this.getAliasClause().setEndToken(this.getAliasClause().getAliasName().getEndToken()); 708 }else 709 if (this.getAliasClause().getColumns() != null){ 710 tableHintList = nameListToTableHint(this.getAliasClause().getColumns(),this.getAliasClause().isSybaseIndexHint()); 711 if (tableHintList != null){ 712 //this is not column list of table alias, this is table hint like NOLOCK in this sql: 713 // SELECT COUNT(DISTINCT(SD_KEY)) FROM SHORTWINDOW PAST (NOLOCK) 714 this.getAliasClause().setEndToken(this.getAliasClause().getAliasName().getEndToken()); 715 } 716 } 717 718 } 719 720 } 721 722 public void init(Object arg1,Object arg2) 723 { 724 init(arg1); 725 if (arg2 != null){ 726 this.setAliasClause((TAliasClause)arg2); 727 // this is table alias 728 this.getAliasClause().setDBObjectToAlias(EDbObjectType.table_alias); 729 } 730 } 731 732 public void setTableProperties(TDummyList tableProperties){ 733 for(int i=0;i<tableProperties.size();i++){ 734 TDummy dummy = tableProperties.getDummyItem(i); 735 TParseTreeNode node = dummy.node1; 736 if (node instanceof TAliasClause){ 737 this.setAliasClause( (TAliasClause)node); 738 } 739 } 740 } 741 742 public void setParenthesisCount(int parenthesisCount) { 743 this.parenthesisCount = parenthesisCount; 744 } 745 746 public void setParenthesisAfterAliasCount(int parenthesisAfterAliasCount) { 747 this.parenthesisAfterAliasCount = parenthesisAfterAliasCount; 748 } 749 750 public void setXmlTable(TXmlTable xmlTable) { 751 this.xmlTable = xmlTable; 752 } 753 754 public void setTableExpr(TExpression tableExpr) { 755 this.tableExpr = tableExpr; 756 } 757 758 public void setRowList(TMultiTargetList rowList) { 759 this.rowList = rowList; 760 } 761 762 public void setTableKeyword(boolean tableKeyword) { 763 this.tableKeyword = tableKeyword; 764 } 765 766 public void setOnlyKeyword(boolean onlyKeyword) { 767 this.onlyKeyword = onlyKeyword; 768 } 769 770 public void setJoinExpr(TJoinExpr joinExpr) { 771 this.joinExpr = joinExpr; 772 } 773 774 public void setFromtableType(ETableSource fromtableType) { 775 this.fromtableType = fromtableType; 776 } 777 778 public void setOpenDatasource(TOpenDatasource openDatasource) { 779 this.openDatasource = openDatasource; 780 } 781 782 public void setOpenXML(TOpenXML openXML) { 783 this.openXML = openXML; 784 } 785 786 public void setOpenRowSet(TOpenRowSet openRowSet) { 787 this.openRowSet = openRowSet; 788 } 789 790 public void setOpenQuery(TOpenQuery openQuery) { 791 this.openQuery = openQuery; 792 } 793 794 public void setContainsTable(TContainsTable containsTable) { 795 this.containsTable = containsTable; 796 } 797 798 public void setDatachangeTable(TDataChangeTable datachangeTable) { 799 this.datachangeTable = datachangeTable; 800 } 801 802 public void setRelationExpr(TRelationExpr relationExpr) { 803 this.relationExpr = relationExpr; 804 } 805 806 public void setPivotedTable(TPivotedTable pivotedTable) { 807 this.pivotedTable = pivotedTable; 808 } 809 810 public void setFuncCall(TFunctionCall funcCall) { 811 this.funcCall = funcCall; 812 } 813 814 public void setOuterClause(TInformixOuterClause outerClause) { 815 this.outerClause = outerClause; 816 } 817 818 public void setFromTableList(TFromTableList fromTableList) { 819 this.fromTableList = fromTableList; 820 } 821 822 public void setPartitionedTableFunction(THivePartitionedTableFunction partitionedTableFunction) { 823 this.partitionedTableFunction = partitionedTableFunction; 824 } 825 826 public void accept(TParseTreeVisitor v){ 827 v.preVisit(this); 828 v.postVisit(this); 829 } 830 831 public void acceptChildren(TParseTreeVisitor v) { 832 v.preVisit(this); 833 switch (fromtableType){ 834 case objectname: 835 tableObjectName.acceptChildren(v); 836 break; 837 case subquery: 838 // subquerynode 839 break; 840 case tableExpr: 841 tableExpr.acceptChildren(v); 842 break; 843 case join: 844 joinExpr.acceptChildren(v); 845 break; 846 case function: 847 funcCall.acceptChildren(v); 848 break; 849 case containsTable: 850 containsTable.acceptChildren(v); 851 break; 852 case openrowset: 853 openRowSet.acceptChildren(v); 854 break; 855 case openxml: 856 openXML.acceptChildren(v); 857 break; 858 case opendatasource: 859 openDatasource.acceptChildren(v); 860 break; 861 case openquery: 862 openQuery.acceptChildren(v); 863 break; 864 case datachangeTable: 865 datachangeTable.acceptChildren(v); 866 break; 867 case xmltable: 868 xmlTable.acceptChildren(v); 869 break; 870 case informixOuter: 871 outerClause.acceptChildren(v); 872 break; 873 case table_ref_list: 874 fromTableList.acceptChildren(v); 875 break; 876 case hiveFromQuery: 877 fromQuerySqlNode.acceptChildren(v); 878 break; 879 case pivoted_table: 880 pivotedTable.acceptChildren(v); 881 break; 882 case output_merge: 883 mergeSqlNode.acceptChildren(v); 884 break; 885 case td_unpivot: 886 tdUnpivot.acceptChildren(v); 887 break; 888 case unnest: 889 unnestClause.acceptChildren(v); 890 break; 891 case jsonTable: 892 jsonTable.acceptChildren(v); 893 break; 894 case rowList: 895 valueClause.acceptChildren(v); 896 break; 897 } 898 899 v.postVisit(this); 900 } 901}