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}