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}