KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > dml > InsertExecuterSimple


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 JavaDoc[][] 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(); //change it later on...
41
fromConstructor = fromConstructr;
42       performInitialisations(columnDetails);
43       questionMarks = questions;
44       referenceIteratorMapping = (Object JavaDoc[][]) 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 JavaDoc []tableName = (String JavaDoc[])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 JavaDoc 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 JavaDoc[] values = (Object JavaDoc[]) fromConstructor.run(initialisedVV);
74       int count = 0;
75       sec.setUserSession(childUserSession);
76       sec.setTriggerExecutionContext(new TriggerExecutionContext());
77       Object JavaDoc insertEvent = null;
78       try {
79          statementTriggerTable.fireBeforeInsertStatementLevelTriggers(sec);
80          Object JavaDoc[] tmpValues = null;
81          for (int k = 0; k < values.length; k++) {
82             if (values[k] instanceof Object JavaDoc[]) {
83                tmpValues = (Object JavaDoc[]) 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 JavaDoc 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 JavaDoc[] {tableDetails.getQualifiedTableName()}, e);
107        }
108
109
110       catch (Exception JavaDoc e) {
111          childUserSession.rollbackSavePoint(sec);
112          throw new DException("DSE0", new Object JavaDoc[] {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 JavaDoc(count);
125    }
126
127    public Object JavaDoc execute(Object JavaDoc[] 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 JavaDoc[] {tableDetails.getQualifiedTableName()}
138                                          , new DException("DSE1252", new Object JavaDoc[] {new Integer JavaDoc(obj.length), new Integer JavaDoc(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 JavaDoc[][] 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 JavaDoc[][]) 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 JavaDoc[][] 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 JavaDoc[] getValues(Object JavaDoc[][] refValue) {
187       int len = refValue.length;
188       Object JavaDoc[] toReturn = new Object JavaDoc[len];
189       for (int i = 0; i < len; i++) {
190          toReturn[i] = refValue[i][1];
191       }
192       return toReturn;
193    }
194
195    public Object JavaDoc executeForFresh(Object JavaDoc[] 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