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}