001package gudusoft.gsqlparser.nodes; 002 003import gudusoft.gsqlparser.EDeclareType; 004import gudusoft.gsqlparser.TBaseType; 005import gudusoft.gsqlparser.TSourceToken; 006 007import java.util.ArrayList; 008 009public class TDeclareSqlNode extends TParseTreeNode { 010 011 public void setWithReturnOnly(boolean withReturnOnly) { 012 this.withReturnOnly = withReturnOnly; 013 } 014 015 public boolean isWithReturnOnly() { 016 return withReturnOnly; 017 } 018 019 private boolean withReturnOnly = false; 020 021 private TSelectSqlNode selectSqlNode = null; 022 private TDeclareVariableList variables = null; 023 private TObjectName cursorName = null; 024 private EDeclareType declareType = EDeclareType.variable; 025 026 private TObjectName cursorStatement; 027 028 private TBlockSqlNode handlerBlock; 029 private TStatementSqlNode handleStmt; 030 031 public void setHandlerBlock(TBlockSqlNode handlerBlock) { 032 this.handlerBlock = handlerBlock; 033 } 034 035 public void setHandleStmt(TStatementSqlNode handleStmt) { 036 this.handleStmt = handleStmt; 037 } 038 039 public TBlockSqlNode getHandlerBlock() { 040 return handlerBlock; 041 } 042 043 public TStatementSqlNode getHandleStmt() { 044 return handleStmt; 045 } 046 047 public TObjectName getCursorStatement() { 048 return cursorStatement; 049 } 050 051 private TObjectName conditionName = null;//mysql 052 053 public EDeclareType getDeclareType() { 054 return declareType; 055 } 056 057 public TObjectName getConditionName() { 058 return conditionName; 059 } 060 061 public TObjectName getCursorName() { 062 return cursorName; 063 } 064 065 public void setDeclareType(EDeclareType declareType) { 066 this.declareType = declareType; 067 } 068 069 public static EDeclareType getDeclareTypeByToken(TSourceToken st){ 070 if (st == null) return EDeclareType.unknown ; 071 if (st.toString().equalsIgnoreCase("continue")){ 072 return EDeclareType.continueHandlers; 073 } 074 else if (st.toString().equalsIgnoreCase("exit")){ 075 return EDeclareType.exitHandlers; 076 }else 077 return EDeclareType.unknown; 078 } 079 080 private ArrayList<THandlerForCondition> handlerForConditions; 081 082 public void setHandlerForConditions(ArrayList<THandlerForCondition> handlerForConditions) { 083 this.handlerForConditions = handlerForConditions; 084 } 085 086 public ArrayList<THandlerForCondition> getHandlerForConditions() { 087 return handlerForConditions; 088 } 089 090 public TDeclareVariableList getVariables() { 091 return variables; 092 } 093 094 private TConstant stateValue; 095 private TConstant errorCode; 096 097 public TConstant getStateValue() { 098 return stateValue; 099 } 100 101 public TConstant getErrorCode() { 102 return errorCode; 103 } 104 105 public void init(Object arg1, Object arg2, Object arg3){ 106 declareType = (EDeclareType)arg1; 107 switch (declareType){ 108 case cursor: 109 this.cursorName = (TObjectName)arg2; 110 if (arg3 instanceof TSelectSqlNode){ 111 selectSqlNode = (TSelectSqlNode)arg3; 112 }else if (arg3 instanceof TObjectName){ 113 this.cursorStatement = (TObjectName)arg3; 114 } 115 break; 116 case conditions: 117 this.conditionName = (TObjectName)arg2; 118 TDummy d = (TDummy)arg3; 119 if (d.int1 == 1){ 120 this.stateValue = (TConstant) d.node1; 121 }else if (d.int1 == 2){ 122 this.errorCode = (TConstant)d.node1; 123 } 124 break; 125 default: 126 break; 127 } 128 } 129 130 public void init(Object arg1){ 131 declareType = (EDeclareType)arg1; 132 } 133 134 public void init(Object arg1,Object arg2){ 135 if (arg1 != null){ 136 if (arg1 instanceof EDeclareType){ 137 declareType = (EDeclareType)arg1; 138 switch (declareType){ 139 case conditions: 140 this.conditionName = (TObjectName)arg2; 141 break; 142 case tableType: 143 variables = (TDeclareVariableList)arg2; 144 break; 145 default: 146 break; 147 } 148 }else { 149 this.conditionName = (TObjectName)arg1; 150 this.declareType = EDeclareType.conditions; 151 } 152 } 153 if (arg2 instanceof TDeclareVariableList){ 154 variables = (TDeclareVariableList)arg2; 155 this.declareType = EDeclareType.variable; 156 }else if (arg2 instanceof TSelectSqlNode){ 157 this.cursorName = (TObjectName)arg1; 158 selectSqlNode = (TSelectSqlNode)arg2; 159 this.declareType = EDeclareType.cursor; 160 }else if (arg2 instanceof TStatementSqlNode){ 161 //db2,teradata handler 162 this.stmtSqlNode = (TStatementSqlNode)arg2; 163 // this.handleStmt = (TStatementSqlNode)arg2; 164 } 165 } 166 167 public TSelectSqlNode getSelectSqlNode() { 168 return selectSqlNode; 169 } 170 171 private TStatementSqlNode stmtSqlNode = null; 172 173 public TStatementSqlNode getStmtSqlNode() { 174 return stmtSqlNode; 175 } 176}