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}