001package gudusoft.gsqlparser.stmt.mssql; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.nodes.TObjectName; 005import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 006import gudusoft.gsqlparser.nodes.mssql.TMssqlReadtextSqlNode; 007 008/** 009 * SQL Server READTEXT statement: 010 * <pre>READTEXT { table.column text_ptr offset size } [ HOLDLOCK ]</pre> 011 * The read {@code table.column} reference is registered as a statement table 012 * so name resolution links the column to its table 013 * ({@link TObjectName#getSourceTable()}). The offset and size operands are 014 * scalar values with no name-resolution semantics and are not modeled. 015 */ 016public class TMssqlReadText extends TCustomSqlStatement { 017 018 public TMssqlReadText(EDbVendor dbvendor){ 019 super(dbvendor); 020 sqlstatementtype = ESqlStatementType.sstmssqlreadtext; 021 } 022 023 private TObjectName sourceColumnName = null; 024 private TObjectName sourceTextPtr = null; 025 026 /** The name of the table and text, ntext, or image column to be read. */ 027 public TObjectName getSourceColumnName() { 028 return sourceColumnName; 029 } 030 031 /** The text pointer value (returned by the TEXTPTR function). */ 032 public TObjectName getSourceTextPtr() { 033 return sourceTextPtr; 034 } 035 036 public int doParseStatement(TCustomSqlStatement psql) { 037 if (rootNode == null) return -1; 038 if (!(rootNode instanceof TMssqlReadtextSqlNode)) { 039 // shared-dialect grammars (access/odbc) may still produce a stub or 040 // dummy node for this statement type -- degrade gracefully 041 return super.doParseStatement(psql); 042 } 043 TMssqlReadtextSqlNode readtextSqlNode = (TMssqlReadtextSqlNode)rootNode; 044 super.doParseStatement(psql); 045 this.sourceColumnName = readtextSqlNode.getSourceColumnName(); 046 this.sourceTextPtr = readtextSqlNode.getSourceTextPtr(); 047 TMssqlUpdateText.bindLobColumnTable(this, this.sourceColumnName, ETableEffectType.tetSelect); 048 return 0; 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}