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 table.getObjectNameReferences().addObjectName(crf); 079 table.getLinkedColumns().addObjectName(crf); 080 crf.setSourceTable(table); 081 } 082 083 //insertNode.getColumnList().doParse(this,TBaseType.insertColumnClause); 084 } 085 086 if (targetList != null){ 087 088// if (psql instanceof TInsertSqlStatement){ 089// TInsertSqlStatement insert = (TInsertSqlStatement)psql; 090// if (insert.getSubQuery() != null){ 091// // insert overwrite all 092// // into t1 093// // into t1 (c1, c2, c3) values (n2, n1, default) 094// // into t2 (c1, c2, c3) 095// // into t2 values (n3, n2, n1) 096// //select n1, n2, n3 from src; 097// 098// for(TMultiTarget multiTarget:targetList){ 099// if (multiTarget.getColumnList() ==null) continue; 100// for(TResultColumn resultColumn:multiTarget.getColumnList()){ 101// TExpression expr = resultColumn.getExpr(); 102// if (expr.getExpressionType() == EExpressionType.simple_object_name_t){ 103// insert.getSubQuery().searchColumnInResultSet(expr.getObjectOperand(),false); 104// } 105// } 106// } 107// } 108// } 109 110 targetList.doParse(psql,ESqlClause.insertValues); 111 } 112 113 } 114 115 public void accept(TParseTreeVisitor v){ 116 v.preVisit(this); 117 v.postVisit(this); 118 } 119 120 public void acceptChildren(TParseTreeVisitor v){ 121 v.preVisit(this); 122 table.acceptChildren(v); 123 if (columnList != null){ 124 columnList.acceptChildren(v); 125 } 126 if (targetList != null){ 127 targetList.acceptChildren(v); 128 } 129 if (errorLoggingClause != null){ 130 errorLoggingClause.acceptChildren(v); 131 } 132 133 v.postVisit(this); 134 } 135 136 public void setFromTable(TFromTable fromTable) { 137 this.fromTable = fromTable; 138 } 139 140 public void setTargetList(TMultiTargetList targetList) { 141 this.targetList = targetList; 142 } 143 144 public void setColumnList(TObjectNameList columnList) { 145 this.columnList = columnList; 146 } 147 148 public void setTable(TTable table) { 149 this.table = table; 150 } 151 152}