1 package com.daffodilwoods.daffodildb.server.sql99.dml; 2 3 import java.util.*; 4 5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 6 import com.daffodilwoods.daffodildb.server.datasystem.utility.*; 7 import com.daffodilwoods.daffodildb.server.datasystem.utility._Record; 8 import com.daffodilwoods.daffodildb.server.serversystem.*; 9 import com.daffodilwoods.daffodildb.server.serversystem.datatriggersystem.*; 10 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.statementtriggersystem.*; 11 import com.daffodilwoods.daffodildb.server.sessionsystem.*; 12 import com.daffodilwoods.daffodildb.server.sql99.*; 13 import com.daffodilwoods.daffodildb.server.sql99.common.*; 14 import com.daffodilwoods.daffodildb.server.sql99.dml.declarecursor.*; 15 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 16 import com.daffodilwoods.daffodildb.server.sql99.dql.semanticchecker.*; 17 import com.daffodilwoods.daffodildb.server.sql99.expression.*; 18 import com.daffodilwoods.daffodildb.server.sql99.token.*; 19 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 20 import com.daffodilwoods.daffodildb.utils.*; 21 import com.daffodilwoods.database.general.*; 22 import com.daffodilwoods.database.resource.*; 23 24 public class updatestatementpositioned implements com.daffodilwoods.daffodildb.utils.parser.StatementExecuter, SQLdatachangestatement, _Executer { 25 26 public cursorname _cursorname0; 27 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439221; 28 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222; 29 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439223; 30 public setclauselist _setclauselist4; 31 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439225; 32 public targettable _targettable6; 33 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439227; 34 35 private ArrayList knownReferences; 36 Object referencesIteratorMapping; 37 _StatementExecutionContext sec = null; 38 _ServerSession serverSession = null; 39 QualifiedIdentifier tableName = null; 40 _StatementTriggerTable statementTriggerTable = null; 41 _DataTriggerTable dataTriggerTable = null; 42 _Cursor cursor = null; 43 _ColumnCharacteristics cc = null; 44 Object [][] setclauselistarray = null; 45 TableDetails tableDetails = null; 46 boolean checkingPerformed; 47 int[] columnsType, columns; 48 _Iterator iterator; 49 int[] size; 50 long time = 0; 51 52 public _Reference[] checkSemantic(_ServerSession serverSession) throws DException { 53 tableDetails = (TableDetails) _targettable6.run(serverSession); 54 SemanticChecker.initializeCatalogNameAndSchemaNameOfTable(tableDetails, serverSession); 55 _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableDetails.getQualifiedIdentifier()); 56 tableDetails.cc = cc; 57 tableDetails.setTableType(cc.getTableType()); 58 59 if (tableDetails.getTableType() == TypeConstants.VIEW) { 60 throw new DmlStatementException("DSE1276", new Object [] {tableDetails.getQualifiedTableName()} 61 , new DException("DSE1267", null)); 62 } 63 cursor = (_Cursor) serverSession.getCursor( (String ) _cursorname0.run(serverSession)); 64 if (!cursor.getUpdatabilityClause()) { 65 throw new DException("DSE1263", (Object [])null); 66 } 67 _Reference[] references1 = _setclauselist4.checkSemantic(serverSession); 68 checkColumnsValidity(_setclauselist4.getLeftColumnDetails(serverSession), tableDetails); 69 knownReferences = new ArrayList(4); 70 _Reference[] rightReferences = getRightSetClauseReferences(tableDetails, serverSession); 71 checkingPerformed = true; 72 return GeneralPurposeStaticClass.getJointReferences(rightReferences, references1); 73 } 74 75 public Object run(Object object) throws com.daffodilwoods.database.resource.DException { 76 sec = (_StatementExecutionContext) object; 77 _ServerSession serverSession = sec.getServerSession(); 78 tableDetails = _targettable6._tablename1.getTableDetails(); 79 tableName = tableDetails.getQualifiedIdentifier(); 80 cc = sec.getColumnCharacteristics(tableName); 81 statementTriggerTable = sec.getStatementTriggerTable(tableName); 82 referencesIteratorMapping = _setclauselist4.getReferenceIteratorMapping(tableDetails, serverSession); 83 dataTriggerTable = sec.getDataTriggerTable(tableName); 84 ArrayList allQueryTables = new ArrayList(); 85 ( (cursorspecification) cursor.getCursorSpecification())._queryexpression2.getTablesIncluded(allQueryTables); 86 if (!allQueryTables.contains(tableName)) { 87 throw new DException("DSE8047", new Object [] {tableName, cursor.getCursorName()}); 88 } 89 setclauselistarray = (Object [][]) _setclauselist4.run(serverSession); 90 columns = getIntColumns(); 91 columnsType = ColumnCharacteristicsUtilities.getColumnsType(columns, cc); 92 size = ColumnCharacteristicsUtilities.getColumnsSize(columns, cc); 93 time = System.currentTimeMillis(); 94 return this; 95 } 96 97 public Object execute(_VariableValues vvrecieved) throws DException { 98 iterator = cursor.getIterator(); 99 _VariableValues vv = initialiseVariableValues(vvrecieved); 100 vv.setIterator(iterator); 101 102 _UserSession childUserSession = sec.getUserSession(); 103 int count = 0; 104 boolean createChildSession = false; 105 if (childUserSession == null) { 106 childUserSession = sec.getServerSession().getUserSession(); 107 createChildSession = true; 108 } 109 TriggerExecutionContext tec = new TriggerExecutionContext(); 110 sec.setUserSession(childUserSession); 111 sec.setTriggerExecutionContext(tec); 112 113 _Record record = iterator.getRecord(); 114 Object updateEvent = null; 115 try { 116 statementTriggerTable.fireBeforeUpdateStatementLevelTriggers(sec, columns); 117 RecordVersion recordVersion = new RecordVersion(record); 118 119 120 sec.setRecordVersion(recordVersion); 121 122 Object [] valueSource = ColumnCharacteristicsUtilities.getObjectOfRespectiveType(getColumnsValues(vv), columnsType, size); 123 updateEvent = dataTriggerTable.update(iterator, columns, valueSource, sec); 124 125 } catch (DException e) { 126 if (createChildSession) { 127 childUserSession.rollback(sec); 128 } 129 throw e; 130 } 131 if (createChildSession) { 132 childUserSession.commit(sec); 133 } 134 return new Integer (1); 135 } 136 137 public int[] getIntColumns() throws DException { 138 int length = setclauselistarray.length; 139 int[] columns = new int[length]; 140 for (int i = 0; i < length; i++) { 141 try { 142 columns[i] = ( (_Reference) setclauselistarray[i][0]).getIndex(); 143 } catch (DException e) { 144 int tt = cc.getColumnIndex( ( (_Reference) setclauselistarray[i][0]).getColumn()); 145 ( (_Reference) setclauselistarray[i][0]).setIndex(tt); 146 columns[i] = tt; 147 } 148 } 149 return columns; 150 } 151 152 public Object [] getColumnsValues(_VariableValues vv) throws DException { 153 int length = setclauselistarray.length; 154 Object [] values = new Object [length]; 155 for (int i = 0; i < length; i++) { 156 values[i] = ( (valueexpression) setclauselistarray[i][1]).run(vv); 157 } 158 return values; 159 } 160 161 public Object [] getParameters(Object object) throws DException { 162 throw new DException("DSE565", null); 163 } 164 165 public String toString() { 166 StringBuffer clause = new StringBuffer (); 167 clause.append(" "); 168 clause.append(_SRESERVEDWORD12065439227.toString()); 169 clause.append(" "); 170 clause.append(_targettable6.toString()); 171 clause.append(" "); 172 clause.append(_SRESERVEDWORD12065439225.toString()); 173 clause.append(" "); 174 clause.append(_setclauselist4.toString()); 175 clause.append(" "); 176 clause.append(_SRESERVEDWORD12065439223.toString()); 177 clause.append(" "); 178 clause.append(_SRESERVEDWORD12065439222.toString()); 179 clause.append(" "); 180 clause.append(_SRESERVEDWORD12065439221.toString()); 181 clause.append(" "); 182 clause.append(_cursorname0.toString()); 183 return clause.toString().trim(); 184 } 185 186 private void checkColumnsValidity(ColumnDetails[] columns, TableDetails tableDetails) throws DException { 187 if (columns != null) { 188 int len = columns.length; 189 for (int i = 0; i < len; i++) { 190 if (!check(tableDetails, columns[i].getColumnName())) { 191 throw new DmlStatementException("DSE1277", new Object [] {tableDetails.getQualifiedTableName()} 192 , new DException("DSE1130", new Object [] {columns[i].getColumn(), tableDetails.getQualifiedTableName()})); 193 } 194 } 195 } 196 } 197 198 private boolean check(TableDetails tableDetails, String [] columnName) throws DException { 199 try { 200 String [] tableName = tableDetails.getTableName(); 201 for (int i = columnName.length - 2, j = tableName.length - 1, length = columnName.length; i >= 0 && j >= 0; i--, j--) { 202 if (!tableName[j].equalsIgnoreCase(columnName[i])) { 203 return false; 204 } 205 } 206 return tableDetails.cc.getColumnIndex(columnName[columnName.length - 1]) != -1; 207 } catch (Exception e) { 208 return false; 209 } 210 } 211 212 private _Reference[] getRightSetClauseReferences(TableDetails tableDetails, _ServerSession serverSession) throws DException { 213 ColumnDetails[] setRightColumnDetails = _setclauselist4.getColumnDetails(serverSession); 214 _Reference[] ref1 = checkColumnsValidityAsReference(setRightColumnDetails, tableDetails, serverSession); 215 return ref1; 216 } 217 218 private _Reference[] makeProvisionForKnownReferences(_Reference[] columns, TableDetails tableDetails) throws DException { 219 ArrayList toReturn = new ArrayList(5); 220 if (columns != null) { 221 int len = columns.length; 222 for (int i = 0; i < len; i++) { 223 if ( (columns[i].getReferenceType() != SimpleConstants.VARIABLECOLUMN) && check(tableDetails, ( (ColumnDetails) columns[i]).getColumnName())) { 224 knownReferences.add(columns[i]); 225 } else { 226 toReturn.add(columns[i]); 227 } 228 } 229 } 230 return toReturn.size() > 0 ? (_Reference[]) toReturn.toArray(new _Reference[0]) : null; 231 } 232 233 public _Reference[] checkColumnsValidityAsReference(ColumnDetails[] columns, TableDetails tableDetails, _ServerSession serverSession) throws DException { 234 ArrayList aList = new ArrayList(5); 235 if (columns != null) { 236 SetColumnProperties.setTableNamesAndDatatypesOfAllColumns(serverSession, columns, new TableDetails[] {tableDetails} 237 , aList, new ArrayList()); 238 return makeProvisionForKnownReferences( (_Reference[]) aList.toArray(new _Reference[0]), tableDetails); 239 } 240 return null; 241 } 242 243 private _Reference[] getReferences(Object [][] refValue) { 244 if (refValue != null) { 245 int len = refValue.length; 246 _Reference[] refToReturn = new _Reference[len]; 247 for (int i = 0; i < len; i++) { 248 refToReturn[i] = (_Reference) refValue[i][0]; 249 } 250 return refToReturn; 251 } 252 return null; 253 } 254 255 private _VariableValues initialiseVariableValues(_VariableValues vv) throws DException { 256 _VariableValues vvToReturn = null; 257 _Reference[] ref = null; 258 Object [][] refValues = null; 259 260 if (vv != null) { 261 refValues = vv.getReferenceAndValuePair(); 262 ref = getReferences(refValues); 263 if (ref != null) { 264 iterator.setConditionVariableValue(ref, (Object []) vv.getColumnValues(ref), 1); 265 } 266 } 267 _Reference[] knownRef = knownReferences != null ? (_Reference[]) knownReferences.toArray(new _Reference[0]) : null; 268 _Reference[] mergedReferences = GeneralPurposeStaticClass.getJointReferences(ref, knownRef); 269 if (referencesIteratorMapping != null) { 270 vvToReturn = new SubQueryVariableValues(mergedReferences, (Object [][]) referencesIteratorMapping, sec.getServerSession()); 271 } else { 272 vvToReturn = new VariableValues(mergedReferences, sec.getServerSession()); 273 } 274 if (vv != null && ref != null) { 275 vvToReturn.setConditionVariableValue(ref, getValues(refValues), 1); 276 } 277 vvToReturn.setIterator(iterator); 278 if (knownRef != null) { 279 vvToReturn.setConditionVariableValue(knownRef, getIteratorArray(), 1); 280 } 281 return vvToReturn; 282 } 283 284 private Object [] getIteratorArray() { 285 Object [] toReturn = new Object [knownReferences.size()]; 286 for (int i = 0; i < toReturn.length; i++) { 287 toReturn[i] = iterator; 288 } 289 return toReturn; 290 } 291 292 private Object [] getValues(Object [][] refValue) { 293 int len = refValue.length; 294 Object [] toReturn = new Object [len]; 295 for (int i = 0; i < len; i++) { 296 toReturn[i] = refValue[i][1]; 297 } 298 return toReturn; 299 } 300 301 public _Reference[] getReferences() throws com.daffodilwoods.database.resource.DException { 302 return null; 303 } 304 305 public _Reference[] syntaxChecking(_ServerSession object) throws DException { 306 return null; 307 } 308 309 public Object executeForFresh(Object [] parm1) throws com.daffodilwoods.database.resource.DException { 310 return execute(parm1); 311 } 312 313 public Object execute(Object [] parm1) throws com.daffodilwoods.database.resource.DException { 314 return execute( (_VariableValues)null); 315 } 316 317 public Object clone() throws CloneNotSupportedException { 318 return this; 319 } 320 321 public ParameterInfo[] getParameterInfo() throws DException { 322 return null; 323 } 324 325 } 326 | Popular Tags |