KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sql99.dml;
2
3 import java.text.*;
4
5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
6 import com.daffodilwoods.daffodildb.server.serversystem.*;
7 import com.daffodilwoods.daffodildb.server.serversystem.datatriggersystem.*;
8 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.statementtriggersystem.*;
9 import com.daffodilwoods.daffodildb.server.sessionsystem.*;
10 import com.daffodilwoods.daffodildb.server.sql99.*;
11 import com.daffodilwoods.daffodildb.server.sql99.common.*;
12 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
13 import com.daffodilwoods.daffodildb.server.sql99.dql.listenerevents.*;
14 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
15 import com.daffodilwoods.daffodildb.utils.*;
16 import com.daffodilwoods.database.general.*;
17 import com.daffodilwoods.database.resource.*;
18 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*;
19 import java.util.*;
20 import com.daffodilwoods.database.utility.P;
21 import com.daffodilwoods.daffodildb.server.datasystem.utility.RecordVersion;
22
23 public class InsertExecuterSubquery implements _Executer {
24
25    _StatementExecutionContext sec; // ReviewToDo No need of it as global
26
_Executer executer;
27    _DataTriggerTable dataTriggerTable;
28    _StatementTriggerTable statementTriggerTable;
29    _UserSession childUserSession;
30    int[] columnsType;
31    int[] size;
32    int[] columnIndexes;
33    int[] scale;
34    Collator collator;
35    _ServerSession serverSession; // Remove it later on as it will be passed in the method itself
36
TableDetails td;
37    _Reference[] questionMarks;
38    _DropTableInfo[] dropTableInfo;
39    QualifiedIdentifier tableName;
40    private fromsubquery subQuery;
41    public InsertExecuterSubquery(TableDetails tableDetails, ColumnDetails[] columnDetails, _StatementExecutionContext ssec, _Executer exec, _Reference[] questions, fromsubquery subQuery0, QualifiedIdentifier tableName0) throws DException {
42       sec = ssec;
43       serverSession = sec.getServerSession(); //change it later on...
44
executer = exec;
45       questionMarks = questions;
46       td = tableDetails;
47       performInitialisations(tableDetails, columnDetails);
48       subQuery = subQuery0;
49       ArrayList listOfTables = new ArrayList();
50       subQuery.getTablesIncluded(listOfTables);
51       ArrayList dropTablesList = new ArrayList();
52       QualifiedIdentifier table;
53       for (int i = 0; i < listOfTables.size(); i++) {
54          String JavaDoc[] tableName = (String JavaDoc[]) listOfTables.get(i);
55          if (tableName.length < 3) {
56             if (tableName.length == 1)
57                table = new QualifiedIdentifier(serverSession.getCurrentCatalog(), serverSession.getCurrentSchema(), tableName[0]);
58             else
59                table = new QualifiedIdentifier(serverSession.getCurrentCatalog(), tableName[0], tableName[1]);
60          } else
61             table = new QualifiedIdentifier(tableName[0], tableName[1], tableName[2]);
62          if (serverSession.getColumnCharacteristics(table).getTableType() == TypeConstants.TABLE)
63             dropTablesList.add( ( (_MergeTable) serverSession.getIndexTable(table)).getDropTableInfo());
64       }
65       table = tableDetails.getQualifiedIdentifier();
66       dropTablesList.add( ( (_MergeTable) serverSession.getIndexTable(table)).getDropTableInfo());
67       dropTableInfo = (_DropTableInfo[]) dropTablesList.toArray(new _DropTableInfo[0]);
68       tableName = tableName0;
69    }
70
71    public Object JavaDoc execute(_VariableValues parm1) throws com.daffodilwoods.database.resource.DException {
72       checkForDroppedTable();
73       childUserSession = sec.getServerSession().getUserSession();
74       childUserSession.startSavePoint();
75       _VariableValues vvInitialised = initialiseVariableValues(parm1);
76       sec.setUserSession(childUserSession);
77       statementTriggerTable.fireBeforeInsertStatementLevelTriggers(sec);
78       _Iterator iterator = (_Iterator) executer.execute(vvInitialised);
79       int count = 0;
80       try {
81          Object JavaDoc insertEvent = null;
82          if (iterator.last()) {
83             do {
84                insertEvent = dataTriggerTable.insert(columnIndexes, FieldUtility.convertToAppropriateType(FieldUtility.setFieldLiteralBufferRange( (Object JavaDoc[]) ( (_SelectIterator) iterator).getSelectColumnValues()), columnsType, size, scale, collator), sec);
85                count++;
86             } while (iterator.previous());
87          }
88
89          statementTriggerTable.fireAfterInsertStatementLevelTriggers(sec);
90       } catch (DException e) {
91          childUserSession.rollbackSavePoint(sec);
92          if (e.getDseCode().equalsIgnoreCase("DSE5582")) {
93             throw new DException("DSE5582", null);
94          }
95          if (e.getDseCode().equalsIgnoreCase("DSE5583"))
96             throw new DException("DSE5583", null);
97                  throw e;
98       }
99       catch (Exception JavaDoc e) {
100          childUserSession.rollbackSavePoint(sec);
101          throw new DException("DSE0", new Object JavaDoc[] {e.getMessage()});
102       }
103       childUserSession.commitSavePoint(sec);
104       if (sec.getAutoCommit() && serverSession.getAutoCommit() && !childUserSession.getSession().hasAnyChild()) {
105          serverSession.commit();
106       }
107       if (sec.getAutoGeneratedType()) {
108          DMLResult dmlResult = sec.getDMLResult();
109          dmlResult.setrowsEffected(count);
110          return dmlResult;
111       }
112       return new Integer JavaDoc(count);
113    }
114
115    public Object JavaDoc execute(Object JavaDoc[] obj) throws com.daffodilwoods.database.resource.DException {
116       checkForDroppedTable();
117       if (obj == null) {
118          if (questionMarks != null) {
119             throw new DException("DSE1273", null);
120          }
121          return execute( (_VariableValues)null);
122       }
123       _VariableValues vv = new VariableValues(questionMarks, sec.getServerSession());
124       if (obj.length != questionMarks.length) {
125          throw new DmlStatementException("DSE1275", new Object JavaDoc[] {td.getQualifiedTableName()}
126                                          , new DException("DSE1252", new Object JavaDoc[] {new Integer JavaDoc(obj.length), new Integer JavaDoc(questionMarks.length)}));
127       }
128       vv.setConditionVariableValue(questionMarks, FieldUtility.getFields(obj), 2);
129       return execute(vv);
130    }
131
132    private void performInitialisations(TableDetails tableDetails, ColumnDetails[] columnDetails) throws DException {
133       QualifiedIdentifier tableName = tableDetails.getQualifiedIdentifier();
134       dataTriggerTable = sec.getDataTriggerTable(tableName);
135       statementTriggerTable = sec.getStatementTriggerTable(tableName);
136    }
137
138
139    private _VariableValues initialiseVariableValues(_VariableValues vv) throws DException {
140       Object JavaDoc[][] refValuePair = null;
141       _Reference[] ref = null;
142       if (vv != null) {
143          refValuePair = vv.getReferenceAndValuePair();
144          ref = getReferences(refValuePair);
145       }
146       if (questionMarks != null && ref == null) {
147          throw new DException("DSE1273", null);
148       }
149
150       _VariableValues vvToReturn = new VariableValues(ref, sec.getServerSession());
151       if (vv != null && ref != null) {
152          vvToReturn.setConditionVariableValue(ref, getValues(refValuePair), 1);
153       }
154       return vvToReturn;
155    }
156
157    private _Reference[] getReferences(Object JavaDoc[][] refValue) {
158       if (refValue != null) {
159          int len = refValue.length;
160          _Reference[] refToReturn = new _Reference[len];
161          for (int i = 0; i < len; i++) {
162             refToReturn[i] = (_Reference) refValue[i][0];
163          }
164          return refToReturn;
165       }
166       return null;
167    }
168
169    private Object JavaDoc[] getValues(Object JavaDoc[][] refValue) {
170       int len = refValue.length;
171       Object JavaDoc[] toReturn = new Object JavaDoc[len];
172       for (int i = 0; i < len; i++) {
173          toReturn[i] = refValue[i][1];
174       }
175       return toReturn;
176    }
177
178    public Object JavaDoc executeForFresh(Object JavaDoc[] parm1) throws com.daffodilwoods.database.resource.DException {
179       /**@todo Implement this com.daffodilwoods.daffodildb.server.sql99._Executer method*/
180       throw new java.lang.UnsupportedOperationException JavaDoc("Method executeForFresh() not yet implemented.");
181    }
182
183    public void checkForDroppedTable() throws DException {
184       for (int i = 0; i < dropTableInfo.length; i++) {
185          if (dropTableInfo[i].isTableDropped())
186             throw new DException("DSE5584", null);
187       }
188    }
189
190    public void setInitialParameters(int[] columnsType0, int[] size0, int[] columnIndexes0, int[] scale0, Collator collator0) {
191       columnsType = columnsType0;
192       size = size0;
193       columnIndexes = columnIndexes0;
194       scale = scale0;
195       collator = collator0;
196    }
197 }
198
Popular Tags