001 002package gudusoft.gsqlparser.dlineage.dataflow.model; 003 004import gudusoft.gsqlparser.TCustomSqlStatement; 005import gudusoft.gsqlparser.TSourceToken; 006import gudusoft.gsqlparser.dlineage.util.Pair3; 007import gudusoft.gsqlparser.nodes.TCTE; 008import gudusoft.gsqlparser.nodes.TTable; 009import gudusoft.gsqlparser.stmt.TMergeSqlStatement; 010import gudusoft.gsqlparser.stmt.TSelectSqlStatement; 011import gudusoft.gsqlparser.util.SQLUtil; 012 013public class QueryTable extends ResultSet { 014 015 private String alias; 016 private Pair3<Long, Long, String> startPosition; 017 private Pair3<Long, Long, String> endPosition; 018 019 private TTable tableObject; 020 021 public QueryTable(TMergeSqlStatement mergeStmt) { 022 super(mergeStmt, false); 023 this.tableObject = mergeStmt.getUsingTable(); 024 025 TSourceToken startToken = tableObject.getStartToken(); 026 TSourceToken endToken = tableObject.getEndToken(); 027 028 if (tableObject.getAliasClause() != null) { 029 startToken = tableObject.getAliasClause().getStartToken(); 030 endToken = tableObject.getAliasClause().getEndToken(); 031 } 032 033 this.startPosition = new Pair3<Long, Long, String>(startToken.lineNo, startToken.columnNo, 034 ModelBindingManager.getGlobalHash()); 035 this.endPosition = new Pair3<Long, Long, String>(endToken.lineNo, 036 endToken.columnNo + SQLUtil.endTrim(endToken.astext).length(), ModelBindingManager.getGlobalHash()); 037 038 if (tableObject.getAliasClause() != null) { 039 this.alias = tableObject.getAliasName(); 040 } 041 } 042 043 public QueryTable(TTable tableObject) { 044 super(tableObject.getCTE() != null ? getCTEQuery(tableObject.getCTE()) 045 : (tableObject.getTableExpr() != null ? tableObject.getTableExpr().getSubQuery() 046 : tableObject.getOutputMerge() != null ? tableObject.getOutputMerge() 047 : tableObject.getSubquery() != null ? tableObject.getSubquery() 048 : tableObject.getValueClause() != null ? tableObject.getValueClause(): tableObject), 049 false); 050 051 this.tableObject = tableObject; 052 053 TSourceToken startToken = tableObject.getStartToken(); 054 TSourceToken endToken = tableObject.getEndToken(); 055 056 if (tableObject.getAliasClause() != null) { 057 startToken = tableObject.getAliasClause().getStartToken(); 058 endToken = tableObject.getAliasClause().getEndToken(); 059 } 060 061 this.startPosition = new Pair3<Long, Long, String>(startToken.lineNo, 062 startToken.columnNo, ModelBindingManager.getGlobalHash()); 063 this.endPosition = new Pair3<Long, Long, String>(endToken.lineNo, 064 endToken.columnNo + SQLUtil.endTrim(endToken.astext).length(), ModelBindingManager.getGlobalHash()); 065 066 if (tableObject.getAliasClause() != null) { 067 this.alias = tableObject.getAliasName(); 068 } 069 } 070 071 private static TCustomSqlStatement getCTEQuery(TCTE cte) { 072 if (cte.getSubquery() != null) 073 return cte.getSubquery(); 074 else if (cte.getUpdateStmt() != null) { 075 return cte.getUpdateStmt(); 076 } else if (cte.getInsertStmt() != null) { 077 return cte.getInsertStmt(); 078 } else if (cte.getDeleteStmt() != null) { 079 return cte.getDeleteStmt(); 080 } else 081 return null; 082 } 083 084 public String getAlias() { 085 return alias; 086 } 087 088 public Pair3<Long, Long, String> getStartPosition() { 089 return startPosition; 090 } 091 092 public Pair3<Long, Long, String> getEndPosition() { 093 return endPosition; 094 } 095 096 public TTable getTableObject() { 097 return tableObject; 098 } 099 100}