001package gudusoft.gsqlparser.stmt; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.nodes.*; 005import gudusoft.gsqlparser.nodes.TCreateMacroSqlNode; 006 007 008public class TCreateMacro extends TStoredProcedureSqlStatement { 009 private TExpression expr; 010 011 public TExpression getExpr() { 012 return expr; 013 } 014 private TObjectName macroName; 015 016 public void setMacroName(TObjectName macroName) { 017 this.macroName = macroName; 018 019 } 020 021 public TObjectName getMacroName() { 022 023 return macroName; 024 } 025 026 public TCreateMacro(EDbVendor dbvendor) { 027 super(dbvendor); 028 sqlstatementtype = ESqlStatementType.sstteradatacreatemacro; 029 } 030 031 public int doParseStatement(TCustomSqlStatement psql) { 032 if (rootNode == null) return -1; 033 TCreateMacroSqlNode createMacroSqlNode = (TCreateMacroSqlNode)rootNode; 034 035 super.doParseStatement(psql); 036 037 this.macroName = createMacroSqlNode.getMacroName(); 038 this.macroName.setDbObjectType(EDbObjectType.macro); 039 this.setParameterDeclarations(createMacroSqlNode.getParameters()); 040 041 if (this.getParameterDeclarations() != null){ 042 for(int i=0;i< this.getParameterDeclarations().size();i++){ 043 this.getTopStatement().getSymbolTable().push( new TSymbolTableItem(TObjectName.ttobjParameter,this, this.getParameterDeclarations().getParameterDeclarationItem(i))); 044 } 045 } 046 047 TStatementListSqlNode stmts =createMacroSqlNode.getStmts(); 048 if (stmts != null){ 049 stmts.doParse(this, ESqlClause.unknown); 050 for(int i=0;i<stmts.size();i++){ 051 this.getBodyStatements().add(stmts.getStatementSqlNode(i).getStmt()); 052 } 053 } 054 055 this.expr = createMacroSqlNode.getExpr(); 056 if (this.expr != null){ 057 // hive 058 this.expr.doParse(this,ESqlClause.unknown); 059 } 060 061 if (this.getParameterDeclarations() != null){ 062 for(int i=0;i< this.getParameterDeclarations().size();i++){ 063 this.getTopStatement().getSymbolTable().pop(); 064 } 065 } 066 067 return 0; 068 } 069 070 public void accept(TParseTreeVisitor v){ 071 v.preVisit(this); 072 v.postVisit(this); 073 } 074 075 public void acceptChildren(TParseTreeVisitor v){ 076 v.preVisit(this); 077 getBodyStatements().acceptChildren(v); 078 v.postVisit(this); 079 } 080 081 082}