001package gudusoft.gsqlparser.stmt.mssql; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.nodes.TConstant; 005import gudusoft.gsqlparser.nodes.TObjectName; 006import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 007import gudusoft.gsqlparser.nodes.TTable; 008import gudusoft.gsqlparser.nodes.mssql.TMssqlWritetextSqlNode; 009 010/** 011 * SQL Server WRITETEXT statement: 012 * <pre>WRITETEXT { table.column text_ptr } [ WITH LOG ] { data }</pre> 013 * The written {@code table.column} reference is registered as the statement's 014 * target table so name resolution links the column to its table 015 * ({@link TObjectName#getSourceTable()}). 016 */ 017public class TMssqlWriteText extends TCustomSqlStatement { 018 019 public TMssqlWriteText(EDbVendor dbvendor){ 020 super(dbvendor); 021 sqlstatementtype = ESqlStatementType.sstmssqlwritetext; 022 } 023 024 private TObjectName destColumnName = null; 025 private TObjectName destTextPtr = null; 026 private TObjectName writeDataVariable = null; 027 private TConstant writeDataLiteral = null; 028 029 /** The name of the table and text, ntext, or image column to be written. */ 030 public TObjectName getDestColumnName() { 031 return destColumnName; 032 } 033 034 /** The text pointer value (returned by the TEXTPTR function). */ 035 public TObjectName getDestTextPtr() { 036 return destTextPtr; 037 } 038 039 /** The data operand when given as a variable, null otherwise. */ 040 public TObjectName getWriteDataVariable() { 041 return writeDataVariable; 042 } 043 044 /** The data operand when given as a literal, null otherwise. */ 045 public TConstant getWriteDataLiteral() { 046 return writeDataLiteral; 047 } 048 049 public int doParseStatement(TCustomSqlStatement psql) { 050 if (rootNode == null) return -1; 051 if (!(rootNode instanceof TMssqlWritetextSqlNode)) { 052 // shared-dialect grammars (access/odbc) may still produce a stub or 053 // dummy node for this statement type -- degrade gracefully 054 return super.doParseStatement(psql); 055 } 056 TMssqlWritetextSqlNode writetextSqlNode = (TMssqlWritetextSqlNode)rootNode; 057 super.doParseStatement(psql); 058 this.destColumnName = writetextSqlNode.getDestColumnName(); 059 this.destTextPtr = writetextSqlNode.getDestTextPtr(); 060 this.writeDataVariable = writetextSqlNode.getWriteDataVariable(); 061 this.writeDataLiteral = writetextSqlNode.getWriteDataLiteral(); 062 TTable table = TMssqlUpdateText.bindLobColumnTable(this, this.destColumnName, ETableEffectType.tetUpdate); 063 if (table != null) { 064 setTargetTable(table); 065 } 066 return 0; 067 } 068 069 public void accept(TParseTreeVisitor v){ 070 v.preVisit(this); 071 v.postVisit(this); 072 } 073 074 public void acceptChildren(TParseTreeVisitor v){ 075 v.preVisit(this); 076 v.postVisit(this); 077 } 078}