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}