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}