001
002package gudusoft.gsqlparser.dlineage.dataflow.model;
003
004import gudusoft.gsqlparser.ESetOperatorType;
005import gudusoft.gsqlparser.nodes.TResultColumnList;
006import gudusoft.gsqlparser.stmt.TSelectSqlStatement;
007
008public class SelectSetResultSet extends ResultSet {
009
010    private TSelectSqlStatement selectObject;
011
012    public SelectSetResultSet(TSelectSqlStatement select, boolean isTarget) {
013        super(select, isTarget);
014        this.selectObject = select;
015    }
016
017    public ESetOperatorType getSetOperatorType() {
018        return selectObject.getSetOperatorType();
019    }
020
021    public TResultColumnList getResultColumnObject() {
022        return getResultColumnList(selectObject);
023    }
024    
025        private TResultColumnList getResultColumnList(TSelectSqlStatement stmt) {
026                TSelectSqlStatement current = stmt;
027                while (current.isCombinedQuery()) {
028                        // Prefer left branch, fall back to right
029                        if (current.getLeftStmt() != null) {
030                                TSelectSqlStatement left = current.getLeftStmt();
031                                if (!left.isCombinedQuery() && left.getResultColumnList() != null) {
032                                        return left.getResultColumnList();
033                                }
034                                if (left.isCombinedQuery()) {
035                                        current = left;
036                                        continue;
037                                }
038                        }
039                        // Left had no result columns, try right
040                        if (current.getRightStmt() != null) {
041                                TSelectSqlStatement right = current.getRightStmt();
042                                if (!right.isCombinedQuery() && right.getResultColumnList() != null) {
043                                        return right.getResultColumnList();
044                                }
045                                if (right.isCombinedQuery()) {
046                                        current = right;
047                                        continue;
048                                }
049                        }
050                        break;
051                }
052                return current.getResultColumnList();
053        }
054
055    public TSelectSqlStatement getSelectObject() {
056        return selectObject;
057    }
058}