001package gudusoft.gsqlparser.stmt.mssql; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.compiler.TFrame; 005import gudusoft.gsqlparser.compiler.TSymbolTableManager; 006import gudusoft.gsqlparser.compiler.TVariable; 007import gudusoft.gsqlparser.nodes.*; 008import gudusoft.gsqlparser.nodes.mssql.TMssqlSetSqlNode; 009import gudusoft.gsqlparser.nodes.mssql.TMssqlStmtStubSqlNode; 010import gudusoft.gsqlparser.stmt.TSelectSqlStatement; 011 012import java.util.Stack; 013 014public class TMssqlSet extends TCustomSqlStatement { 015 public TMssqlSet (EDbVendor dbvendor){ 016 super(dbvendor); 017 sqlstatementtype = ESqlStatementType.sstmssqlset ; 018 } 019 020 void buildsql() { 021 } 022 023 void clear() { 024 } 025 026 String getasprettytext() { 027 return ""; 028 } 029 030 void iterate(TVisitorAbs pvisitor) { 031 } 032 033 034 private TObjectName varName = null; 035 private TExpression varExpr = null; 036 037 public TExpressionList getVariable_expr_list() { 038 return variable_expr_list; 039 } 040 041 private TExpressionList variable_expr_list = null; 042 043 044 public TExpression getVarExpr() { 045 return varExpr; 046 } 047 048 public TObjectName getVarName() { 049 return varName; 050 } 051 052 public TFunctionCall getXmlMethod() { 053 return xmlMethod; 054 } 055 056 private TFunctionCall xmlMethod = null; 057 058 public TSelectSqlStatement getSubquery() { 059 return subquery; 060 } 061 062 private TSelectSqlStatement subquery = null; 063 private int setType = TBaseType.mstUnknown; 064 065 public int getSetType() { 066 return setType; 067 } 068 069 public int doParseStatement(TCustomSqlStatement psql) { 070 if (rootNode == null) return -1; 071 TMssqlSetSqlNode node = null; 072 TMssqlStmtStubSqlNode stubNode = null; 073 if (rootNode instanceof TMssqlSetSqlNode){ 074 node = (TMssqlSetSqlNode)rootNode; 075 }else if (rootNode instanceof TMssqlStmtStubSqlNode){ 076 stubNode = (TMssqlStmtStubSqlNode)rootNode; 077 } 078 079 super.doParseStatement(psql); 080 081 if (node != null){ 082 this.setType = node.getSetType(); 083 }else{ 084 this.setType = TBaseType.mstSetCmd; 085 } 086 087 switch(this.setType){ 088 case TBaseType.mstUnknown: 089 break; 090 case TBaseType.mstSybaseLocalVar: 091 this.variable_expr_list = node.getVariable_expr_list(); 092 this.variable_expr_list.doParse(this,ESqlClause.setVariable); 093 break; 094 case TBaseType.mstLocalVar: 095 this.varName = node.getVarName(); 096 this.varExpr = node.getVarExpr(); 097 this.varExpr.doParse(this,ESqlClause.setVariable); 098 Stack<TFrame> frameStack = null; 099 if (psql != null){ 100 frameStack = psql.getFrameStack(); 101 }else if (this.getGsqlparser() != null){ 102 frameStack = this.getGsqlparser().getFrameStack(); 103 } 104 if ( (frameStack != null) && (this.varName != null)){ 105 this.varExpr.evaluate(frameStack, psql); 106 107 TVariable symbolVariable = TSymbolTableManager.searchSymbolVariable(frameStack,varName.toString()); 108 if (symbolVariable != null){ 109 symbolVariable. setVariableStr(this.varExpr.getPlainText()); 110// System.out.println("Find variable:"+symbolVariable.getQualifiedName()); 111// System.out.println("variable value:"+symbolVariable.variableStr); 112 } 113 } 114 break; 115 case TBaseType.mstLocalVarCursor: 116 this.varName = node.getVarName(); 117 subquery = new TSelectSqlStatement(this.dbvendor); 118 subquery.rootNode = node.getSubquery(); 119 subquery.doParseStatement(this); 120 break; 121 case TBaseType.mstSetCmd: 122 break; 123 case TBaseType.mstXmlMethod: 124 this.xmlMethod = node.getXmlMethod(); 125 this.xmlMethod.doParse(this,ESqlClause.unknown); 126 break; 127 } 128 129 return 0; 130 } 131 132 public void accept(TParseTreeVisitor v){ 133 v.preVisit(this); 134 v.postVisit(this); 135 } 136 137 public void acceptChildren(TParseTreeVisitor v){ 138 v.preVisit(this); 139 v.postVisit(this); 140 } 141 142 public void setVarName(TObjectName varName) { 143 this.varName = varName; 144 } 145 146 public void setVarExpr(TExpression varExpr) { 147 this.varExpr = varExpr; 148 } 149 150 public void setVariable_expr_list(TExpressionList variable_expr_list) { 151 this.variable_expr_list = variable_expr_list; 152 } 153 154 public void setXmlMethod(TFunctionCall xmlMethod) { 155 this.xmlMethod = xmlMethod; 156 } 157 158 public void setSubquery(TSelectSqlStatement subquery) { 159 this.subquery = subquery; 160 } 161 162 public void setSetType(int setType) { 163 this.setType = setType; 164 } 165}