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