KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > ddl > schemamanipulation > droptablestatement


1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemamanipulation;
2
3 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
4 import com.daffodilwoods.daffodildb.server.serversystem.*;
5 import com.daffodilwoods.daffodildb.server.sql99.*;
6 import com.daffodilwoods.daffodildb.server.sql99.common.*;
7 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*;
8 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*;
9 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
10 import com.daffodilwoods.daffodildb.server.sql99.dql.tableexpression.fromclause.*;
11 import com.daffodilwoods.daffodildb.server.sql99.token.*;
12 import com.daffodilwoods.daffodildb.utils.parser.*;
13 import com.daffodilwoods.database.general.*;
14 import com.daffodilwoods.database.resource.*;
15
16 public class droptablestatement implements SQLschemamanipulationstatement {
17    public dropbehavior _Optdropbehavior0;
18    public tablename _tablename1;
19    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222;
20    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439223;
21
22    /** @todo algo
23     * initialize the currentSession, globalSession, tableDescriptor;
24     * commit the currentSession
25     * setTableName
26     * a. set name
27     * b. set schema and catalog
28     * c. load table descriptor and schema descriptor
29     * d. ensure table exists
30     * d. ensure the object is not view
31     * validate User rights
32     * Drop Table
33     * a. checkDependencies() -- if drop behaviour is 'RESTRICT'
34     * a. checkTablesDependency -- table shall not be referenced from Referential Constraint of any table.
35     * b. checkViewsDependency -- table shall not be referenced from query expression of any view
36     * c. checkTriggersDependency -- table shall not be referenced from triggered sql-queries of any trigger
37     * d. checkCheckConstraintsDependency -- table shall not be referenced from search condition of any check constraint
38     * e. checkRoutinesDependency -- table shall not be referenced from sql queries of any procedure/routine.
39     * b. revoke privileges given on the table
40     * c. delete Table Descriptor
41     * d. dropTable -- serverSystem
42     * a. dropIndexes
43     * b. dropTable
44     * commit the global session
45     * refresh the dataDictionary and other systems.
46     * */

47    public Object JavaDoc run(Object JavaDoc object) throws DException {
48       _ServerSession currentSession = (_ServerSession) object;
49       TableDescriptor tableDescriptor = new TableDescriptor();
50       setTableName(tableDescriptor, currentSession);
51       ensureIsNotView(tableDescriptor);
52       String JavaDoc schemaOwner = GeneralUtility.getSchemaOwner(tableDescriptor.
53           table_catalog, tableDescriptor.table_schema, currentSession);
54       GeneralUtility.validateUserRights(schemaOwner, currentSession);
55       String JavaDoc dropBehavior = _Optdropbehavior0 == null ? SqlKeywords.RESTRICT :
56           (String JavaDoc) _Optdropbehavior0.run(null);
57       dropTable(tableDescriptor, currentSession, dropBehavior, schemaOwner);
58
59       /** @todo commit is fired after refresh method place that before refresh
60        * change has to be done in drop index statement */

61       refreshServerSystem(currentSession, tableDescriptor.getQualifiedTableName());
62       return null;
63    }
64
65    public void refreshServerSystem(_ServerSession currentSession,
66                                    QualifiedIdentifier tableName) throws
67        DException {
68       _ServerSession systemSession = currentSession.getSystemServerSession();
69       systemSession.refreshTriggers(tableName);
70       systemSession.deleteTable(tableName, true);
71       dropIndexes(tableName, currentSession);
72       if (currentSession.getDbVersion() >= 3.0)
73          dropFullTextIndexes(tableName, currentSession);
74       systemSession.dropTable(tableName);
75    }
76
77    private void setTableName(TableDescriptor tableDescriptor,
78                              _ServerSession currentSession) throws DException {
79       tableDescriptor.table_catalog = _tablename1.getCatalogName();
80       tableDescriptor.table_schema = _tablename1.getSchemaName();
81       tableDescriptor.table_name = _tablename1.getTableName();
82       if (tableDescriptor.table_schema == null) {
83          tableDescriptor.table_schema = currentSession.getCurrentSchema();
84       }
85       if (tableDescriptor.table_catalog == null) {
86          tableDescriptor.table_catalog = currentSession.getCurrentCatalog();
87       }
88       try {
89          tableDescriptor.load(currentSession);
90       } catch (DException ex) {
91          throw new DException("DSE7009",
92                               new Object JavaDoc[] {tableDescriptor.getQualifiedTableName().
93                               getIdentifier()});
94       }
95
96    }
97
98    private void ensureIsNotView(TableDescriptor tableDescriptor) throws
99        DException {
100       if (tableDescriptor.table_type.equalsIgnoreCase(SqlKeywords.VIEW)) {
101          throw new DException("DSE930", new Object JavaDoc[] {tableDescriptor.getTableName()});
102       }
103    }
104
105    /**
106     * Drop Table
107     * b. revoke privileges given on the table
108     * c. delete Table Descriptor
109     * d. dropTable -- serverSystem
110     * a. dropIndexes
111     * b. dropTable
112     */

113
114    public void dropTable(TableDescriptor tableDescriptor,
115                          _ServerSession currentSession,
116                          String JavaDoc dropBehavior, String JavaDoc schemaOwner
117                          ) throws DException {
118       if (dropBehavior.equalsIgnoreCase(SqlKeywords.RESTRICT)) {
119          checkDependencies(tableDescriptor, currentSession);
120       }
121       revokePrivileges(tableDescriptor, currentSession, schemaOwner);
122       tableDescriptor.delete(currentSession);
123    }
124
125    private void checkDependencies(TableDescriptor tableDescriptor,
126                                   _ServerSession currentSession) throws DException {
127       checkTableDependency(tableDescriptor, currentSession);
128       checkViewsDependency(tableDescriptor, currentSession);
129       checkTriggerDependency(tableDescriptor, currentSession);
130       checkCheckConstraintDependency(tableDescriptor, currentSession);
131       if(currentSession.getDbVersion() >= 4.0){
132          checkRoutineDependency(tableDescriptor, currentSession);
133       }
134    }
135
136    private void checkTriggerDependency(TableDescriptor tableDescriptor,
137                                        _ServerSession currentSession) throws
138        DException {
139       QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromTriggers(
140           currentSession);
141       if (ob != null) {
142          throw new DException("DSE8011",
143                               new Object JavaDoc[] {ob.getIdentifier(),
144                               tableDescriptor.getQualifiedTableName().
145                               getIdentifier()}); //966
146
}
147    }
148
149    private void checkRoutineDependency(TableDescriptor tableDescriptor,
150                                        _ServerSession currentSession) throws
151        DException {
152       QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromRoutines(
153           currentSession);
154       if (ob != null) {
155          throw new DException("DSE8201",
156                               new Object JavaDoc[] {ob.getIdentifier(),
157                               tableDescriptor.getQualifiedTableName().
158                               getIdentifier()});
159       }
160    }
161
162    private void checkCheckConstraintDependency(TableDescriptor tableDescriptor,
163                                                _ServerSession currentSession) throws
164        DException {
165       QualifiedIdentifier ob = tableDescriptor.
166           isTableReferencedFromCheckConstraints(currentSession);
167       if (ob != null) {
168          throw new DException("DSE8012",
169                               new Object JavaDoc[] {ob.getIdentifier(),
170                               tableDescriptor.getQualifiedTableName().
171                               getIdentifier()}); //964
172
}
173    }
174
175    private void checkTableDependency(TableDescriptor tableDescriptor,
176                                      _ServerSession currentSession) throws
177        DException {
178       QualifiedIdentifier ob = tableDescriptor.
179           isTableReferencedFromReferentialConstraints(currentSession);
180       if (ob != null) {
181          throw new DException("DSE8013",
182                               new Object JavaDoc[] {ob.getIdentifier(),
183                               tableDescriptor.getQualifiedTableName().
184                               getIdentifier()}); //967
185
}
186    }
187
188    private void checkViewsDependency(TableDescriptor tableDescriptor,
189                                      _ServerSession currentSession) throws
190        DException {
191       QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromViews(
192           currentSession);
193       if (ob != null) {
194          throw new DException("DSE8010",
195                               new Object JavaDoc[] {ob.getIdentifier(),
196                               tableDescriptor.getQualifiedTableName().
197                               getIdentifier()}); //967
198
}
199    }
200
201    private void revokePrivileges(TableDescriptor tableDes,
202                                  _ServerSession currentSession,
203                                  String JavaDoc schemaOwner) throws DException {
204       String JavaDoc query = QueryMaker.getDropTableRevokeQuery(tableDes.
205           getQualifiedTableName(), schemaOwner);
206       revokeprivilegestatement _revokePrivilegesStatement = (
207           revokeprivilegestatement) Parser.parseQuery(query);
208       _revokePrivilegesStatement.setIsSelfInitiated(false);
209       _revokePrivilegesStatement.run(currentSession.getSystemServerSession());
210    }
211
212    private void dropIndexes(QualifiedIdentifier tableName,
213                             _ServerSession currentSession) throws
214        DException {
215       DataDictionary dd = (DataDictionary) currentSession.getDataDictionary();
216       _Executer executer = dd.getPreparedStatementGetter().getIndexInfoExecuter();
217       _SelectQueryIterator iter = (_SelectQueryIterator) executer.executeForFresh(new Object JavaDoc[] {
218           tableName.catalog, tableName.schema,
219           tableName.name});
220       if (!iter.first()) {
221          return;
222       }
223       do {
224          IndexDescriptor indexDescriptor = new IndexDescriptor();
225          indexDescriptor.loadDataFromRecord(iter);
226          indexDescriptor.loadColumnDescriptors(currentSession);
227          dropindexstatement dropIndex = new dropindexstatement();
228          dropIndex.dropIndex(indexDescriptor, currentSession);
229       } while (iter.next());
230    }
231
232    private void dropFullTextIndexes(QualifiedIdentifier tableName,
233                                     _ServerSession currentSession) throws
234        DException {
235       DataDictionary dd = (DataDictionary) currentSession.getDataDictionary();
236       _Executer executer = dd.getPreparedStatementGetter().getFullTextIndexExecuter();
237       _SelectQueryIterator iter = (_SelectQueryIterator) executer.executeForFresh(new Object JavaDoc[] {
238           tableName.catalog, tableName.schema,
239           tableName.name});
240       if (!iter.first())
241          return;
242       do {
243          FullTextIndexDescriptor indexDescriptor = new FullTextIndexDescriptor();
244          indexDescriptor.loadDataFromRecord(iter);
245          indexDescriptor.loadColumnDescriptors(currentSession);
246          dropfulltextindexstatement dropIndex = new dropfulltextindexstatement();
247          dropIndex.dropIndex(indexDescriptor, currentSession);
248       } while (iter.next());
249    }
250
251    public String JavaDoc toString() {
252       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
253       sb.append(" ");
254       sb.append(_SRESERVEDWORD12065439223);
255       sb.append(" ");
256       sb.append(_SRESERVEDWORD12065439222);
257       sb.append(" ");
258       sb.append(_tablename1);
259       sb.append(" ");
260       if (_Optdropbehavior0 != null) {
261          sb.append(_Optdropbehavior0);
262       }
263       return sb.toString();
264    }
265
266    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
267       return this;
268    }
269 }
270
Popular Tags