001package gudusoft.gsqlparser.stmt;
002
003
004import gudusoft.gsqlparser.*;
005import gudusoft.gsqlparser.nodes.*;
006
007/**
008 * Athena, Hana, redshift
009 */
010public class TUnloadStmt extends TCustomSqlStatement {
011
012    private String selectStr;
013
014    public String getSelectStr() {
015        return selectStr;
016    }
017
018    public String getS3() {
019        return s3;
020    }
021
022    public TAuthorizationClause getAuthorizationClause() {
023        return authorizationClause;
024    }
025
026    private String s3;
027    private TAuthorizationClause authorizationClause;
028
029    private TSelectSqlStatement selectSqlStatement = null;
030
031    public TSelectSqlStatement getSelectSqlStatement() {
032        return selectSqlStatement;
033    }
034
035    public TUnloadStmt(EDbVendor dbvendor) {
036        super(dbvendor);
037        sqlstatementtype = ESqlStatementType.sstunload;
038    }
039
040    public int doParseStatement(TCustomSqlStatement psql) {
041        if (rootNode == null) return -1;
042        super.doParseStatement(psql);
043
044        TStatementSqlNode sqlNode = new TStatementSqlNode();
045        switch (dbvendor){
046            case dbvathena:
047                if (((TDummy)rootNode).node1 != null){
048                    sqlNode.init(((TDummy)rootNode).node1);
049                    sqlNode.doParse(this, ESqlClause.unknown);
050                    selectSqlStatement = (TSelectSqlStatement)sqlNode.getStmt();
051                }
052                break;
053            case dbvredshift:
054                TUnloadSqlNode node = (TUnloadSqlNode)rootNode;
055                selectStr = node.getSelectStmt().toString();
056                s3 = node.getS3().toString();
057                authorizationClause = node.getAuthorizationClause();
058                TSingletonParser singletonParser = TSingletonParser.getInstance();
059                TStatementList sqlStatements = singletonParser.getStmts(EDbVendor.dbvredshift, TBaseType.getStringInsideLiteral(selectStr) );
060                if (sqlStatements.size() == 1){
061                    if (sqlStatements.get(0).sqlstatementtype == ESqlStatementType.sstselect){
062                        selectSqlStatement = (TSelectSqlStatement)sqlStatements.get(0);
063                    }
064                }
065
066                break;
067        }
068
069
070        return 0;
071    }
072
073    public void accept(TParseTreeVisitor v) {
074        v.preVisit(this);
075        v.postVisit(this);
076    }
077
078    public void acceptChildren(TParseTreeVisitor v) {
079        v.preVisit(this);
080        v.postVisit(this);
081    }
082}