001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.stmt.TSelectSqlStatement;
005
006/*
007* Date: 2010-4-15
008* Time: 11:21:00
009*/
010public class TOpenQuery extends TParseTreeNode {
011    private TObjectName linkedServer;
012    private TSourceToken queryToken;
013
014    private TSelectSqlStatement subquery = null;
015
016    public TSelectSqlStatement getSubquery() {
017        return subquery;
018    }
019
020    public TObjectName getLinkedServer() {
021        return linkedServer;
022    }
023
024    public TSourceToken getQueryToken() {
025        return queryToken;
026    }
027
028    public void init(Object arg1, Object arg2){
029        linkedServer = (TObjectName)arg1;
030        queryToken = (TSourceToken)arg2;
031    }
032
033    public void doParse(TCustomSqlStatement psql, ESqlClause plocation) {
034
035        TGSqlParser sqlParser = new TGSqlParser(EDbVendor.dbvmssql);
036        sqlParser.sqltext = TBaseType.getStringInsideLiteral(queryToken.toString());//.replaceAll("''","'");
037        sqlParser.setFrameStack(psql.getFrameStack());
038        int i = sqlParser.parse();
039        //An empty, whitespace-only or comment-only pass-through string parses
040        //with rc 0 and ZERO statements (mantis 4681) — guard before get(0).
041        if ((i == 0) && (sqlParser.sqlstatements.size() > 0)){
042            if (sqlParser.sqlstatements.get(0).sqlstatementtype == ESqlStatementType.sstselect){
043                subquery = (TSelectSqlStatement) sqlParser.sqlstatements.get(0);
044            }
045        }else{
046           // System.out.println(sqlParser.getErrormessage());
047        }
048        return;
049    }
050
051        public void accept(TParseTreeVisitor v){
052        v.preVisit(this);
053        v.postVisit(this);
054    }
055
056    public void acceptChildren(TParseTreeVisitor v){
057        v.preVisit(this);
058        v.postVisit(this);
059    }
060}