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