001package gudusoft.gsqlparser.stmt.teradata;
002
003import gudusoft.gsqlparser.EBTEQCmdType;
004import gudusoft.gsqlparser.EDbVendor;
005import gudusoft.gsqlparser.ESqlStatementType;
006import gudusoft.gsqlparser.TCustomSqlStatement;
007import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
008
009public class TTeradataMultiLoadCmd extends TCustomSqlStatement {
010
011    public  enum EMultiLoadCmdType {
012            UNKNOWN,
013            LAYOUT,
014            IMPORT,
015            EXPORT,
016            FIELD,// this is sub command of layout
017    }
018
019    public TTeradataMultiLoadCmd(EDbVendor dbvendor) {
020        super(dbvendor);
021        sqlstatementtype = ESqlStatementType.sstteradataMultiLoad;
022    }
023
024    public int doParseStatement(TCustomSqlStatement psql) {
025        //  if (rootNode == null) return -1;
026        //  super.doParseStatement(psql);
027
028        return 0;
029    }
030
031    protected int dochecksyntax(TCustomSqlStatement psql){
032        isparsed = true;
033        return 0; //not check syntax of sqlplus cmd ,always ok
034    }
035
036
037    public void accept(TParseTreeVisitor v){
038        v.preVisit(this);
039        v.postVisit(this);
040    }
041    public void acceptChildren(TParseTreeVisitor v){
042        v.preVisit(this);
043        v.postVisit(this);
044    }
045
046    private EMultiLoadCmdType cmdType = EMultiLoadCmdType.UNKNOWN;
047
048    public void setCmdType(EMultiLoadCmdType cmdType)
049    {
050        if (cmdType == null)
051        {
052            return;
053        }
054        this.cmdType = cmdType;
055    }
056
057    public EMultiLoadCmdType getCmdType() {
058        return cmdType;
059    }
060
061    private TCustomSqlStatement baseStatement = null;
062
063    public TCustomSqlStatement getBaseStatement() {
064        if (baseStatement != null) {
065            return baseStatement;
066        }
067
068        String sql = this.toString().replaceAll(";$", ""); // Remove trailing semicolon if present;
069
070        switch (cmdType) {
071            case  IMPORT:
072                baseStatement = new TTeradataMultiLoadImport(this.dbvendor);
073                ((TTeradataMultiLoadImport)baseStatement).setCommand(sql);
074                ((TTeradataMultiLoadImport)baseStatement).parseImportCommand();
075                break;
076            case LAYOUT:
077                baseStatement = new TTeradataMultiLoadLayout(this.dbvendor, sql);
078                ((TTeradataMultiLoadLayout)baseStatement).parseLayout();
079                break;
080            case EXPORT:
081                baseStatement = new TTeradataMultiLoadExport(this.dbvendor, sql);
082                
083                break;
084            default:
085                return null;
086        }
087        return baseStatement;
088    }
089}