1 package com.daffodilwoods.daffodildb.server.serversystem.triggerInfo; 2 3 import java.util.BitSet ; 4 import com.daffodilwoods.daffodildb.server.datadictionarysystem._TriggerCharacteristics; 5 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.TriggerDescriptor; 6 import com.daffodilwoods.database.resource.DException; 7 import com.daffodilwoods.daffodildb.server.serversystem.StatementExecutionContext; 8 import com.daffodilwoods.database.general.QualifiedIdentifier; 9 import com.daffodilwoods.daffodildb.server.serversystem._StatementExecutionContext; 10 import java.util.ArrayList ; 11 import java.util.Arrays ; 12 13 public class TriggerExecuterInfo { 14 15 private BitSet bitset; 16 17 private _Triggers[] beforeInsertTrigger = null; 18 19 private _Triggers[] afterInsertTrigger = null; 20 21 private _Triggers[] beforeUpdateTrigger = null; 22 23 private _Triggers[] afterUpdateTrigger = null; 24 25 private _Triggers[] beforeDeleteTrigger = null; 26 27 private _Triggers[] afterDeleteTrigger = null; 28 29 public TriggerExecuterInfo() { 30 bitset = new BitSet (6); 31 32 } 33 34 public _Triggers[] getBeforeInsertTrigger(_TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext,QualifiedIdentifier tableName) throws DException{ 35 if(bitset.get(0) ) 36 return beforeInsertTrigger; 37 TriggerDescriptor[] triggerDescriptor = (TriggerDescriptor[])triggerCharacteristics.getBeforeInsertTriggers() ; 38 if(triggerDescriptor == null){ 39 bitset.set(0) ; 40 return null;} 41 beforeInsertTrigger = new Trigger[triggerDescriptor.length]; 42 for (int i = 0; i < triggerDescriptor.length; i++) { 43 beforeInsertTrigger[i] = new Trigger( triggerDescriptor[i], statementExecutionContext ,tableName ); 44 } 45 bitset.set(0) ; 46 return beforeInsertTrigger; 47 } 48 49 public _Triggers[] getAfterInsertTrigger(_TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext,QualifiedIdentifier tableName) throws DException{ 50 if(bitset.get(1) ){ 51 return afterInsertTrigger; 52 } 53 TriggerDescriptor[] triggerDescriptor = (TriggerDescriptor[])triggerCharacteristics.getAfterInsertTriggers() ; 54 if(triggerDescriptor == null){ 55 bitset.set(1) ; 56 return null; 57 } 58 afterInsertTrigger = new Trigger[triggerDescriptor.length]; 59 for (int i = 0; i < triggerDescriptor.length; i++) { 60 afterInsertTrigger[i] = new Trigger( triggerDescriptor[i], statementExecutionContext ,tableName ); 61 } 62 bitset.set(1) ; 63 return afterInsertTrigger; 64 } 65 66 public _Triggers[] getBeforeUpdateTrigger(_TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext,QualifiedIdentifier tableName,int[] cols) throws DException{ 67 68 if(!bitset.get(2) ){ 69 TriggerDescriptor[] triggerDescriptor = (TriggerDescriptor[]) triggerCharacteristics.getBeforeUpdateTriggers(null); 70 71 if (triggerDescriptor == null){ 72 bitset.set(2); 73 return null;} 74 beforeUpdateTrigger = new Trigger[triggerDescriptor.length]; 75 for (int i = 0; i < triggerDescriptor.length; i++) { 76 beforeUpdateTrigger[i] = new Trigger(triggerDescriptor[i], 77 statementExecutionContext, 78 tableName); 79 } 80 } 81 if (beforeUpdateTrigger == null){ 82 bitset.set(2); 83 return null; 84 } 85 ArrayList tempTriggerList =new ArrayList (Arrays.asList( beforeUpdateTrigger)) ; 86 ArrayList triggersToReturn = new ArrayList (); 87 for (int i = 0; i < cols.length; i++) { 88 for (int j = tempTriggerList.size()-1; j >= 0 ; j--) { 89 if(((Trigger)tempTriggerList.get(j)).isColumnIndeded(cols[i]) ){ 90 triggersToReturn.add( tempTriggerList.get(j)); 91 tempTriggerList.remove(j) ; 92 } 93 } 94 } 95 bitset.set(2); 96 return triggersToReturn.size() == 0 ? null : (_Triggers[])triggersToReturn.toArray(new _Triggers[0]) ; 97 } 98 99 100 public _Triggers[] getAfterUpdateTrigger(_TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext,QualifiedIdentifier tableName,int[] cols) throws DException{ 101 if(!bitset.get(3) ){ 102 TriggerDescriptor[] triggerDescriptor = (TriggerDescriptor[]) triggerCharacteristics.getAfterUpdateTriggers(null) ; 103 if (triggerDescriptor == null){ 104 bitset.set(3); 105 return null; 106 } 107 afterUpdateTrigger = new Trigger[triggerDescriptor.length]; 108 for (int i = 0; i < triggerDescriptor.length; i++) { 109 afterUpdateTrigger[i] = new Trigger(triggerDescriptor[i], 110 statementExecutionContext, 111 tableName); 112 } 113 } 114 if (afterUpdateTrigger == null){ 115 bitset.set(3); 116 return null; 117 } 118 119 120 ArrayList tempTriggerList = new ArrayList (Arrays.asList(afterUpdateTrigger)) ; 121 ArrayList triggersToReturn = new ArrayList (); 122 for (int i = 0; i < cols.length; i++) { 123 for (int j = tempTriggerList.size()-1; j >= 0 ; j--) { 124 if(((Trigger)tempTriggerList.get(j)).isColumnIndeded(cols[i]) ){ 125 triggersToReturn.add( tempTriggerList.get(j)); 126 tempTriggerList.remove(j) ; 127 } 128 } 129 } 130 bitset.set(3); 131 return triggersToReturn.size() == 0 ? null : (_Triggers[])triggersToReturn.toArray(new _Triggers[0]) ; 132 133 } 134 135 public _Triggers[] getBeforeDeleteTrigger(_TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext,QualifiedIdentifier tableName) throws DException{ 136 if(bitset.get(4) ) 137 return beforeDeleteTrigger; 138 TriggerDescriptor[] triggerDescriptor = (TriggerDescriptor[])triggerCharacteristics.getBeforeDeleteTriggers() ; 139 140 if(triggerDescriptor == null){ 141 bitset.set(4) ; 142 return null; 143 } 144 beforeDeleteTrigger = new Trigger[triggerDescriptor.length]; 145 for (int i = 0; i < triggerDescriptor.length; i++) { 146 beforeDeleteTrigger[i] = new Trigger( triggerDescriptor[i], statementExecutionContext ,tableName ); 147 } 148 149 bitset.set(4) ; 150 return beforeDeleteTrigger ; 151 } 152 153 public _Triggers[] getAfterDeleteTrigger(_TriggerCharacteristics triggerCharacteristics, 154 _StatementExecutionContext statementExecutionContext, 155 QualifiedIdentifier tableName) throws DException { 156 if (bitset.get(5)) 157 return afterDeleteTrigger; 158 TriggerDescriptor[] triggerDescriptor = (TriggerDescriptor[]) 159 triggerCharacteristics.getAfterDeleteTriggers(); 160 161 if (triggerDescriptor == null){ 162 bitset.set(5); 163 return null; 164 } 165 afterDeleteTrigger = new Trigger[triggerDescriptor.length]; 166 for (int i = 0; i < triggerDescriptor.length; i++) { 167 afterDeleteTrigger[i] = new Trigger(triggerDescriptor[i],statementExecutionContext, tableName); 168 } 169 170 bitset.set(5); 171 return afterDeleteTrigger; 172 } 173 174 175 176 } 177 | Popular Tags |