| 1 package com.daffodilwoods.daffodildb.server.serversystem; 2 3 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 4 import com.daffodilwoods.daffodildb.server.datasystem.utility.*; 5 import com.daffodilwoods.daffodildb.server.datasystem.utility._Record; 6 import com.daffodilwoods.daffodildb.server.serversystem.datatriggersystem.*; 7 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.statementtriggersystem.*; 8 import com.daffodilwoods.daffodildb.server.sessionsystem.*; 9 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 10 import com.daffodilwoods.daffodildb.utils.*; 11 import com.daffodilwoods.daffodildb.utils.field.*; 12 import com.daffodilwoods.database.general.*; 13 import com.daffodilwoods.database.resource.*; 14 import com.daffodilwoods.database.utility.*; 15 16 public class ServerTable implements _ServerTable { 17 18 private _ServerSession serverSession; 19 private _DataTriggerTable dataTriggerTable; 20 private _StatementTriggerTable statementTriggerTable; 21 private QualifiedIdentifier tableName; 22 23 public ServerTable(QualifiedIdentifier tableName0, ServerSession serverSession, _DataTriggerTable dataTriggerTable, _StatementTriggerTable statementTriggerTable) throws DException { 24 tableName = tableName0; 25 this.serverSession = serverSession; 26 this.dataTriggerTable = dataTriggerTable; 27 this.statementTriggerTable = statementTriggerTable; 28 } 29 30 public _Record insert(Object [] values) throws DException { 31 return insert(null, values); 32 } 33 34 35 36 40 public _Record insert(int[] columnIndexes, Object [] values) throws DException { 41 boolean checkConstraints = values != null; 42 _UserSession userSession = serverSession.getUserSession(); 43 userSession.startSavePoint(); 44 TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext(); 45 46 _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext(); 47 statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext); 48 statementExecutionContext.setUserSession(userSession); 49 Object recordVersion = null; 50 try { 51 _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName); 52 if (columnIndexes == null) { 53 if (cc.getColumnCount() < 5) 54 ; 56 columnIndexes = SystemFieldsCharacteristics.getUserColumnIndexes(cc.getColumnCount()); 57 if (values == null) 58 values = new Object [columnIndexes.length]; 59 } 60 int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc); 61 FieldBase[] cValues = FieldUtility.getFields(values); 62 cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator()); 63 64 recordVersion = dataTriggerTable.insert(columnIndexes, cValues, statementExecutionContext, checkConstraints); 65 } catch (DException e) { 66 userSession.rollbackSavePoint(statementExecutionContext); 67 throw e; 68 } 69 catch (Exception e) { 70 userSession.rollbackSavePoint(statementExecutionContext); 71 throw new DException("DSE0", new Object [] {e.getMessage()}); 72 } 73 userSession.commitSavePoint(statementExecutionContext); 74 _Record record = ( (RecordVersion) recordVersion).getCurrentRecord(); 75 record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId()); 76 return record; 77 } 78 79 public _Record insertForAlreadyInsertedRecord(_Iterator iterator, int[] columnIndexes, Object [] values, boolean fireTriggers) throws DException { 80 _UserSession childUserSession = serverSession.getUserSession(); 81 TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext(); 82 83 _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext(); 84 statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext); 85 statementExecutionContext.setUserSession(childUserSession); 86 Object recordVersion = null; 87 try { 88 _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName); 89 90 int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc); 91 FieldBase[] cValues = FieldUtility.getFields(values); 92 cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator()); 93 94 recordVersion = dataTriggerTable.insertForAlreadyInsertedRecord(iterator, columnIndexes, cValues, statementExecutionContext, fireTriggers); 95 } catch (DException e) { 96 throw e; 97 } 98 _Record record = ( (RecordVersion) recordVersion).getCurrentRecord(); 99 record.update(SystemFields.systemFields[SystemFields.sessionId], childUserSession.getSession().getSessionId()); 100 return record; 101 } 102 103 public _Record insertVersion(int[] columnIndexes, Object [] values, java.sql.Date date) throws DException { 104 105 boolean checkConstraints = values != null; 106 _UserSession userSession = serverSession.getUserSession(); 107 userSession.startSavePoint(); 108 TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext(); 109 110 _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext(); 111 statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext); 112 statementExecutionContext.setUserSession(userSession); 113 Object recordVersion = null; 114 try { 115 _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName); 116 if (columnIndexes == null) { 117 columnIndexes = SystemFieldsCharacteristics.getUserColumnIndexesForDatedTable(cc.getColumnCount()); 118 if (values == null) 119 values = new Object [columnIndexes.length]; 120 } 121 int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc); 122 FieldBase[] cValues = FieldUtility.getFields(values); 123 cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator()); 124 125 recordVersion = dataTriggerTable.insertVersion(columnIndexes, cValues, statementExecutionContext, checkConstraints, date); 126 } catch (DException e) { 127 userSession.rollbackSavePoint(statementExecutionContext); 128 throw e; 129 } 130 catch (Exception e) { 131 userSession.rollbackSavePoint(statementExecutionContext); 132 throw new DException("DSE0", new Object [] {e.getMessage()}); 133 } 134 userSession.commitSavePoint(statementExecutionContext); 135 _Record record = ( (RecordVersion) recordVersion).getCurrentRecord(); 136 record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId()); 137 return record; 138 } 139 140 public _Record insertVersionWithoutConstraints(java.sql.Date date) throws DException { 141 _UserSession userSession = serverSession.getUserSession(); 142 userSession.startSavePoint(); 143 TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext(); 144 _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext(); 145 statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext); 146 statementExecutionContext.setUserSession(userSession); 147 Object recordVersion = null; 148 try { 149 _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName); 150 int[] columnIndexes = SystemFieldsCharacteristics.getUserColumnIndexes(cc.getColumnCount()); 151 Object [] values = new Object [columnIndexes.length]; 152 int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc); 153 FieldBase[] cValues = FieldUtility.getFields(values); 154 cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator()); 155 156 recordVersion = dataTriggerTable.insertVersion(columnIndexes, cValues, statementExecutionContext, false, date); 157 } catch (DException e) { 158 userSession.rollbackSavePoint(statementExecutionContext); 159 throw e; 160 } 161 catch (Exception e) { 162 userSession.rollbackSavePoint(statementExecutionContext); 163 throw new DException("DSE0", new Object [] {e.getMessage()}); 164 } 165 userSession.commitSavePoint(statementExecutionContext); 166 _Record record = ( (RecordVersion) recordVersion).getCurrentRecord(); 167 record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId()); 168 return record; 169 } 170 171 public _Record insert() throws DException { 172 _UserSession userSession = serverSession.getUserSession(); 173 userSession.startSavePoint(); 174 TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext(); 175 _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext(); 176 statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext); 177 statementExecutionContext.setUserSession(userSession); 178 Object recordVersion = null; 179 try { 180 181 182 183 184 recordVersion = dataTriggerTable.insert(null, null, statementExecutionContext, false); 185 } catch (DException e) { 186 userSession.rollbackSavePoint(statementExecutionContext); 187 throw e; 188 } 189 catch (Exception e) { 190 userSession.rollbackSavePoint(statementExecutionContext); 191 throw new DException("DSE0", new Object [] {e.getMessage()}); 192 } 193 userSession.commitSavePoint(statementExecutionContext); 194 _Record record = ( (RecordVersion) recordVersion).getCurrentRecord(); 195 record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId()); 196 return record; 197 } 198 199 public _Record update(_Iterator iterator, int[] columnIndexes, 200 Object [] values) throws DException { 201 long t = System.currentTimeMillis(); 202 boolean flagToAvoidDeadLocking = false; 203 while (true) { 204 try { 205 return updateLock(iterator, columnIndexes,values); 206 } 207 catch (DException ex) { 208 if (ex.getDseCode().equalsIgnoreCase("DSE5582")) { 209 throw new DException("DSE5582", null); 210 } 211 if (ex.getDseCode().equalsIgnoreCase("DSE5583")) 212 throw new DException("DSE5583", null); 213 if ( (ex.getDseCode().equalsIgnoreCase("DSE879") || 214 ex.getDseCode().equalsIgnoreCase("DSE2004")) && 215 serverSession.getIsolationLevel() != Session.ReadSessionSerializable ) { 216 synchronized (serverSession.getUserSession().getSession().getSessionDatabase()) { 217 if(serverSession.getIsolationLevel() == Session.ReadTransactionSerializable ){ 218 ; if (flagToAvoidDeadLocking){ 220 ; throw new DException("DSE2058", null); 222 } 223 flagToAvoidDeadLocking = true; 224 } 225 try{ 226 serverSession.getUserSession().getSession().getSessionDatabase(). 227 wait(); 228 }catch(Exception e){ 229 230 231 } 232 } 233 234 } 235 else { 236 throw ex; 237 } 238 } 239 } 240 } 241 242 public _Record updateLock(_Iterator iterator, int[] columnIndexes, Object [] values) throws DException { 243 _UserSession userSession = serverSession.getUserSession(); 244 userSession.startSavePoint(); 245 TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext(); 246 247 _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext(); 248 statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext); 249 statementExecutionContext.setUserSession(userSession); 250 Object recordVersion = null; 251 try { 252 _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName); 253 int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc); 254 FieldBase[] cValues = FieldUtility.getFields(values); 255 cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator()); 256 257 recordVersion = dataTriggerTable.update(iterator, columnIndexes, cValues, statementExecutionContext); 258 } catch (DException e) { 259 userSession.rollbackSavePoint(statementExecutionContext); 260 throw e; 261 } 262 catch (Exception e) { 263 userSession.rollbackSavePoint(statementExecutionContext); 264 e.printStackTrace() ; 265 throw new DException("DSE0", new Object [] {e.getMessage()}); 266 } 267 userSession.commitSavePoint(statementExecutionContext); 268 _Record record = ( (RecordVersion) recordVersion).getCurrentRecord(); 269 record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId()); 270 return record; 271 } 272 273 274 public _Record updateVersion(_Iterator iterator, int[] columnIndexes, Object [] values, java.sql.Date date) throws DException { 275 _UserSession userSession = serverSession.getUserSession(); 276 userSession.startSavePoint(); 277 TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext(); 278 279 _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext(); 280 statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext); 281 statementExecutionContext.setUserSession(userSession); 282 Object recordVersion = null; 283 try { 284 285 _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName); 286 int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc); 287 FieldBase[] cValues = FieldUtility.getFields(values); 288 cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator()); 289 290 recordVersion = dataTriggerTable.updateVersion(iterator, columnIndexes, cValues, statementExecutionContext, date); 291 } catch (DException e) { 292 userSession.rollbackSavePoint(statementExecutionContext); 293 throw e; 294 } 295 catch (Exception e) { 296 userSession.rollbackSavePoint(statementExecutionContext); 297 throw new DException("DSE0", new Object [] {e.getMessage()}); 298 } 299 userSession.commitSavePoint(statementExecutionContext); 300 _Record record = ( (RecordVersion) recordVersion).getCurrentRecord(); 301 record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId()); 302 return record; 303 } 304 305 public _Record update(_Iterator iterator, int[] columnIndexes, Object [] values, _StatementExecutionContext statementExecutionContext) throws DException { 306 _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName); 307 int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc); 308 FieldBase[] cValues = FieldUtility.getFields(values); 309 cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator()); 310 311 Object recordVersion = dataTriggerTable.update(iterator, columnIndexes, cValues, statementExecutionContext); 312 return ( (RecordVersion) recordVersion).getCurrentRecord(); 313 } 314 315 public _Record delete(_Iterator iterator) throws DException { 316 long t = System.currentTimeMillis(); 317 while (true) { 318 try { 319 return deleteLock(iterator); 320 } catch (DException ex) { 321 if (ex.getDseCode().equalsIgnoreCase("DSE5582")) 322 throw new DException("DSE5582", null); 323 if (ex.getDseCode().equalsIgnoreCase("DSE5583")) 324 throw new DException("DSE5583", null); 325 326 if ( (ex.getDseCode().equalsIgnoreCase("DSE879") || ex.getDseCode().equalsIgnoreCase("DSE2004")) && 327 serverSession.getIsolationLevel() != Session.ReadSessionSerializable ) { 328 try { 329 synchronized (serverSession.getUserSession().getSession().getSessionDatabase()) { 330 serverSession.getUserSession().getSession().getSessionDatabase().wait(); 331 } 332 } catch (Exception e) { 333 } 334 } else { 335 throw ex; 336 } 337 } 338 } 339 } 340 public _Record deleteLock(_Iterator iterator) throws DException { 341 _UserSession userSession = serverSession.getUserSession(); 342 userSession.startSavePoint(); 343 TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext(); 344 345 _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext(); 346 statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext); 347 statementExecutionContext.setUserSession(userSession); 348 statementExecutionContext.setConstraintTypeDeferred(serverSession.isConstraintCheckingDeffered()); 349 Object recordVersion = null; 350 try { 351 recordVersion = dataTriggerTable.delete(iterator, statementExecutionContext); 352 } catch (DException e) { 353 userSession.rollbackSavePoint(statementExecutionContext); 354 throw e; 355 } 356 catch (Exception e) { 357 userSession.rollbackSavePoint(statementExecutionContext); 358 throw new DException("DSE0", new Object [] {e.getMessage()}); 359 } 360 userSession.commitSavePoint(statementExecutionContext); 361 _Record record = ( (RecordVersion) recordVersion).getCurrentRecord(); 362 record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId()); 363 return record; 364 } 365 366 367 public _Record deleteVersion(_Iterator iterator, java.sql.Date date) throws DException { 368 _UserSession userSession = serverSession.getUserSession(); 369 userSession.startSavePoint(); 370 TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext(); 371 372 _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext(); 373 statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext); 374 statementExecutionContext.setUserSession(userSession); 375 Object recordVersion = null; 376 try { 377 recordVersion = dataTriggerTable.deleteVersion(iterator, date, statementExecutionContext); 378 } catch (DException e) { 379 userSession.rollbackSavePoint(statementExecutionContext); 380 throw e; 381 } 382 catch (Exception e) { 383 userSession.rollbackSavePoint(statementExecutionContext); 384 throw new DException("DSE0", new Object [] {e.getMessage()}); 385 } 386 userSession.commitSavePoint(statementExecutionContext); 387 _Record record = ( (RecordVersion) recordVersion).getCurrentRecord(); 388 record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId()); 389 return record; 390 } 391 392 public _Record delete(_Iterator iterator, _StatementExecutionContext statementExecutionContext) throws DException { 393 Object recordVersion = dataTriggerTable.delete(iterator, statementExecutionContext); 394 return ( (RecordVersion) recordVersion).getCurrentRecord(); 395 } 396 397 public void setSeverSession(_ServerSession serverSession0) throws DException { 398 this.serverSession = (ServerSession) serverSession0; 399 } 400 } 401 | Popular Tags |