1 package com.daffodilwoods.daffodildb.server.serversystem.datatriggersystem; 2 3 import java.sql.*; 4 5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 6 import com.daffodilwoods.daffodildb.server.datasystem.utility.*; 7 import com.daffodilwoods.daffodildb.server.serversystem.*; 8 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.constraintsystem.*; 9 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.triggersystem.*; 10 import com.daffodilwoods.daffodildb.server.sessionsystem.*; 11 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 12 import com.daffodilwoods.database.general.*; 13 import com.daffodilwoods.database.resource.*; 14 15 public class DataTriggerTable implements _DataTriggerTable { 16 private _TriggerTable triggerTable; 17 private _ConstraintTable constraintTableImm; 18 private _ConstraintTable constraintTableDeff; 19 private _DefaultValueGetter defaultValueGetter; 20 private QualifiedIdentifier tableName; 21 22 public DataTriggerTable(_TriggerTable triggerTable, _ConstraintTable constraintTableImme,_ConstraintTable constraintTableDeffe,_DefaultValueGetter defaultValueGetter, QualifiedIdentifier tableName ) throws DException { 23 this.triggerTable = triggerTable; 24 constraintTableDeff = constraintTableDeffe; 25 constraintTableImm = constraintTableImme; 26 this.defaultValueGetter = defaultValueGetter; 27 this.tableName = tableName; 28 } 29 30 public Object insert(int[] columns , Object [] values, _StatementExecutionContext sec ) throws DException { 31 return insert(columns,values,sec, sec.getUserSession().getSession().getImmediateConstriantsForChecking()); 32 } 33 34 public Object insertForAlreadyInsertedRecord( _Iterator iter , int[] columns , Object [] values, _StatementExecutionContext statementExecutionContext , boolean fireTriggers ) throws DException { 35 _UserSession userSession = statementExecutionContext.getUserSession(); 36 _UserSessionTable userSessionTable = userSession.getUserSessionTable(tableName); 37 defaultValueGetter.updateDefaultValues(columns,values,statementExecutionContext.getServerSession()); 38 RecordVersion recordVersion=null; 39 _PrivilegeTable privilegeTable = ((UserSessionTable)userSessionTable).getPrivilegeTable(); 40 boolean insertRight = privilegeTable.hasTablePrivileges(_PrivilegeTable.INSERT); 41 if (columns == null && !insertRight) 42 throw new PrivilegeException("DSE340", new Object [] {"INSERT", tableName}); 43 insertRight = privilegeTable.hasColumnPrivileges(_PrivilegeTable.INSERT, columns); 44 if (!insertRight ) 45 throw new PrivilegeException("DSE340", new Object [] {"INSERT", tableName}); 46 47 recordVersion = userSessionTable.updateWithoutRights(iter, columns, values); 48 statementExecutionContext.setRecordVersion( recordVersion ); 49 if( fireTriggers ){ 50 triggerTable.FireBeforeInsertRowLevelTriggers( statementExecutionContext ); 51 _ServerSession globalSession = userSession.getSession().getSessionDatabase().getGlobalSession(); 52 statementExecutionContext.setOperationTypePerformSameOperation(true); 53 constraintTableImm.checkInsertConstraints( globalSession,statementExecutionContext , columns ); 54 statementExecutionContext.setOperationTypePerformSameOperation(false); 55 constraintTableDeff.checkInsertConstraints( globalSession,statementExecutionContext , columns ); 56 triggerTable.FireAfterInsertRowLevelTriggers(statementExecutionContext); 57 } 58 return recordVersion; 59 } 60 61 public Object insertWithTriggersOnly(int[] columns, Object [] values, _StatementExecutionContext statementExecutionContext) throws DException { 62 _UserSession userSession = statementExecutionContext.getUserSession(); 63 _UserSessionTable userSessionTable = userSession.getUserSessionTable(tableName); 64 Object [] newValues = defaultValueGetter.addDefaultValues( columns, values ,statementExecutionContext.getServerSession() ); 65 int[] columnsToInsert = (int[]) newValues[0]; 66 Object [] valuesToInsert = (Object []) newValues[1]; 67 RecordVersion recordVersion = null; 68 if (statementExecutionContext.getUserRight()) 69 recordVersion = userSessionTable.insert(columnsToInsert, valuesToInsert); 70 else 71 recordVersion = userSessionTable.insertWithoutRights(columnsToInsert, valuesToInsert); 72 statementExecutionContext.setRecordVersion(recordVersion); 73 statementExecutionContext.updateDMLResult(tableName, columns,recordVersion); 74 triggerTable.FireBeforeInsertRowLevelTriggers(statementExecutionContext); 75 if (userSession.getSession().getImmediateConstriantsForChecking()) { 76 _ServerSession globalSession = userSession.getSession().getSessionDatabase().getGlobalSession(); 77 statementExecutionContext.setOperationTypePerformSameOperation(true); 78 constraintTableImm.checkInsertConstraints(globalSession, statementExecutionContext, columnsToInsert); 79 statementExecutionContext.setOperationTypePerformSameOperation(false); 80 constraintTableDeff.checkInsertConstraints(globalSession, statementExecutionContext, columnsToInsert); 81 } 82 triggerTable.FireAfterInsertRowLevelTriggers(statementExecutionContext); 83 return recordVersion; 84 } 85 86 public Object insert(int[] columns, Object [] values, _StatementExecutionContext statementExecutionContext, boolean checkConstraints) throws DException { 87 _UserSession userSession = statementExecutionContext.getUserSession(); 88 _UserSessionTable userSessionTable = userSession.getUserSessionTable(tableName); 89 Object [] newValues = defaultValueGetter.addDefaultValues( columns, values ,statementExecutionContext.getServerSession() ); 90 int[] columnsToInsert = (int[]) newValues[0]; 91 Object [] valuesToInsert = (Object []) newValues[1]; 92 if(columnsToInsert == null){ 93 columnsToInsert = SystemFieldsCharacteristics.IS ; valuesToInsert = new Object []{SystemFields.maxIntegerValue}; 95 } 96 RecordVersion recordVersion = null; 97 if (statementExecutionContext.getUserRight()) 98 recordVersion = userSessionTable.insert(columnsToInsert, valuesToInsert); 99 else 100 recordVersion = userSessionTable.insertWithoutRights(columnsToInsert, valuesToInsert); 101 statementExecutionContext.setRecordVersion( recordVersion ); 102 statementExecutionContext.updateDMLResult(tableName, columns, recordVersion); 103 if(checkConstraints ){ 104 triggerTable.FireBeforeInsertRowLevelTriggers( statementExecutionContext ); 105 _ServerSession globalSession = userSession.getSession().getSessionDatabase().getGlobalSession(); 106 statementExecutionContext.setOperationTypePerformSameOperation(true); 107 constraintTableImm.checkInsertConstraints( globalSession,statementExecutionContext , columnsToInsert ); 108 statementExecutionContext.setOperationTypePerformSameOperation(false); 109 constraintTableDeff.checkInsertConstraints( globalSession,statementExecutionContext , columnsToInsert ); 110 triggerTable.FireAfterInsertRowLevelTriggers( statementExecutionContext ); 111 } 112 return recordVersion ; 113 } 114 115 public Object insertVersion(int[] columns, Object [] values, _StatementExecutionContext statementExecutionContext, boolean checkConstraints, Date date) throws DException { 116 _UserSession userSession = statementExecutionContext.getUserSession(); 117 118 _UserSessionTable userSessionTable = userSession.getUserSessionTable(tableName); 119 Object [] newValues = defaultValueGetter.addDefaultValues(columns, values, statementExecutionContext.getServerSession()); 120 int[] columnsToInsert = (int[]) newValues[0]; 121 Object [] valuesToInsert = (Object []) newValues[1]; 122 RecordVersion recordVersion = userSessionTable.insertVersion(columnsToInsert, valuesToInsert, date); 123 124 statementExecutionContext.setRecordVersion(recordVersion); 125 triggerTable.FireBeforeInsertRowLevelTriggers(statementExecutionContext); 126 if (checkConstraints) { 127 _ServerSession globalSession = userSession.getSession().getSessionDatabase().getGlobalSession(); 128 statementExecutionContext.setOperationTypePerformSameOperation(true); 129 constraintTableImm.checkInsertConstraints(globalSession, statementExecutionContext, columnsToInsert); 130 statementExecutionContext.setConstraintTypeDeferred(false); 131 constraintTableDeff.checkInsertConstraints(globalSession, statementExecutionContext, columnsToInsert); 132 } 133 triggerTable.FireAfterInsertRowLevelTriggers(statementExecutionContext); 134 return recordVersion; 135 } 136 137 public Object update( _Iterator iterator, int[] columns, Object [] values, _StatementExecutionContext statementExecutionContext ) throws DException { 138 _UserSession userSession = statementExecutionContext.getUserSession(); 139 defaultValueGetter.updateDefaultValues(columns,values,statementExecutionContext.getServerSession()); 140 _UserSessionTable userSessionTable = userSession.getUserSessionTable( tableName ); 141 RecordVersion recordVersion = null; 142 if (statementExecutionContext.getUserRight()) 143 recordVersion = userSessionTable.update(iterator, columns, values); 144 else 145 recordVersion = userSessionTable.updateWithoutRights(iterator, columns, values); 146 statementExecutionContext.setRecordVersion(recordVersion); 147 triggerTable.FireBeforeUpdateRowLevelTriggers( columns ,statementExecutionContext ); 148 _ServerSession globalSession = userSession.getSession().getSessionDatabase().getGlobalSession(); 149 if (statementExecutionContext.getUserSession().getSession().getImmediateConstriantsForChecking()) { 150 statementExecutionContext.setOperationTypePerformSameOperation(true); 151 constraintTableImm.checkUpdateConstraints(globalSession, statementExecutionContext, columns); 152 statementExecutionContext.setOperationTypePerformSameOperation(false); 153 constraintTableDeff.checkUpdateConstraints(globalSession, statementExecutionContext, columns); 154 } 155 triggerTable.FireAfterUpdateRowLevelTriggers(columns, statementExecutionContext); 156 return recordVersion; 157 } 158 159 public Object updateVersion(_Iterator iterator, int[] columns, Object [] values, _StatementExecutionContext statementExecutionContext, Date date) throws DException { 160 _UserSession userSession = statementExecutionContext.getUserSession(); 161 defaultValueGetter.updateDefaultValues(columns, values, statementExecutionContext.getServerSession()); 162 _UserSessionTable userSessionTable = userSession.getUserSessionTable(tableName); 163 RecordVersion recordVersion = userSessionTable.updateVersion(iterator, columns, values, date); 164 statementExecutionContext.setRecordVersion(recordVersion); 165 triggerTable.FireBeforeUpdateRowLevelTriggers(columns, statementExecutionContext); 166 _ServerSession globalSession = userSession.getSession().getSessionDatabase().getGlobalSession(); 167 if (statementExecutionContext.isConstraintCheckedForDefferable()) { 168 statementExecutionContext.setOperationTypePerformSameOperation(true); 169 constraintTableImm.checkUpdateConstraints(globalSession, statementExecutionContext, columns); 170 statementExecutionContext.setOperationTypePerformSameOperation(false); 171 constraintTableDeff.checkUpdateConstraints(globalSession, statementExecutionContext, columns); 172 } 173 triggerTable.FireAfterUpdateRowLevelTriggers(columns, statementExecutionContext); 174 return recordVersion; 175 } 176 177 public Object delete(_Iterator iterator, _StatementExecutionContext statementExecutionContext) throws DException { 178 _UserSession userSession = statementExecutionContext.getUserSession(); 179 _UserSessionTable userSessionTable = userSession.getUserSessionTable(tableName); 180 RecordVersion recordVersion=null; 181 if (statementExecutionContext.getUserRight()) 182 recordVersion = userSessionTable.delete(iterator); 183 else 184 recordVersion = userSessionTable.deleteWithoutRights(iterator); 185 186 statementExecutionContext.setRecordVersion( recordVersion ); 187 triggerTable.FireBeforeDeleteRowLevelTriggers( statementExecutionContext ); 188 _ServerSession globalSession = userSession.getSession().getSessionDatabase().getGlobalSession(); 189 if( statementExecutionContext.getUserSession().getSession().getImmediateConstriantsForChecking() ){ 190 statementExecutionContext.setOperationTypePerformSameOperation( true ); 191 constraintTableImm.checkDeleteConstraints( globalSession, statementExecutionContext ); 192 statementExecutionContext.setOperationTypePerformSameOperation( false ); 193 constraintTableDeff.checkDeleteConstraints( globalSession, statementExecutionContext ); 194 } 195 triggerTable.FireAfterDeleteRowLevelTriggers( statementExecutionContext ); 196 return recordVersion ; 197 } 198 199 public Object deleteVersion( _Iterator iterator, java.sql.Date date ,_StatementExecutionContext statementExecutionContext ) throws DException { 200 _UserSession userSession = statementExecutionContext.getUserSession(); 201 _UserSessionTable userSessionTable = userSession.getUserSessionTable(tableName); 202 RecordVersion recordVersion = userSessionTable.deleteVersion(iterator,date); 203 statementExecutionContext.setRecordVersion( recordVersion ); 204 triggerTable.FireBeforeDeleteRowLevelTriggers( statementExecutionContext ); 205 _ServerSession globalSession = userSession.getSession().getSessionDatabase().getGlobalSession(); 206 if( statementExecutionContext.isConstraintCheckedForDefferable() ){ 207 statementExecutionContext.setOperationTypePerformSameOperation( true ); 208 constraintTableImm.checkDeleteConstraints( globalSession, statementExecutionContext ); 209 statementExecutionContext.setOperationTypePerformSameOperation( false ); 210 constraintTableDeff.checkDeleteConstraints( globalSession, statementExecutionContext ); 211 } 212 triggerTable.FireAfterDeleteRowLevelTriggers( statementExecutionContext ); 213 return recordVersion ; 214 } 215 216 } 217 | Popular Tags |