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}