KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sql99.dml;
2
3 import java.text.*;
4 import java.util.*;
5
6 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
7 import com.daffodilwoods.daffodildb.server.serversystem.*;
8 import com.daffodilwoods.daffodildb.server.sessionsystem.*;
9 import com.daffodilwoods.daffodildb.server.sql99.*;
10 import com.daffodilwoods.daffodildb.server.sql99.common.*;
11 import com.daffodilwoods.daffodildb.server.sql99.dql.semanticchecker.*;
12 import com.daffodilwoods.daffodildb.server.sql99.token.*;
13 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
14 import com.daffodilwoods.daffodildb.utils.*;
15 import com.daffodilwoods.database.general.*;
16 import com.daffodilwoods.database.resource.*;
17
18 public class insertstatement implements com.daffodilwoods.daffodildb.utils.parser.StatementExecuter, SQLdatachangestatement, Parameters {
19    public insertcolumnsandsource _insertcolumnsandsource0;
20    public insertiontarget _insertiontarget1;
21    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222;
22    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439223;
23    private TableDetails tableDetails;
24    private _Reference[] questionMarks;
25    private boolean checkingPerformed;
26
27    private int[] columnsType;
28    private int[] size;
29    private int[] columnIndexes;
30    private int[] scale;
31    private Collator collator;
32
33    public _Reference[] checkSemantic(_ServerSession serverSession) throws DException {
34       tableDetails = (TableDetails) _insertiontarget1.run(serverSession);
35       SemanticChecker.initializeCatalogNameAndSchemaNameOfTable(tableDetails, serverSession);
36       _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableDetails.getQualifiedIdentifier());
37       tableDetails.cc = cc;
38       tableDetails.setTableType(cc.getTableType());
39
40       if (tableDetails.getTableType() == TypeConstants.VIEW) {
41          throw new DmlStatementException("DSE1275", new Object JavaDoc[] {tableDetails.getQualifiedTableName()}
42                                          , new DException("DSE1267", null));
43       }
44       ColumnDetails[] columnDetails = _insertcolumnsandsource0.getColumnDetails();
45       checkColumn(serverSession, columnDetails, tableDetails);
46       _Reference[] referencesToReturn = _insertcolumnsandsource0.checkSemantic(serverSession);
47       _insertcolumnsandsource0.checkcolumnsValidity(columnDetails == null ? cc.getColumnCount() - TypeConstants.SYSTEMCOLUMNSLENGTH : columnDetails.length);
48       checkingPerformed = true;
49
50       _PrivilegeTable privilegeTable = serverSession.getUserSession().getPrivilegeCharacteristics().getPrivilegeTable(tableDetails.getQualifiedIdentifier());
51       if (! (_insertcolumnsandsource0 instanceof fromdefault)) {
52          if (columnDetails == null && !privilegeTable.hasTablePrivileges(PrivilegeTable.INSERT))
53             throw new PrivilegeException("DSE340", new Object JavaDoc[] {"INSERT", tableDetails.getQualifiedIdentifier()});
54          columnIndexes = columnDetails == null ? getIndexes(cc) : getIntColumnsArray(cc, columnDetails);
55          columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc);
56          size = ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc);
57          scale = ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc);
58          collator = cc.getCollator();
59          if (!privilegeTable.hasColumnPrivileges(_PrivilegeTable.INSERT, columnIndexes)) {
60             throw new PrivilegeException("DSE340", new Object JavaDoc[] {"INSERT", tableDetails.getQualifiedIdentifier()});
61          }
62       }
63
64       if (referencesToReturn != null) {
65          ArrayList list = new ArrayList();
66          for (int i = 0; i < referencesToReturn.length; i++) {
67             if (referencesToReturn[i].getReferenceType() != SimpleConstants.SEQUENCE) {
68                list.add(referencesToReturn[i]);
69             }
70          }
71          return list.size() == 0 ? null : (_Reference[]) list.toArray(new _Reference[0]);
72       }
73       return referencesToReturn;
74    }
75
76    private int[] getIndexes(_ColumnCharacteristics cc) throws DException {
77       int length = cc.getColumnCount();
78       int[] clm = new int[length - TypeConstants.SYSTEMCOLUMNSLENGTH];
79       for (int i = TypeConstants.SYSTEMCOLUMNSLENGTH, j = 0; i < length; i++, j++) {
80          clm[j] = i;
81       }
82       return clm;
83    }
84
85    private int[] getIntColumnsArray(_ColumnCharacteristics cc, ColumnDetails[] columnDetails) throws DException {
86       int length = columnDetails.length;
87       int[] columns = new int[length];
88       for (int i = 0; i < length; i++) {
89          try {
90             columns[i] = columnDetails[i].getIndex();
91          } catch (DException e) {
92             int tt = cc.getColumnIndex(columnDetails[i].getColumn());
93             columnDetails[i].setIndex(tt);
94             columns[i] = tt;
95          }
96       }
97       return columns;
98    }
99
100    public Object JavaDoc run(Object JavaDoc object) throws com.daffodilwoods.database.resource.DException {
101       _StatementExecutionContext sec = (_StatementExecutionContext) object;
102       _ServerSession serverSession = sec.getServerSession();
103       tableDetails = (TableDetails) _insertiontarget1.run(serverSession);
104       if (!checkingPerformed) {
105          performChecking(serverSession);
106       }
107
108       if (_insertcolumnsandsource0 instanceof fromdefault) {
109          return new InsertExecuterDefault(tableDetails, sec);
110       }
111       ColumnDetails[] columns = _insertcolumnsandsource0.getColumnDetails();
112
113       if (_insertcolumnsandsource0 instanceof fromsubquery) {
114          QualifiedIdentifier tableName = tableDetails.getQualifiedIdentifier();
115          InsertExecuterSubquery ies = new InsertExecuterSubquery( (TableDetails) _insertiontarget1.run(null), columns, sec, (_Executer) _insertcolumnsandsource0.run(serverSession), questionMarks, (fromsubquery) _insertcolumnsandsource0, tableName);
116          ies.setInitialParameters(columnsType, size, columnIndexes, scale, collator);
117          return ies;
118       }
119       InsertExecuterSimple ies = new InsertExecuterSimple( (TableDetails) _insertiontarget1.run(null), columns, sec, (fromconstructor) _insertcolumnsandsource0, questionMarks);
120       ies.setInitialParameters(columnsType, size, columnIndexes, scale, collator);
121       return ies;
122    }
123
124    public Object JavaDoc[] getParameters(Object JavaDoc object) throws DException {
125       return _insertcolumnsandsource0.getParameters(object);
126    }
127
128    public ParameterInfo[] getParameterInfo() throws DException {
129       ParameterInfo[] temp = _insertcolumnsandsource0.getParameterInfo();
130       if (temp == null)
131          return new ParameterInfo[] {};
132       ArrayList list = new ArrayList();
133       _ColumnCharacteristics cc = tableDetails.getColumnCharacteristics();
134       if (_insertcolumnsandsource0 instanceof fromconstructor) {
135          for (int i = 0; i < temp.length; i++) {
136             if (temp[i].getQuestionMark()) {
137                String JavaDoc columnName = temp[i].getName();
138                if (columnName != null) {
139                   if (temp[i].getDataType() == -1) {
140                      int index = cc.getColumnIndex(columnName);
141                      temp[i].setDataType(cc.getColumnType(index));
142                   }
143                } else {
144                   try {
145                        int ordinalPosition=temp[i].getOridinalPosition();
146                        temp[i].setName(cc.getColumnName(columnIndexes[ordinalPosition]));
147                        if (temp[i].getDataType() == -1) {
148                        temp[i].setDataType(cc.getColumnType(columnIndexes[ordinalPosition]));
149                        }
150                   } catch (IllegalColumnException ex) {
151                      if (ex.getDseCode().equalsIgnoreCase("DSE3514")) {
152                         if (cc.getColumnCount() < (i + 6))
153                            throw new DmlStatementException("DSE8141", null);
154                      }
155                      throw ex;
156                   }
157
158                }
159                list.add(temp[i]);
160             } else if (temp[i].getSubQuery()) {
161                ParameterInfo[] pp = temp[i].getParameterInfoArray();
162                if (pp != null) {
163                   list.addAll(Arrays.asList(pp));
164                }
165             }
166          }
167          ParameterInfo[] param = new ParameterInfo[list.size()];
168          list.toArray(param);
169          return param;
170       }
171       return temp;
172    }
173
174    private void performChecking(_ServerSession serverSession) throws DException {
175       _Reference[] refToCheck = checkSemantic(serverSession);
176       if (refToCheck != null) {
177          for (int i = 0; i < refToCheck.length; i++) {
178             if (refToCheck[i].getReferenceType() != SimpleConstants.VARIABLECOLUMN) {
179                throw new DmlStatementException("DSE1257", new Object JavaDoc[] {refToCheck[i].getColumn()});
180             }
181          }
182       }
183       questionMarks = refToCheck;
184    }
185
186    private void checkColumnsValidity(ColumnDetails[] columns, TableDetails tableDetails) throws DException {
187       throw new UnsupportedOperationException JavaDoc(" METHOD NOT IMPLEMENTED ");
188    }
189
190    private boolean check(TableDetails tableDetails, String JavaDoc[] columnName) throws DException {
191       throw new UnsupportedOperationException JavaDoc(" METHOD NOT IMPLEMENTED ");
192    }
193
194    private void checkColumn(_ServerSession serverSession, ColumnDetails[] columnDetails, TableDetails tableDetails) throws DException {
195       if (columnDetails == null) {
196          return;
197       }
198       ArrayList list = new ArrayList();
199       DmlStaticFunctionality.setTableNamesAndDatatypesOfAllColumns(serverSession, columnDetails, new TableDetails[] {tableDetails}
200           , list, null);
201       if (list.size() > 0) {
202          String JavaDoc s = ( (ColumnDetails) list.get(0)).getQualifiedColumnName();
203          throw new DException("DSE508", new Object JavaDoc[] {s});
204       }
205       DmlStaticFunctionality.checkColumnUniqueness(columnDetails);
206    }
207
208    public _Reference[] getReferences() throws com.daffodilwoods.database.resource.DException {
209       return _insertcolumnsandsource0.getReferences(new TableDetails[] {tableDetails});
210    }
211
212    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
213       return this;
214    }
215
216    public String JavaDoc toString() {
217       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
218       sb.append(" ");
219       sb.append(_SRESERVEDWORD12065439223);
220       sb.append(" ");
221       sb.append(_SRESERVEDWORD12065439222);
222       sb.append(" ");
223       sb.append(_insertiontarget1);
224       sb.append(" ");
225       sb.append(_insertcolumnsandsource0);
226       return sb.toString();
227    }
228 }
229
Popular Tags