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