1 package com.daffodilwoods.daffodildb.server.sessionsystem; 2 3 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator._Iterator; 4 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 5 import com.daffodilwoods.database.resource.*; 6 import com.daffodilwoods.database.utility.P; 7 import com.daffodilwoods.daffodildb.client.*; 8 import com.daffodilwoods.database.general.*; 9 import com.daffodilwoods.daffodildb.server.serversystem._ServerSession; 10 11 14 public class CommitedSessionIterator extends SessionIterator { 15 SessionDatabase sessionDatabase; 16 _Iterator iteratorMemory; 17 long time ; 18 int queryTimeOut = 0; 19 boolean questionMarkNotFound; 20 _Reference[] references0; 21 Object [] values0 ; 22 QualifiedIdentifier tableName; 23 DeadLockDetector deadLockDetector; 24 Object sessionId; 25 _ServerSession serverSession; 26 boolean checkingForLocking; 27 28 public CommitedSessionIterator(_Iterator iteratorMemory0, _Iterator iteratorUser0,SessionDatabase sessionDatabase0, boolean questionMarkNotFound0,_ServerSession serverSession0,QualifiedIdentifier tableName0,boolean checkingForLocking0) throws DException{ 29 super(iteratorUser0 ); 30 sessionDatabase = sessionDatabase0; 31 iteratorMemory = iteratorMemory0; 32 time = System.currentTimeMillis(); 33 questionMarkNotFound = questionMarkNotFound0; 34 serverSession = serverSession0; 35 tableName = tableName0; 36 deadLockDetector = sessionDatabase.getDeadLockDetector(tableName) ; 37 sessionId = serverSession.getSessionId() ; 38 checkingForLocking = checkingForLocking0; 39 if(questionMarkNotFound){ 40 iteratorMemory.setConditionVariableValue( null, null, 1); 41 checkingForLockedRow( ); 42 } 43 } 44 45 public void setTableName(QualifiedIdentifier tableName0){ 46 tableName = tableName0; 47 } 48 49 public void setConditionVariableValue(_Reference[] references, Object [] values , int priority) throws DException{ 50 iteratorMemory.setConditionVariableValue( references, values, priority); 51 super.setConditionVariableValue(references, values, priority); 52 references0 = references; 53 values0 = values; 54 if(!questionMarkNotFound){ 55 checkingForLockedRow(); 56 } 57 } 58 59 60 private void checkingForLockedRow( ) throws DException { 61 if(!checkingForLocking){ 62 return ; 63 } 64 65 int number =0; 66 long time = System.currentTimeMillis(); 67 boolean isAddedIntoDeadLockMap = false; 68 try{ 69 while (true) { 70 if (!iteratorMemory.first()) { 71 return; 72 } 73 number++; 74 if (System.currentTimeMillis() - time >= queryTimeOut && 75 queryTimeOut != 0) { 76 throw new DException("DSE1178", 77 new Object [] {new Integer (queryTimeOut)}); 78 } 79 if(!isAddedIntoDeadLockMap){ 80 deadLockDetector.addIntoWaitingMap(sessionId, iteratorMemory); 81 isAddedIntoDeadLockMap = true; 82 } 83 84 synchronized (sessionDatabase) { 85 try { 86 long startTime = System.currentTimeMillis(); 87 sessionDatabase.wait(5000); 88 if ( (System.currentTimeMillis() - startTime) >= 5000) { 89 deadLockDetector.checkDeadLock(serverSession,sessionId); 90 } 91 92 } 93 catch (InterruptedException i) { 94 i.printStackTrace(); 95 } 96 } 97 } 98 }finally{ 99 deadLockDetector.removeFromWaitingMap(sessionId ); 100 } 101 102 } 103 104 public String toString2(){ 105 return "CommittedIterator [ "+ super.toString()+" ] "+( references0 == null ? "nullss" : P.print(references0))+" "+(values0 == null ? "nullss" : P.print(values0)); 106 } 107 115 116 117 public _ExecutionPlan getExecutionPlan() throws DException{ 118 _ExecutionPlan cplan = null; 119 try{ 120 cplan = ((_Iterator)iterator).getExecutionPlan(); 121 }catch(ClassCastException cce){ 122 } 123 _ExecutionPlan cplan1 = iteratorMemory.getExecutionPlan(); 124 _ExecutionPlan cplans[] = new _ExecutionPlan[]{cplan,cplan1}; 125 return new ExecutionPlan("CommitedSessionIterator",cplans,null,null,null); 126 } 127 128 } 129 | Popular Tags |