001package gudusoft.gsqlparser.nodes; 002 003import gudusoft.gsqlparser.EExpressionType; 004import gudusoft.gsqlparser.ESqlClause; 005import gudusoft.gsqlparser.ETableEffectType; 006import gudusoft.gsqlparser.TCustomSqlStatement; 007import gudusoft.gsqlparser.stmt.TInsertSqlStatement; 008 009public class TInsertIntoValue extends TParseTreeNode { 010 011 private TFromTable fromTable; 012 private TMultiTargetList targetList; 013 private TObjectNameList columnList; 014 private TTable table; 015 016 public TTable getTable() { 017 return table; 018 } 019 020 public TObjectNameList getColumnList() { 021 return columnList; 022 } 023 024 /** 025 * values in Oracle,snowflake Unconditional multi-table insert 026 * 027 * @return values 028 */ 029 public TMultiTargetList getTargetList() { 030 return targetList; 031 } 032 033 public void init(Object arg1){ 034 fromTable = (TFromTable)arg1; 035 } 036 037 public void init(Object arg1,Object arg2){ 038 fromTable = (TFromTable)((TDummy)arg1).node1; 039 if (((TDummy)arg1).node1 != null){ 040 columnList = (TObjectNameList)((TDummy)arg1).node2; 041 } 042 043 if (arg2 != null){ 044 targetList = (TMultiTargetList)((TDummy)arg2).list1; 045 } 046 047 } 048 049 public void doParse(TCustomSqlStatement psql, ESqlClause plocation){ 050 table = psql.analyzeFromTable(fromTable,true); 051 table.setEffectType(ETableEffectType.tetInsert); 052 053 if (columnList != null){ 054 TObjectName crf ; 055 for (int i=0;i< columnList.size();i++){ 056 crf =columnList.getObjectName(i); 057 // link this column to table 058 crf.setLocation(ESqlClause.insertColumn); 059 table.getObjectNameReferences().addObjectName(crf); 060 table.getLinkedColumns().addObjectName(crf); 061 crf.setSourceTable(table); 062 } 063 064 //insertNode.getColumnList().doParse(this,TBaseType.insertColumnClause); 065 } 066 067 if (targetList != null){ 068 069// if (psql instanceof TInsertSqlStatement){ 070// TInsertSqlStatement insert = (TInsertSqlStatement)psql; 071// if (insert.getSubQuery() != null){ 072// // insert overwrite all 073// // into t1 074// // into t1 (c1, c2, c3) values (n2, n1, default) 075// // into t2 (c1, c2, c3) 076// // into t2 values (n3, n2, n1) 077// //select n1, n2, n3 from src; 078// 079// for(TMultiTarget multiTarget:targetList){ 080// if (multiTarget.getColumnList() ==null) continue; 081// for(TResultColumn resultColumn:multiTarget.getColumnList()){ 082// TExpression expr = resultColumn.getExpr(); 083// if (expr.getExpressionType() == EExpressionType.simple_object_name_t){ 084// insert.getSubQuery().searchColumnInResultSet(expr.getObjectOperand(),false); 085// } 086// } 087// } 088// } 089// } 090 091 targetList.doParse(psql,ESqlClause.insertValues); 092 } 093 094 } 095 096 public void accept(TParseTreeVisitor v){ 097 v.preVisit(this); 098 v.postVisit(this); 099 } 100 101 public void acceptChildren(TParseTreeVisitor v){ 102 v.preVisit(this); 103 table.acceptChildren(v); 104 if (columnList != null){ 105 columnList.acceptChildren(v); 106 } 107 if (targetList != null){ 108 targetList.acceptChildren(v); 109 } 110 111 v.postVisit(this); 112 } 113 114 public void setFromTable(TFromTable fromTable) { 115 this.fromTable = fromTable; 116 } 117 118 public void setTargetList(TMultiTargetList targetList) { 119 this.targetList = targetList; 120 } 121 122 public void setColumnList(TObjectNameList columnList) { 123 this.columnList = columnList; 124 } 125 126 public void setTable(TTable table) { 127 this.table = table; 128 } 129 130}