1 package com.daffodilwoods.daffodildb.server.sql99.dml; 2 3 import java.text.*; 4 import java.util.*; 5 6 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*; 7 import com.daffodilwoods.daffodildb.server.serversystem.*; 8 import com.daffodilwoods.daffodildb.server.serversystem.datatriggersystem.*; 9 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.statementtriggersystem.*; 10 import com.daffodilwoods.daffodildb.server.sessionsystem.*; 11 import com.daffodilwoods.daffodildb.server.sql99.*; 12 import com.daffodilwoods.daffodildb.server.sql99.common.*; 13 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 14 import com.daffodilwoods.daffodildb.utils.*; 15 import com.daffodilwoods.daffodildb.utils.field.*; 16 import com.daffodilwoods.database.general.*; 17 import com.daffodilwoods.database.resource.*; 18 import com.daffodilwoods.database.utility.P; 19 20 public class InsertExecuterSimple implements _Executer { 21 _StatementExecutionContext sec; 22 fromconstructor fromConstructor; 23 _DataTriggerTable dataTriggerTable; 24 _StatementTriggerTable statementTriggerTable; 25 _UserSession childUserSession; 26 _Reference[] knownReferences; 27 int[] columnsType; 28 int[] size; 29 int[] columnIndexes; 30 int[] scale; 31 Collator collator; 32 _ServerSession serverSession; 33 TableDetails tableDetails; 34 _Reference[] questionMarks; 35 private Object [][] referenceIteratorMapping; 36 _DropTableInfo []dropTableInfo; 37 public InsertExecuterSimple(TableDetails tableDetails, ColumnDetails[] columnDetails, _StatementExecutionContext ssec, fromconstructor fromConstructr, _Reference[] questions) throws DException { 38 this.tableDetails = tableDetails; 39 sec = ssec; 40 serverSession = sec.getServerSession(); fromConstructor = fromConstructr; 42 performInitialisations(columnDetails); 43 questionMarks = questions; 44 referenceIteratorMapping = (Object [][]) fromConstructor.getReferenceIteratorMapping(tableDetails, sec.getServerSession()); 45 ArrayList listOfTables = new ArrayList(); 46 fromConstructor.getTablesIncluded(listOfTables) ; 47 ArrayList dropTablesList = new ArrayList(); 48 QualifiedIdentifier table ; 49 for (int i = 0; i < listOfTables.size() ; i++) { 50 String []tableName = (String [])listOfTables.get(i) ; 51 if(tableName.length < 3){ 52 if(tableName.length == 1) 53 table = new QualifiedIdentifier(serverSession.getCurrentCatalog() ,serverSession.getCurrentSchema() ,tableName[0] ); 54 else 55 table = new QualifiedIdentifier(serverSession.getCurrentCatalog() ,tableName[0],tableName[1] ); 56 }else 57 table = new QualifiedIdentifier(tableName[0] ,tableName[1],tableName[2] ); 58 if(serverSession.getColumnCharacteristics(table).getTableType() == TypeConstants.TABLE ) 59 dropTablesList.add (((_MergeTable)serverSession.getIndexTable(table )).getDropTableInfo()) ; 60 } 61 table = tableDetails.getQualifiedIdentifier() ; 62 dropTablesList.add ( ((_MergeTable)serverSession.getIndexTable(table )).getDropTableInfo()) ; 63 dropTableInfo = (_DropTableInfo [])dropTablesList.toArray(new _DropTableInfo[0]); 64 65 } 66 67 public Object execute(_VariableValues vv) throws com.daffodilwoods.database.resource.DException { 68 checkForDroppedTable(); 69 childUserSession = sec.getServerSession().getUserSession(); 70 childUserSession.startSavePoint(); 71 sec.setUserRight(false); 72 _VariableValues initialisedVV = initialiseVariableValues(vv); 73 Object [] values = (Object []) fromConstructor.run(initialisedVV); 74 int count = 0; 75 sec.setUserSession(childUserSession); 76 sec.setTriggerExecutionContext(new TriggerExecutionContext()); 77 Object insertEvent = null; 78 try { 79 statementTriggerTable.fireBeforeInsertStatementLevelTriggers(sec); 80 Object [] tmpValues = null; 81 for (int k = 0; k < values.length; k++) { 82 if (values[k] instanceof Object []) { 83 tmpValues = (Object []) values[k]; 84 } else { 85 tmpValues = new FieldBase[] { (FieldBase) values[k]}; 86 } 87 FieldBase[] valuesToInsert = FieldUtility.convertToAppropriateType(FieldUtility.setFieldLiteralBufferRangeWithArray(tmpValues), columnsType, size, scale, collator); 88 try { 89 insertEvent = dataTriggerTable.insertWithTriggersOnly(columnIndexes, valuesToInsert, sec); 90 } catch (NullPointerException ex) { 91 if (columnIndexes.length != valuesToInsert.length) { 92 throw new DException("DSE214", null); 93 } 94 dataTriggerTable = sec.getDataTriggerTable(tableDetails.getQualifiedIdentifier()); 95 insertEvent = dataTriggerTable.insertWithTriggersOnly(columnIndexes, valuesToInsert, sec); 96 } 97 count++; 98 } 99 statementTriggerTable.fireAfterInsertStatementLevelTriggers(sec); 100 } catch (DException e) { 101 childUserSession.rollbackSavePoint(sec); 102 if(e.getDseCode().equalsIgnoreCase("DSE5582")) 103 throw new DException("DSE5582",null); 104 if (e.getDseCode().equalsIgnoreCase("DSE5583")) 105 throw new DException("DSE5583",null); 106 throw new DmlStatementException("DSE1275", new Object [] {tableDetails.getQualifiedTableName()}, e); 107 } 108 109 110 catch (Exception e) { 111 childUserSession.rollbackSavePoint(sec); 112 throw new DException("DSE0", new Object [] {e.getMessage()}); 113 } 114 115 childUserSession.commitSavePoint(sec); 116 if (sec.getAutoCommit() && serverSession.getAutoCommit() && !childUserSession.getSession().hasAnyChild()) { 117 serverSession.commit(); 118 } 119 if (sec.getAutoGeneratedType()) { 120 DMLResult dmlResult = sec.getDMLResult(); 121 dmlResult.setrowsEffected(count); 122 return dmlResult; 123 } 124 return new Integer (count); 125 } 126 127 public Object execute(Object [] obj) throws com.daffodilwoods.database.resource.DException { 128 checkForDroppedTable(); 129 if (obj == null) { 130 if (questionMarks != null) { 131 throw new DException("DSE1273", null); 132 } 133 return execute( (_VariableValues)null); 134 } 135 _VariableValues vv = new VariableValues(questionMarks, sec.getServerSession()); 136 if (obj.length != questionMarks.length) { 137 throw new DmlStatementException("DSE1275", new Object [] {tableDetails.getQualifiedTableName()} 138 , new DException("DSE1252", new Object [] {new Integer (obj.length), new Integer (questionMarks.length)})); 139 } 140 141 142 vv.setConditionVariableValue(questionMarks, FieldUtility.getFields(obj), 2); 143 return execute(vv); 144 } 145 146 private void performInitialisations(ColumnDetails[] columnDetails) throws DException { 147 statementTriggerTable = sec.getStatementTriggerTable(tableDetails.getQualifiedIdentifier()); 148 } 149 150 151 private _VariableValues initialiseVariableValues(_VariableValues vv) throws DException { 152 _VariableValues vvToReturn = null; 153 Object [][] refValuePair = null; 154 _Reference[] ref = null; 155 if (vv != null) { 156 refValuePair = vv.getReferenceAndValuePair(); 157 ref = getReferences(refValuePair); 158 } 159 if (questionMarks != null && ref == null) { 160 throw new DException("DSE1273", null); 161 } 162 163 if (referenceIteratorMapping != null) { 164 vvToReturn = new SubQueryVariableValues(ref, (Object [][]) referenceIteratorMapping, sec.getServerSession()); 165 } else { 166 vvToReturn = new VariableValues(ref, sec.getServerSession()); 167 } 168 if (vv != null && ref != null) { 169 vvToReturn.setConditionVariableValue(ref, getValues(refValuePair), 1); 170 } 171 return vvToReturn; 172 } 173 174 private _Reference[] getReferences(Object [][] refValue) { 175 if (refValue != null) { 176 int len = refValue.length; 177 _Reference[] refToReturn = new _Reference[len]; 178 for (int i = 0; i < len; i++) { 179 refToReturn[i] = (_Reference) refValue[i][0]; 180 } 181 return refToReturn; 182 } 183 return null; 184 } 185 186 private Object [] getValues(Object [][] refValue) { 187 int len = refValue.length; 188 Object [] toReturn = new Object [len]; 189 for (int i = 0; i < len; i++) { 190 toReturn[i] = refValue[i][1]; 191 } 192 return toReturn; 193 } 194 195 public Object executeForFresh(Object [] parm1) throws com.daffodilwoods.database.resource.DException { 196 return execute(parm1); 197 } 198 199 public void checkForDroppedTable() throws DException{ 200 for (int i = 0; i < dropTableInfo.length; i++) { 201 if (dropTableInfo[i].isTableDropped()) 202 throw new DException("DSE5584", null); 203 204 } 205 } 206 public void setInitialParameters(int[] columnsType0, int[] size0, int[] columnIndexes0, int[] scale0, Collator collator0) { 207 columnsType = columnsType0; 208 size = size0; 209 columnIndexes = columnIndexes0; 210 scale = scale0; 211 collator = collator0; 212 } 213 214 } 215 | Popular Tags |