001package gudusoft.gsqlparser.stmt.teradata;
002
003import java.util.ArrayList;
004import java.util.List;
005
006import gudusoft.gsqlparser.EDbVendor;
007import gudusoft.gsqlparser.ESqlStatementType;
008import gudusoft.gsqlparser.TCustomSqlStatement;
009import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
010
011public class TTeradataMultiLoadLayout extends TCustomSqlStatement {
012    private String layoutName;
013    private List<LayoutField> fields;
014    private String command;
015
016    public String getLayoutName() {
017        return layoutName;
018    }
019
020    public List<LayoutField> getFields() {
021        return fields;
022    }
023
024    public void addField(String fieldName, String dataType, String delimiter) {
025        fields.add(new LayoutField(fieldName, dataType, delimiter));
026    }
027
028    public String generateLayoutScript() {
029        StringBuilder script = new StringBuilder();
030        script.append(".LAYOUT ").append(layoutName).append(";\n");
031        
032        for (LayoutField field : fields) {
033            script.append(".FIELD ")
034                  .append(field.getFieldName())
035                  .append(" * ")
036                  .append(field.getDataType())
037                  .append(" DELIMITER '")
038                  .append(field.getDelimiter())
039                  .append("';\n");
040        }
041        
042        return script.toString();
043    }
044
045    // Inner class to represent each field in the layout
046    public static class LayoutField {
047        private String fieldName;
048        private String dataType;
049        private String delimiter;
050
051        public LayoutField(String fieldName, String dataType, String delimiter) {
052            this.fieldName = fieldName;
053            this.dataType = dataType;
054            this.delimiter = delimiter;
055        }
056
057        // Getters
058        public String getFieldName() { return fieldName; }
059        public String getDataType() { return dataType; }
060        public String getDelimiter() { return delimiter; }
061    }
062
063
064    public TTeradataMultiLoadLayout(EDbVendor dbvendor, String command) {
065        super(dbvendor);
066        sqlstatementtype = ESqlStatementType.sstteradataMultiLoadLayout;
067        this.command = command;
068        this.fields = new ArrayList<>();
069    }
070
071    public void accept(TParseTreeVisitor v){
072            v.preVisit(this);
073            v.postVisit(this);
074        }
075
076    public void acceptChildren(TParseTreeVisitor v){
077        v.preVisit(this);
078        v.postVisit(this);
079    }
080
081    public void parseLayout() {
082        String layoutContent = command.trim();
083        
084        
085        // Split the content into lines
086        String[] lines = layoutContent.split("\n");
087        
088        for (String line : lines) {
089            line = line.trim();
090            
091            if (line.isEmpty()) {
092                continue;
093            }
094            
095            // Extract layout name
096            if (line.startsWith(".LAYOUT")) {
097                layoutName = line.substring(7)  // Remove ".LAYOUT "
098                    .replace(";", "")
099                    .trim();
100                continue;
101            }
102            
103            // Process field definitions
104            if (line.startsWith(".FIELD")) {
105                // Remove the .FIELD prefix
106                line = line.substring(6).trim();
107                
108                // Split the remaining string by spaces
109                String[] parts = line.split("\\s+");
110                
111                if (parts.length >= 4) {
112                    String fieldName = parts[0];
113                    String dataType = parts[2];
114                    
115                    // Extract delimiter from the last part (DELIMITER ',')
116                    String delimiter = parts[parts.length - 1]
117                        .replace("DELIMITER", "")
118                        .replace("'", "")
119                        .replace(";", "")
120                        .trim();
121                    
122                    fields.add(new LayoutField(fieldName, dataType, delimiter));
123                }
124            }
125        }
126        
127        
128    }
129
130}