001package gudusoft.gsqlparser.dlineage.dataflow.model; 002 003import java.util.ArrayList; 004import java.util.List; 005 006import gudusoft.gsqlparser.nodes.TObjectName; 007 008public abstract class Column { 009 private List<Column> starSourceColumns = new ArrayList<>(); 010 011 public List<Column> getStarSourceColumns() { 012 return starSourceColumns; 013 } 014 015 public void appendStarSourceColumn(Column starSourceColumn) { 016 if (starSourceColumn != null && !starSourceColumns.contains(starSourceColumn)) { 017 starSourceColumns.add(starSourceColumn); 018 List<TObjectName> columns = getStarLinkColumnList(); 019 if (columns != null) { 020 if (starSourceColumn instanceof ResultColumn) { 021 ResultSet parent = ((ResultColumn) starSourceColumn).getResultSet(); 022 boolean found = false; 023 for (TObjectName column : columns) { 024 for (ResultColumn resultColumn : parent.getColumns()) { 025 if (resultColumn.getName().equalsIgnoreCase(column.toString()) 026 || resultColumn.getName().equalsIgnoreCase(column.getColumnNameOnly())) { 027 found = true; 028 break; 029 } 030 } 031 if (!found) { 032 starSourceColumn.bindStarLinkColumn(column); 033 } 034 } 035 } else if (starSourceColumn instanceof TableColumn) { 036 Table parent = ((TableColumn) starSourceColumn).getTable(); 037 boolean found = false; 038 for (TObjectName column : columns) { 039 for (TableColumn resultColumn : parent.getColumns()) { 040 if (resultColumn.getName().equalsIgnoreCase(column.toString()) 041 || resultColumn.getName().equalsIgnoreCase(column.getColumnNameOnly())) { 042 found = true; 043 break; 044 } 045 } 046 if (!found) { 047 starSourceColumn.bindStarLinkColumn(column); 048 } 049 } 050 } 051 } 052 } 053 } 054 055 public abstract boolean bindStarLinkColumn(TObjectName objectName); 056 057 public abstract List<TObjectName> getStarLinkColumnList(); 058 059}