1 package com.daffodilwoods.daffodildb.server.sql99.dml; 2 3 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*; 4 import com.daffodilwoods.daffodildb.server.datasystem.utility.*; 5 import com.daffodilwoods.daffodildb.server.datasystem.utility._Record; 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.utils.*; 14 import com.daffodilwoods.daffodildb.utils.*; 15 import com.daffodilwoods.daffodildb.utils.field.*; 16 import com.daffodilwoods.database.general.*; 17 import com.daffodilwoods.database.resource.*; 18 19 public class DeleteExecuter implements _Executer { 20 _StatementExecutionContext sec; 21 TableDetails tableDetails; 22 _Iterator iterator; 23 _DataTriggerTable dataTriggerTable; 24 _StatementTriggerTable statementTriggerTable; 25 _UserSession childUserSession; 26 _ServerSession serverSession; 27 _Reference[] underlyingReferences, questionMarks; 28 long time; 29 boolean forFisrtTime; 30 private Object [] previousParameters; 31 private FieldBase[] previousFieldBase; 32 private _DropTableInfo[] dropTableInfo; 33 34 private QualifiedIdentifier tableName; 35 public DeleteExecuter(_StatementExecutionContext ssec, TableDetails tableDetails, _Iterator itera, long initialTime, _Reference[] knownReferences, _Reference[] questinMarks, _DropTableInfo[] dropTableInfo0, QualifiedIdentifier tableName0) throws DException { 36 sec = ssec; 37 iterator = itera; 38 serverSession = sec.getServerSession(); 39 this.tableDetails = tableDetails; 40 time = initialTime; 41 questionMarks = questinMarks; 42 underlyingReferences = knownReferences; 43 performInitialisations(); 44 dropTableInfo = dropTableInfo0; 45 tableName = tableName0; 46 } 47 48 public Object execute(_VariableValues vv) throws com.daffodilwoods.database.resource.DException { 49 checkForDroppedTable(); 50 iterator.releaseResource(); 51 return executeV(vv); 52 } 53 54 private Object executeV(_VariableValues vv) throws com.daffodilwoods.database.resource.DException { 55 childUserSession = sec.getServerSession().getUserSession(); 56 long t = System.currentTimeMillis(); 57 Object obj = null; 58 while (true) { 59 try { 60 if (System.currentTimeMillis() - time >= ( (_ServerSession) sec.getServerSession()).queryTimeOut && ( (_ServerSession) sec.getServerSession()).queryTimeOut != 0) { 61 return null; 62 } 63 obj = performExecution(vv); 64 return obj; 65 } catch (DException ex) { 66 if (ex.getDseCode().equalsIgnoreCase("DSE5582")) 67 throw new DException("DSE5582", null); 68 if (ex.getDseCode().equalsIgnoreCase("DSE5583")) 69 throw new DException("DSE5583", null); 70 71 if ( (ex.getDseCode().equalsIgnoreCase("DSE879") || ex.getDseCode().equalsIgnoreCase("DSE2004")) && 72 sec.getServerSession().getIsolationLevel() == Session.ReadCommitted) { 73 try { 74 synchronized (sec.getServerSession().getUserSession().getSession().getSessionDatabase()) { 75 sec.getServerSession().getUserSession().getSession().getSessionDatabase().wait(); 76 } 77 } catch (Exception e) { 78 } 79 } else { 80 throw new DmlStatementException("DSE1277", new Object [] {tableDetails.getQualifiedTableName()} 81 , ex); 82 } 83 } 84 } 85 } 86 87 public Object execute(Object [] obj) throws com.daffodilwoods.database.resource.DException { 88 checkForDroppedTable(); 89 if (obj == null) { 90 if (questionMarks != null) { 91 throw new DException("DSE1273", null); 92 } 93 return execute( (_VariableValues)null); 94 } 95 _VariableValues vv = new VariableValues(questionMarks, sec.getServerSession()); 96 if (obj.length != questionMarks.length) { 97 throw new DmlStatementException("DSE1277", new Object [] {tableDetails.getQualifiedTableName()} 98 , new DException("DSE1252", new Object [] {new Integer (obj.length), new Integer (questionMarks.length)})); 99 } 100 previousParameters = obj; 101 iterator.releaseResource(); 102 previousFieldBase = FieldUtility.getFields(obj); 103 vv.setConditionVariableValue(questionMarks, previousFieldBase, 1); 104 105 return executeV(vv); 106 } 107 108 public Object executeForFresh(Object [] parm1) throws com.daffodilwoods.database.resource.DException { 109 return execute(parm1); 110 } 111 112 private Object performExecution(_VariableValues vv) throws DException { 113 int count = 0; 114 childUserSession.startSavePoint(); 115 sec.setUserRight(false); 116 _VariableValues vvInitialised = initialiseVariableValues(vv); 117 TriggerExecutionContext tec = new TriggerExecutionContext(); 118 sec.setUserSession(childUserSession); 119 sec.setTriggerExecutionContext(tec); 120 statementTriggerTable.fireBeforeDeleteStatementLevelTriggers(sec); 121 if (iterator.last()) { 122 Object deleteEvent = null; 123 try { 124 125 _Record record = null; 126 do { 127 record = iterator.getRecord(); 128 RecordVersion recordVersion = new RecordVersion(record); 129 sec.setRecordVersion(recordVersion); 130 deleteEvent = dataTriggerTable.delete(iterator, sec); 131 count++; 132 } while (iterator.previous()); 133 statementTriggerTable.fireAfterDeleteStatementLevelTriggers(sec); 134 } catch (DException e) { 135 childUserSession.rollbackSavePoint(sec); 136 throw e; 137 } 138 139 140 catch (Exception e) { 141 e.printStackTrace(); 142 childUserSession.rollbackSavePoint(sec); 143 throw new DException("DSE0", new Object [] {e.getMessage()}); 144 } 145 } 146 147 childUserSession.commitSavePoint(sec); 148 if (sec.getAutoCommit() && serverSession.getAutoCommit() && !childUserSession.getSession().hasAnyChild()) { 149 serverSession.commit(); 150 } 151 if (sec.getAutoGeneratedType()) { 152 DMLResult dmlResult = sec.getDMLResult(); 153 dmlResult.setrowsEffected(count); 154 return dmlResult; 155 } 156 157 return new Integer (count); 158 } 159 160 private void performInitialisations() throws DException { 161 QualifiedIdentifier tableName = tableDetails.getQualifiedIdentifier(); 162 dataTriggerTable = sec.getDataTriggerTable(tableName); 163 statementTriggerTable = sec.getStatementTriggerTable(tableName); 164 } 165 166 private _Reference[] getReferences(Object [][] refValue) { 167 if (refValue != null) { 168 int len = refValue.length; 169 _Reference[] refToReturn = new _Reference[len]; 170 for (int i = 0; i < len; i++) { 171 refToReturn[i] = (_Reference) refValue[i][0]; 172 } 173 return refToReturn; 174 } 175 return null; 176 } 177 178 private _VariableValues initialiseVariableValues(_VariableValues vv) throws DException { 179 _VariableValues vvToReturn = null; 180 _Reference[] ref = null; 181 182 if (vv != null) { 183 ref = getReferences(vv.getReferenceAndValuePair()); 184 if (ref != null) { 185 iterator.setConditionVariableValue(ref, (Object []) vv.getColumnValues(ref), 1); 186 } 187 } else { 188 iterator.setConditionVariableValue(null, null, 1); 189 } 190 if (questionMarks != null && ref == null) { 191 throw new DException("DSE1273", null); 192 } 193 _Reference[] mergedReferences = GeneralPurposeStaticClass.getJointReferences(ref, underlyingReferences); 194 vvToReturn = new VariableValues(mergedReferences, sec.getServerSession()); 195 if (vv != null && ref != null) { 196 vvToReturn.setConditionVariableValue(ref, (Object []) vv.getColumnValues(ref), 1); 197 } 198 vvToReturn.setIterator(iterator); 199 if (underlyingReferences != null) { 200 vvToReturn.setConditionVariableValue(underlyingReferences, getIteratorArray(), 1); 201 } 202 return vvToReturn; 203 } 204 205 private Object [] getIteratorArray() { 206 Object [] toReturn = new Object [underlyingReferences.length]; 207 for (int i = 0; i < toReturn.length; i++) { 208 toReturn[i] = iterator; 209 } 210 return toReturn; 211 } 212 213 public void checkForDroppedTable() throws DException { 214 for (int i = 0; i < dropTableInfo.length; i++) { 215 if (dropTableInfo[i].isTableDropped()) 216 throw new DException("DSE5584", null); 217 218 } 219 } 220 } 221 | Popular Tags |