KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sql99.dml;
2
3 import java.util.*;
4 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
5 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*;
6 import com.daffodilwoods.daffodildb.server.serversystem.*;
7 import com.daffodilwoods.daffodildb.server.sessionsystem.*;
8 import com.daffodilwoods.daffodildb.server.sql99.common.*;
9 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
10 import com.daffodilwoods.daffodildb.server.sql99.dql.semanticchecker.*;
11 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*;
12 import com.daffodilwoods.daffodildb.server.sql99.token.*;
13 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
14 import com.daffodilwoods.database.general.*;
15 import com.daffodilwoods.database.resource.*;
16 import com.daffodilwoods.daffodildb.server.sql99.expression.correlationname;
17 import com.daffodilwoods.daffodildb.server.sql99.dql.plan.table.SingleTablePlan;
18 import com.daffodilwoods.database.utility.P;
19 import java.util.ArrayList JavaDoc;
20
21 public class deletestatementsearched implements com.daffodilwoods.daffodildb.utils.parser.StatementExecuter, SQLdatachangestatement, Parameters,TypeConstants {
22    public SRESERVEDWORD1206543922searchcondition _OptSRESERVEDWORD1206543922searchcondition0;
23    public correlationname _Optcorrelationname1 ;
24    public targettable _targettable2;
25    public SRESERVEDWORD1206543922 _OptSRESERVEDWORD12065439223;
26    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439224;
27
28    private boolean checkingPerformed;
29    private ArrayList JavaDoc knownReferences;
30    private _Reference[] questionMarks;
31    private String JavaDoc aliasName =null;
32    private _Reference[] refToCheck;
33    private ColumnDetails[] columnDetail =null;
34    public _Reference[] checkSemantic(_ServerSession serverSession) throws DException {
35       TableDetails tableDetails = (TableDetails) _targettable2.run(serverSession);
36       if(_Optcorrelationname1 != null){
37         aliasName = (String JavaDoc) _Optcorrelationname1.run(serverSession);
38         tableDetails.setAliasName(aliasName);
39       }
40
41       SemanticChecker.initializeCatalogNameAndSchemaNameOfTable(tableDetails, serverSession);
42       _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableDetails.getQualifiedIdentifier());
43       tableDetails.cc = cc;
44       tableDetails.setTableType(cc.getTableType());
45
46       if (tableDetails.getTableType() == TypeConstants.VIEW) {
47          throw new DmlStatementException("DSE1277", new Object JavaDoc[] {tableDetails.getQualifiedTableName()}
48                                          , new DException("DSE1267", null));
49       }
50
51       tableDetails.cc = serverSession.getColumnCharacteristics(tableDetails.getQualifiedIdentifier());
52       checkingPerformed = true;
53
54       _PrivilegeTable privilegeTable = serverSession.getUserSession().getPrivilegeCharacteristics().getPrivilegeTable(tableDetails.getQualifiedIdentifier());
55       if (!privilegeTable.hasTablePrivileges(PrivilegeTable.DELETE)) {
56          throw new PrivilegeException("DSE340", new Object JavaDoc[] {"DELETE", tableDetails.getQualifiedIdentifier()});
57       }
58
59       knownReferences = new ArrayList JavaDoc(4);
60       if (_OptSRESERVEDWORD1206543922searchcondition0 != null) {
61          ArrayList JavaDoc list = new ArrayList JavaDoc();
62          GeneralPurposeStaticClass.addRecursively(_OptSRESERVEDWORD1206543922searchcondition0.getColumnDetails(), list);
63          ColumnDetails[] cds = (ColumnDetails[]) list.toArray(new ColumnDetails[0]);
64          int[] columns = getColumnInWhereClause(cds, cc);
65          if (columns != null) {
66             boolean fetchRight = privilegeTable.hasColumnPrivileges(_PrivilegeTable.SELECT,
67                 columns);
68             if (!fetchRight) {
69                throw new DException("DSE8132", null);
70             }
71          }
72
73          return getWhereReferences(tableDetails, serverSession);
74       }
75       return null;
76    }
77
78    private int[] getColumnInWhereClause(ColumnDetails[] cds, _ColumnCharacteristics cc) throws DException {
79       int[] columns = new int[cds.length];
80       int j = 0;
81       for (int i = 0; i < cds.length; i++) {
82          if (cds[i].getType() == ColumnDetails.COLUMNDETAIL) {
83             try {
84                columns[j] = cds[i].getIndex();
85             } catch (DException e) {
86                int tt = cc.getColumnIndex(cds[i].getColumn());
87                cds[i].setIndex(tt);
88                columns[j] = tt;
89             }
90             j++;
91          }
92       }
93       if (j > 0) {
94          int[] toReturn = new int[j];
95          System.arraycopy(columns, 0, toReturn, 0, j);
96          return toReturn;
97       }
98       return null;
99    }
100
101    public Object JavaDoc run(Object JavaDoc object) throws DException {
102       _StatementExecutionContext sec = (_StatementExecutionContext) object;
103       _ServerSession ss = sec.getServerSession();
104       if (!checkingPerformed) {
105          performChecking(ss);
106       }
107       TableDetails tableDetails = _targettable2.getTableDetails();
108       QualifiedIdentifier tableName = tableDetails.getQualifiedIdentifier();
109       booleanvalueexpression condition = _OptSRESERVEDWORD1206543922searchcondition0 == null ? null : (booleanvalueexpression) _OptSRESERVEDWORD1206543922searchcondition0.run(object);
110
111        SingleTablePlan singleTablePlan = new SingleTablePlan(tableName.toString(),condition,tableDetails,null,true,columnDetail);
112        singleTablePlan.setInternalIteratorRequired(true);
113       _Iterator iterator = singleTablePlan.execute(ss);
114       ArrayList JavaDoc listOfTables = new ArrayList JavaDoc();
115       QualifiedIdentifier table = null;
116       ArrayList JavaDoc dropTablesList = new ArrayList JavaDoc();
117       if (_OptSRESERVEDWORD1206543922searchcondition0 != null) {
118          _OptSRESERVEDWORD1206543922searchcondition0.getTablesIncluded(listOfTables);
119
120          for (int i = 0; i < listOfTables.size(); i++) {
121             String JavaDoc[] table_Name = (String JavaDoc[]) listOfTables.get(i);
122             if (table_Name.length < 3) {
123                if (table_Name.length == 1)
124                   table = new QualifiedIdentifier(ss.getCurrentCatalog(),
125                                                   ss.getCurrentSchema(), table_Name[0]);
126                else
127                   table = new QualifiedIdentifier(ss.getCurrentCatalog(),
128                                                   table_Name[0], table_Name[1]);
129             } else
130                table = new QualifiedIdentifier(table_Name[0], table_Name[1],
131                                                table_Name[2]);
132             if (ss.getColumnCharacteristics(table).getTableType() == TypeConstants.TABLE)
133                dropTablesList.add( ( (_MergeTable) ss.getIndexTable(table)).getDropTableInfo());
134          }
135       }
136       table = tableDetails.getQualifiedIdentifier();
137       dropTablesList.add( ( (_MergeTable) ss.getIndexTable(table)).getDropTableInfo());
138       _DropTableInfo[] dropTableInfo = (_DropTableInfo[]) dropTablesList.toArray(new _DropTableInfo[0]);
139
140       DeleteExecuter dExecuter = new DeleteExecuter(sec, tableDetails, iterator, System.currentTimeMillis(), knownReferences.size() > 0 ? (_Reference[]) knownReferences.toArray(new _Reference[0]) : null, questionMarks, dropTableInfo, table);
141       return dExecuter;
142    }
143
144    public Object JavaDoc[] getParameters(Object JavaDoc object) throws DException {
145       if (_OptSRESERVEDWORD1206543922searchcondition0 == null) {
146          return null;
147       }
148       return _OptSRESERVEDWORD1206543922searchcondition0.getParameters(object);
149    }
150
151    public ParameterInfo[] getParameterInfo() throws DException {
152       _ColumnCharacteristics cc = _targettable2.getTableDetails().getColumnCharacteristics();
153       if (_OptSRESERVEDWORD1206543922searchcondition0 == null) {
154          return null;
155       }
156       ParameterInfo[] param = _OptSRESERVEDWORD1206543922searchcondition0.getParameterInfo();
157       ArrayList JavaDoc list = new ArrayList JavaDoc();
158       for (int i = 0; i < param.length; i++) {
159          if (param[i].getQuestionMark()) {
160             list.add(param[i]);
161          }
162       }
163       ParameterInfo[] tt = new ParameterInfo[list.size()];
164       list.toArray(tt);
165       return tt;
166    }
167
168    public _Reference[] getReferences() throws com.daffodilwoods.database.resource.DException {
169       return _OptSRESERVEDWORD1206543922searchcondition0 == null ? null : _OptSRESERVEDWORD1206543922searchcondition0.getReferences(new TableDetails[] {_targettable2.getTableDetails()});
170    }
171
172    private _Reference[] checkColumnsValidity(ColumnDetails[] columns, TableDetails tableDetails, _ServerSession serverSession) throws DException {
173       ArrayList JavaDoc aList = new ArrayList JavaDoc(5);
174       SetColumnProperties.setTableNamesAndDatatypesOfAllColumns(serverSession, columns, new TableDetails[] {tableDetails}
175           , aList, new ArrayList JavaDoc());
176       for (int i = 0, length = aList.size(); i < length; i++) {
177          ( (ColumnDetails) aList.get(i)).setUnderLyingReference(true);
178       }
179       return aList.size() > 0 ? (_Reference[]) aList.toArray(new _Reference[0]) : null;
180    }
181
182    private boolean check(TableDetails tableDetails, String JavaDoc[] columnName) throws DException {
183      try {
184        if (_Optcorrelationname1 != null) {
185          String JavaDoc aliasName = (String JavaDoc) _Optcorrelationname1.run(null);
186          if (columnName.length >= 2 && aliasName.equalsIgnoreCase(columnName[0])) {
187            return true;
188          }
189        }
190
191        String JavaDoc[] tableName = tableDetails.getTableName();
192        for (int i = columnName.length - 2, j = tableName.length - 1,
193             length = columnName.length; i >= 0 && j >= 0; i--, j--) {
194          if (!tableName[j].equalsIgnoreCase(columnName[i])) {
195            return false;
196          }
197        }
198          return tableDetails.cc.getColumnIndex(columnName[columnName.length - 1]) !=
199              -1;
200       } catch (Exception JavaDoc ex) {
201          return false;
202       }
203    }
204
205    private _Reference[] getWhereReferences(TableDetails tableDetails, _ServerSession serverSession) throws DException {
206        ArrayList JavaDoc list =new ArrayList JavaDoc();
207        ColumnDetails[] whereColumnDetails = _OptSRESERVEDWORD1206543922searchcondition0.getColumnDetails();
208       _Reference[] ref1 = checkColumnsValidity(whereColumnDetails, tableDetails, serverSession);
209        setKnownReferences(ref1, tableDetails,list);
210       _Reference[] ref2 = _OptSRESERVEDWORD1206543922searchcondition0.checkSemantic(serverSession);
211       _Reference[] ref3 = makeProvisionForKnownReferences(ref2, tableDetails);
212        list.addAll(knownReferences);
213         _Reference[] ref4 =(_Reference[])list.toArray(new _Reference[0]);
214
215         whereColumnDetails = removeUnknownColumnDetailFromWhereClause(whereColumnDetails,tableDetails);
216         columnDetail =GeneralPurposeStaticClass.getJoinOfColumnDetailsAndReferences(whereColumnDetails,ref4);
217         for (int i = 0; i < columnDetail.length; i++) {
218           if(columnDetail[i].getTableDetails()==null)
219             columnDetail[i].setTableDetails(tableDetails);
220         }
221        return GeneralPurposeStaticClass.getJointReferences(ref1, ref3);
222    }
223
224    private _Reference[] makeProvisionForKnownReferences(_Reference[] columns, TableDetails tableDetails) throws DException {
225       ArrayList JavaDoc toReturn = new ArrayList JavaDoc(5);
226       if (columns != null) {
227          int len = columns.length;
228          for (int i = 0; i < len; i++) {
229             if ( (columns[i].getReferenceType() != SimpleConstants.VARIABLECOLUMN) && check(tableDetails, ( (ColumnDetails) columns[i]).getColumnName())) {
230                knownReferences.add(columns[i]);
231
232             } else {
233                toReturn.add(columns[i]);
234             }
235          }
236       }
237       return toReturn.size() > 0 ? (_Reference[]) toReturn.toArray(new _Reference[0]) : null;
238    }
239
240    /**
241     * Set the known references in Arraylist which come from where part
242     * e.g. where t1.ename='ename'
243     */

244    private void setKnownReferences(_Reference[] columns, TableDetails tableDetails,ArrayList JavaDoc alist) throws DException {
245       if (columns != null ) {
246          int len = columns.length;
247          for (int i = 0; i < len; i++) {
248             if ( (columns[i].getReferenceType() != SimpleConstants.VARIABLECOLUMN) && check(tableDetails, ( (ColumnDetails) columns[i]).getColumnName())) {
249                alist.add(columns[i]);
250             }
251          }
252       }
253    }
254
255    private ColumnDetails[] removeUnknownColumnDetailFromWhereClause(ColumnDetails[] cd,TableDetails tableDetails) throws DException{
256      ArrayList JavaDoc listcd =new ArrayList JavaDoc();
257      for (int j = 0, length1 = cd.length; j < length1; ++j) {
258      if ((cd[j].getType() == REFERENCE || cd[j].getUnderLyingReference()) && cd[j].getTable() != null ) {
259        if (cd[j].getTable().equals(tableDetails))
260          listcd.add(cd[j]);
261      }
262    }
263       ColumnDetails[] cdlast = (ColumnDetails[]) listcd.toArray(new ColumnDetails[0]);
264       return cdlast ;
265    }
266
267    private void performChecking(_ServerSession serverSession) throws DException {
268        refToCheck = checkSemantic(serverSession);
269       if (refToCheck != null) {
270          for (int i = 0; i < refToCheck.length; i++) {
271             if (refToCheck[i].getReferenceType() != SimpleConstants.VARIABLECOLUMN) {
272                String JavaDoc targetTableName = _targettable2.getTableDetails().getQualifiedTableName();
273                ColumnDetails columnDetails = ( (ColumnDetails) refToCheck[i]);
274                String JavaDoc[] column_name = columnDetails.getColumnName();
275                if (column_name.length == 1) {
276                   throw new DmlStatementException("DSE1277", new Object JavaDoc[] {targetTableName}
277                                                   , new DException("DSE1130", new Object JavaDoc[] {refToCheck[i].getColumn(), targetTableName}));
278                } else if (column_name.length == 2) {
279                   String JavaDoc tableName = _targettable2.getTableDetails().getQualifiedTableName();
280                   int lastIndexOfDot = tableName.lastIndexOf(".");
281                   tableName = tableName.substring(lastIndexOfDot + 1);
282                   if( aliasName == null || !aliasName.equalsIgnoreCase(column_name[0])){
283                     if (tableName.equalsIgnoreCase(column_name[0])) {
284                       throw new DmlStatementException("DSE1277",
285                                                       new Object JavaDoc[] {targetTableName}
286                                                       ,
287                                                       new DException("DSE1130",
288                           new Object JavaDoc[] {refToCheck[i].getColumn(), targetTableName}));
289                     }
290                     else {
291                       throw new DmlStatementException("DSE1277",
292                                                       new Object JavaDoc[] {targetTableName}
293                                                       ,
294                                                       new DException("DSE1130",
295                           new Object JavaDoc[] {refToCheck[i].getColumn(), column_name[0]}));
296                     }
297                   }
298                } else if (column_name.length == 3) {
299                   String JavaDoc tableName = _targettable2.getTableDetails().getQualifiedTableName();
300                   int lastIndexOfDot = tableName.lastIndexOf(".");
301                   tableName = tableName.substring(lastIndexOfDot + 1);
302                   String JavaDoc schemName = _targettable2.getTableDetails().getSchemaName();
303                   if ( (schemName + "." + tableName).equalsIgnoreCase(column_name[0] + "." + column_name[1])) {
304                      throw new DmlStatementException("DSE1277", new Object JavaDoc[] {targetTableName}
305                          , new DException("DSE1130", new Object JavaDoc[] {refToCheck[i].getColumn(), targetTableName}));
306                   } else {
307                      throw new DmlStatementException("DSE1277", new Object JavaDoc[] {targetTableName}
308                          , new DException("DSE1130", new Object JavaDoc[] {refToCheck[i].getColumn(), column_name[0] + "." + column_name[1]}));
309                   }
310                } else {
311                   if ( (targetTableName).equalsIgnoreCase(column_name[0] + "." + column_name[1] + column_name[2])) {
312                      throw new DmlStatementException("DSE1277", new Object JavaDoc[] {targetTableName}
313                          , new DException("DSE1130", new Object JavaDoc[] {refToCheck[i].getColumn(), targetTableName}));
314                   } else {
315                      throw new DmlStatementException("DSE1277", new Object JavaDoc[] {targetTableName}
316                          , new DException("DSE1130", new Object JavaDoc[] {refToCheck[i].getColumn(), column_name[0] + "." + column_name[1] + "." + column_name[2]}));
317                   }
318                }
319             }
320          }
321       }
322       questionMarks = refToCheck;
323    }
324
325    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
326       return this;
327    }
328
329    public String JavaDoc toString() {
330           StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
331           sb.append(" ");
332           sb.append(_SRESERVEDWORD12065439224);
333           sb.append(" ");
334           if(_OptSRESERVEDWORD12065439223 != null ) {
335           sb.append(_OptSRESERVEDWORD12065439223);
336           }
337           sb.append(" ");
338           sb.append(_targettable2);
339           sb.append(" ");
340           if(_Optcorrelationname1 != null ) {
341           sb.append(_Optcorrelationname1);
342           sb.append(" ");
343           }
344
345           if(_OptSRESERVEDWORD1206543922searchcondition0 != null ) {
346           sb.append(_OptSRESERVEDWORD1206543922searchcondition0);
347           }
348           return sb.toString();
349   }
350
351 }
352
Popular Tags