1 package com.daffodilwoods.daffodildb.server.sql99.dml; 2 3 import com.daffodilwoods.daffodildb.server.serversystem.*; 4 import com.daffodilwoods.daffodildb.server.serversystem.datatriggersystem.*; 5 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.statementtriggersystem.*; 6 import com.daffodilwoods.daffodildb.server.sessionsystem.*; 7 import com.daffodilwoods.daffodildb.server.sql99.*; 8 import com.daffodilwoods.daffodildb.server.sql99.common.*; 9 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 10 import com.daffodilwoods.database.general.*; 11 import com.daffodilwoods.database.resource.*; 12 import java.util.*; 13 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*; 14 15 public class InsertExecuterDefault implements _Executer { 16 17 _StatementExecutionContext sec; 18 _DataTriggerTable dataTriggerTable; 19 _StatementTriggerTable statementTriggerTable; 20 _UserSession childUserSession; 21 _ServerSession serverSession; 22 TableDetails tableDetails; 23 _DropTableInfo dropTableInfo; 24 public InsertExecuterDefault(TableDetails tableDetails, _StatementExecutionContext ssec) throws DException { 25 this.tableDetails = tableDetails; 26 sec = ssec; 27 serverSession = sec.getServerSession(); 28 performInitialisations(); 29 dropTableInfo = ((_MergeTable)serverSession.getIndexTable(tableDetails.getQualifiedIdentifier() )).getDropTableInfo() ; 30 } 31 32 public Object execute(_VariableValues vv) throws com.daffodilwoods.database.resource.DException { 33 checkForDroppedTable(); 34 childUserSession = sec.getServerSession().getUserSession(); 35 childUserSession.startSavePoint(); 36 37 int count = 0; 38 _TriggerExecutionContext tec = new TriggerExecutionContext(); 39 sec.setUserSession(childUserSession); 40 sec.setTriggerExecutionContext(tec); 41 Object insertEvent = null; 42 try { 43 statementTriggerTable.fireBeforeInsertStatementLevelTriggers(sec); 44 insertEvent = dataTriggerTable.insertWithTriggersOnly(null, null, sec); 45 count++; 46 statementTriggerTable.fireAfterInsertStatementLevelTriggers(sec); 47 } catch (DException e) { 48 if(e.getDseCode().equalsIgnoreCase("DSE5582")) 49 throw new DException("DSE5582",null); 50 if (e.getDseCode().equalsIgnoreCase("DSE5583")) 51 throw new DException("DSE5583",null); 52 childUserSession.rollbackSavePoint(sec); 53 throw new DmlStatementException("DSE1275", new Object [] {tableDetails.getQualifiedTableName()} 54 , e); 55 } 56 catch (Exception e) { 57 e.printStackTrace(); 58 childUserSession.rollbackSavePoint(sec); 59 throw new DException("DSE0", new Object [] {e.getMessage()}); 60 } 61 childUserSession.commitSavePoint(sec); 62 if (sec.getAutoCommit() && serverSession.getAutoCommit() && !childUserSession.getSession().hasAnyChild()) { 63 serverSession.commit(); 64 } 65 if (sec.getAutoGeneratedType()) { 66 DMLResult dmlResult = sec.getDMLResult(); 67 dmlResult.setrowsEffected(count); 68 return dmlResult; 69 } 70 71 return new Integer (count); 72 } 73 74 public Object execute(Object [] obj) throws com.daffodilwoods.database.resource.DException { 75 checkForDroppedTable(); 76 if (obj == null) { 77 return execute(new VariableValues(sec.getServerSession())); 78 } 79 _VariableValues vv = new VariableValues(sec.getServerSession()); 80 return execute(vv); 81 } 82 83 private void performInitialisations() throws DException { 84 QualifiedIdentifier tableName = tableDetails.getQualifiedIdentifier(); 85 dataTriggerTable = sec.getDataTriggerTable(tableName); 86 statementTriggerTable = sec.getStatementTriggerTable(tableName); 87 } 88 89 public Object executeForFresh(Object [] parm1) throws com.daffodilwoods.database.resource.DException { 90 return execute(parm1); 91 } 92 93 94 public void checkForDroppedTable() throws DException{ 95 if (dropTableInfo.isTableDropped()) 96 throw new DException("DSE5584", null); 97 } 98 99 } 100 | Popular Tags |