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}