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