001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.TObjectName;
005import gudusoft.gsqlparser.nodes.TExpression;
006import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
007import gudusoft.gsqlparser.nodes.TSelectSqlNode;
008
009/**
010 * The OPEN-FOR statement executes the SELECT statement associated with a cursor variable.
011 */
012
013public class TOpenforStmt extends TCustomSqlStatement {
014
015    public TOpenforStmt(){
016        this(EDbVendor.dbvoracle);
017    }
018    
019     public TOpenforStmt(EDbVendor dbvendor){
020        super(dbvendor);
021        sqlstatementtype = ESqlStatementType.sst_openforstmt;
022        }
023
024    public TSelectSqlStatement getSubquery() {
025        return subquery;
026    }
027
028    private TSelectSqlStatement subquery = null;
029    private TSelectSqlNode selectSqlNode = null;
030    
031    void buildsql() {
032    }
033
034    void clear() {
035    }
036
037    String getasprettytext() {
038        return "";
039    }
040
041    void iterate(TVisitorAbs pvisitor) {
042    }
043
044    public void init(Object arg1,Object arg2)
045    {
046        this.cursorVariableName = (TObjectName)arg1;
047        
048        if (arg2 instanceof TSelectSqlStatement){
049         subquery = (TSelectSqlStatement)arg2;
050        }else if (arg2 instanceof TSelectSqlNode){
051            selectSqlNode = (TSelectSqlNode)arg2;
052        }else{
053            dynamic_string = (TExpression)arg2;
054        }
055    }
056
057    public int doParseStatement(TCustomSqlStatement psql) {
058        super.doParseStatement(psql);
059
060        if (subquery != null){
061            subquery.parsestatement(this,false);
062        }else if (selectSqlNode != null){
063            //postgresql
064            subquery = new TSelectSqlStatement(this.dbvendor);
065            subquery.rootNode = selectSqlNode;
066            subquery.doParseStatement(this);
067        }
068
069        return 0;
070    }
071
072    private TObjectName cursorVariableName = null;
073
074    /**
075     *
076     * @return A cursor variable or parameter (without a return type), previously declared within the current scope.
077     */
078    public TObjectName getCursorVariableName() {
079        return cursorVariableName;
080    }
081
082    private TExpression dynamic_string = null;
083
084    /**
085     * 
086     * @return    A string literal, string variable, or string expression that represents any SQL statement.
087     */
088    public TExpression getDynamic_string() {
089        return dynamic_string;
090    }
091
092    public void accept(TParseTreeVisitor v){
093        v.preVisit(this);
094        v.postVisit(this);
095    }
096
097    public void acceptChildren(TParseTreeVisitor v){
098        v.preVisit(this);
099        if (subquery != null) subquery.acceptChildren(v);
100        v.postVisit(this);
101    }
102
103    public void setSubquery(TSelectSqlStatement subquery) {
104        this.subquery = subquery;
105    }
106
107    public void setCursorVariableName(TObjectName cursorVariableName) {
108        this.cursorVariableName = cursorVariableName;
109    }
110
111    public void setDynamic_string(TExpression dynamic_string) {
112        this.dynamic_string = dynamic_string;
113    }
114}