001package gudusoft.gsqlparser.stmt; 002 003 004import gudusoft.gsqlparser.*; 005import gudusoft.gsqlparser.nodes.*; 006 007public class TUpsertStmt extends TCustomSqlStatement { 008 009 public TUpsertStmt(EDbVendor dbvendor) { 010 super(dbvendor); 011 sqlstatementtype = ESqlStatementType.sstupsert; 012 } 013 public int doParseStatement(TCustomSqlStatement psql) { 014 if (rootNode == null) return -1; 015 super.doParseStatement(psql); 016 TUpsertSqlNode upsertSqlNode = (TUpsertSqlNode) rootNode; 017 018 TTable lcTable = analyzeFromTable(upsertSqlNode.getTargetTable(),true); 019 lcTable.setEffectType(ETableEffectType.tetUpsert); 020 setTargetTable(lcTable); 021 022 this.columnList = upsertSqlNode.getColumnList(); 023 024 025 if (upsertSqlNode.getValues() != null){ 026 upsertSqlNode.getValues().doParse(this, ESqlClause.insertValues); 027 this.values = upsertSqlNode.getValues(); 028 }else if (upsertSqlNode.getSubQueryNode() != null){ 029 subQuery = new TSelectSqlStatement(this.dbvendor); 030 subQuery.rootNode = upsertSqlNode.getSubQueryNode(); 031 subQuery.doParseStatement(this); 032 } 033 034 if (upsertSqlNode.getReturningClause() != null){ 035 upsertSqlNode.getReturningClause().doParse(this,ESqlClause.returning); 036 this.setReturningClause(upsertSqlNode.getReturningClause()); 037 } 038 039 this.setWhereClause(upsertSqlNode.getWhereClause()); 040 041 return 0; 042 } 043 044 private TObjectNameList columnList; 045 046 public TObjectNameList getColumnList() { 047 return columnList; 048 } 049 050 private TMultiTargetList values = null; 051 052 public TMultiTargetList getValues() { 053 return values; 054 } 055 056 private TSelectSqlStatement subQuery = null; 057 058 public TSelectSqlStatement getSubQuery() { 059 return subQuery; 060 } 061 062 public void accept(TParseTreeVisitor v){ 063 v.preVisit(this); 064 v.postVisit(this); 065 } 066 067 public void acceptChildren(TParseTreeVisitor v){ 068 v.preVisit(this); 069 v.postVisit(this); 070 } 071 072}