1 package com.daffodilwoods.daffodildb.server.sql99.dml; 2 3 import java.text.*; 4 5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 6 import com.daffodilwoods.daffodildb.server.serversystem.*; 7 import com.daffodilwoods.daffodildb.server.serversystem.datatriggersystem.*; 8 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.statementtriggersystem.*; 9 import com.daffodilwoods.daffodildb.server.sessionsystem.*; 10 import com.daffodilwoods.daffodildb.server.sql99.*; 11 import com.daffodilwoods.daffodildb.server.sql99.common.*; 12 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 13 import com.daffodilwoods.daffodildb.server.sql99.dql.listenerevents.*; 14 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 15 import com.daffodilwoods.daffodildb.utils.*; 16 import com.daffodilwoods.database.general.*; 17 import com.daffodilwoods.database.resource.*; 18 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*; 19 import java.util.*; 20 import com.daffodilwoods.database.utility.P; 21 import com.daffodilwoods.daffodildb.server.datasystem.utility.RecordVersion; 22 23 public class InsertExecuterSubquery implements _Executer { 24 25 _StatementExecutionContext sec; _Executer executer; 27 _DataTriggerTable dataTriggerTable; 28 _StatementTriggerTable statementTriggerTable; 29 _UserSession childUserSession; 30 int[] columnsType; 31 int[] size; 32 int[] columnIndexes; 33 int[] scale; 34 Collator collator; 35 _ServerSession serverSession; TableDetails td; 37 _Reference[] questionMarks; 38 _DropTableInfo[] dropTableInfo; 39 QualifiedIdentifier tableName; 40 private fromsubquery subQuery; 41 public InsertExecuterSubquery(TableDetails tableDetails, ColumnDetails[] columnDetails, _StatementExecutionContext ssec, _Executer exec, _Reference[] questions, fromsubquery subQuery0, QualifiedIdentifier tableName0) throws DException { 42 sec = ssec; 43 serverSession = sec.getServerSession(); executer = exec; 45 questionMarks = questions; 46 td = tableDetails; 47 performInitialisations(tableDetails, columnDetails); 48 subQuery = subQuery0; 49 ArrayList listOfTables = new ArrayList(); 50 subQuery.getTablesIncluded(listOfTables); 51 ArrayList dropTablesList = new ArrayList(); 52 QualifiedIdentifier table; 53 for (int i = 0; i < listOfTables.size(); i++) { 54 String [] tableName = (String []) listOfTables.get(i); 55 if (tableName.length < 3) { 56 if (tableName.length == 1) 57 table = new QualifiedIdentifier(serverSession.getCurrentCatalog(), serverSession.getCurrentSchema(), tableName[0]); 58 else 59 table = new QualifiedIdentifier(serverSession.getCurrentCatalog(), tableName[0], tableName[1]); 60 } else 61 table = new QualifiedIdentifier(tableName[0], tableName[1], tableName[2]); 62 if (serverSession.getColumnCharacteristics(table).getTableType() == TypeConstants.TABLE) 63 dropTablesList.add( ( (_MergeTable) serverSession.getIndexTable(table)).getDropTableInfo()); 64 } 65 table = tableDetails.getQualifiedIdentifier(); 66 dropTablesList.add( ( (_MergeTable) serverSession.getIndexTable(table)).getDropTableInfo()); 67 dropTableInfo = (_DropTableInfo[]) dropTablesList.toArray(new _DropTableInfo[0]); 68 tableName = tableName0; 69 } 70 71 public Object execute(_VariableValues parm1) throws com.daffodilwoods.database.resource.DException { 72 checkForDroppedTable(); 73 childUserSession = sec.getServerSession().getUserSession(); 74 childUserSession.startSavePoint(); 75 _VariableValues vvInitialised = initialiseVariableValues(parm1); 76 sec.setUserSession(childUserSession); 77 statementTriggerTable.fireBeforeInsertStatementLevelTriggers(sec); 78 _Iterator iterator = (_Iterator) executer.execute(vvInitialised); 79 int count = 0; 80 try { 81 Object insertEvent = null; 82 if (iterator.last()) { 83 do { 84 insertEvent = dataTriggerTable.insert(columnIndexes, FieldUtility.convertToAppropriateType(FieldUtility.setFieldLiteralBufferRange( (Object []) ( (_SelectIterator) iterator).getSelectColumnValues()), columnsType, size, scale, collator), sec); 85 count++; 86 } while (iterator.previous()); 87 } 88 89 statementTriggerTable.fireAfterInsertStatementLevelTriggers(sec); 90 } catch (DException e) { 91 childUserSession.rollbackSavePoint(sec); 92 if (e.getDseCode().equalsIgnoreCase("DSE5582")) { 93 throw new DException("DSE5582", null); 94 } 95 if (e.getDseCode().equalsIgnoreCase("DSE5583")) 96 throw new DException("DSE5583", null); 97 throw e; 98 } 99 catch (Exception e) { 100 childUserSession.rollbackSavePoint(sec); 101 throw new DException("DSE0", new Object [] {e.getMessage()}); 102 } 103 childUserSession.commitSavePoint(sec); 104 if (sec.getAutoCommit() && serverSession.getAutoCommit() && !childUserSession.getSession().hasAnyChild()) { 105 serverSession.commit(); 106 } 107 if (sec.getAutoGeneratedType()) { 108 DMLResult dmlResult = sec.getDMLResult(); 109 dmlResult.setrowsEffected(count); 110 return dmlResult; 111 } 112 return new Integer (count); 113 } 114 115 public Object execute(Object [] obj) throws com.daffodilwoods.database.resource.DException { 116 checkForDroppedTable(); 117 if (obj == null) { 118 if (questionMarks != null) { 119 throw new DException("DSE1273", null); 120 } 121 return execute( (_VariableValues)null); 122 } 123 _VariableValues vv = new VariableValues(questionMarks, sec.getServerSession()); 124 if (obj.length != questionMarks.length) { 125 throw new DmlStatementException("DSE1275", new Object [] {td.getQualifiedTableName()} 126 , new DException("DSE1252", new Object [] {new Integer (obj.length), new Integer (questionMarks.length)})); 127 } 128 vv.setConditionVariableValue(questionMarks, FieldUtility.getFields(obj), 2); 129 return execute(vv); 130 } 131 132 private void performInitialisations(TableDetails tableDetails, ColumnDetails[] columnDetails) throws DException { 133 QualifiedIdentifier tableName = tableDetails.getQualifiedIdentifier(); 134 dataTriggerTable = sec.getDataTriggerTable(tableName); 135 statementTriggerTable = sec.getStatementTriggerTable(tableName); 136 } 137 138 139 private _VariableValues initialiseVariableValues(_VariableValues vv) throws DException { 140 Object [][] refValuePair = null; 141 _Reference[] ref = null; 142 if (vv != null) { 143 refValuePair = vv.getReferenceAndValuePair(); 144 ref = getReferences(refValuePair); 145 } 146 if (questionMarks != null && ref == null) { 147 throw new DException("DSE1273", null); 148 } 149 150 _VariableValues vvToReturn = new VariableValues(ref, sec.getServerSession()); 151 if (vv != null && ref != null) { 152 vvToReturn.setConditionVariableValue(ref, getValues(refValuePair), 1); 153 } 154 return vvToReturn; 155 } 156 157 private _Reference[] getReferences(Object [][] refValue) { 158 if (refValue != null) { 159 int len = refValue.length; 160 _Reference[] refToReturn = new _Reference[len]; 161 for (int i = 0; i < len; i++) { 162 refToReturn[i] = (_Reference) refValue[i][0]; 163 } 164 return refToReturn; 165 } 166 return null; 167 } 168 169 private Object [] getValues(Object [][] refValue) { 170 int len = refValue.length; 171 Object [] toReturn = new Object [len]; 172 for (int i = 0; i < len; i++) { 173 toReturn[i] = refValue[i][1]; 174 } 175 return toReturn; 176 } 177 178 public Object executeForFresh(Object [] parm1) throws com.daffodilwoods.database.resource.DException { 179 180 throw new java.lang.UnsupportedOperationException ("Method executeForFresh() not yet implemented."); 181 } 182 183 public void checkForDroppedTable() throws DException { 184 for (int i = 0; i < dropTableInfo.length; i++) { 185 if (dropTableInfo[i].isTableDropped()) 186 throw new DException("DSE5584", null); 187 } 188 } 189 190 public void setInitialParameters(int[] columnsType0, int[] size0, int[] columnIndexes0, int[] scale0, Collator collator0) { 191 columnsType = columnsType0; 192 size = size0; 193 columnIndexes = columnIndexes0; 194 scale = scale0; 195 collator = collator0; 196 } 197 } 198 | Popular Tags |