KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemamanipulation;
2
3 import java.util.*;
4
5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
6 import com.daffodilwoods.daffodildb.server.serversystem.*;
7 import com.daffodilwoods.daffodildb.server.sql99.common.*;
8 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*;
9 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*;
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 dropviewstatement implements SQLschemamanipulationstatement {
17    public dropbehavior _dropbehavior0;
18    public tablename _tablename1;
19    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222;
20    public SNONRESERVEDWORD136444255 _OptSNONRESERVEDWORD1364442553;
21    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439224;
22
23    /** @todo
24     * initialize the currentSession, globalSession, viewDescriptor;
25     * commit the currentSession
26     * setViewName
27     * a. set name
28     * b. set catalog and schema
29     * c. load schema and view descriptor
30     * d. ensure that view exists with the specified name
31     * validate User privileges.
32     * DropView
33     * a. check Dependencies -- if drop behavior is restrict
34     * b. checkViewsDependency -- view shall not be referenced from query expression of any view
35     * c. checkTriggersDependency -- view shall not be referenced from triggered sql-queries of any trigger
36     * d. checkCheckConstraintsDependency -- view shall not be referenced from search condition of any check constraint
37     * e. checkRoutinesDependency -- view shall not be referenced from sql queries of any procedure/routine.
38     * b. revoke the privileges given on the view
39     * c. drop materialized Table -- if view is materialized one
40     * a. Load the table Descriptor of materialized table
41     * b. create a new droptableStatement object
42     * b. call the dropTable method
43     * c. delete view descriptor
44     * commit the global session
45     * refresh DataDictionary
46     * */

47    public Object JavaDoc run(Object JavaDoc object) throws DException {
48       _ServerSession currentSession = ( (_ServerSession) object);
49       ViewDescriptor viewDescriptor = new ViewDescriptor();
50       setViewName(currentSession, viewDescriptor);
51       if (viewDescriptor.table_name.equalsIgnoreCase("dual")) {
52              if (viewDescriptor.table_schema.equalsIgnoreCase("users")) {
53                 if (viewDescriptor.table_catalog.equalsIgnoreCase("users")) {
54                    throw new DException("DSE12", null);
55                 }
56              }
57           }
58       checkForMaterialized(viewDescriptor);
59       String JavaDoc schemaOwner = GeneralUtility.getSchemaOwner(viewDescriptor.
60           table_catalog, viewDescriptor.table_schema, currentSession);
61       GeneralUtility.validateUserRights(schemaOwner, currentSession);
62       String JavaDoc dropBehavior = (String JavaDoc) _dropbehavior0.run(null);
63       dropView(viewDescriptor, currentSession, dropBehavior, schemaOwner);
64       refreshServerSystem(currentSession, viewDescriptor);
65       return null;
66    }
67
68    public void refreshServerSystem(_ServerSession currentSession,
69                                    ViewDescriptor viewDescriptor) throws
70        DException {
71       currentSession.deleteTable(viewDescriptor.tableDescriptor.
72                                  getQualifiedTableName(), false);
73       refreshDataDictionary(currentSession, viewDescriptor);
74    }
75
76    private void refreshDataDictionary(_ServerSession currentSession,
77                                       ViewDescriptor viewDescriptor) throws
78        DException {
79       if (viewDescriptor.materialized_table_name != null) {
80          DataDictionary dd = (DataDictionary) currentSession.getDataDictionary();
81          ArrayList tablesUsed = viewDescriptor.tablesUsed;
82          if (tablesUsed != null) {
83             QualifiedIdentifier materializedTable = new QualifiedIdentifier(
84                 viewDescriptor.table_catalog, viewDescriptor.table_schema,
85                 viewDescriptor.materialized_table_name);
86             for (int i = 0; i < tablesUsed.size(); i++) {
87                String JavaDoc[] tableName = (String JavaDoc[]) tablesUsed.get(i);
88                dd.removeMaterializedTable(new QualifiedIdentifier(tableName[0],
89                    tableName[1], tableName[2]), materializedTable);
90             }
91          }
92       }
93    }
94
95    private void checkForMaterialized(ViewDescriptor viewDescriptor) throws
96        DException {
97       if (_OptSNONRESERVEDWORD1364442553 == null &&
98           viewDescriptor.materialized_table_name != null) {
99          throw new DException("DSE5101",
100                               new Object JavaDoc[] {viewDescriptor.tableDescriptor.
101                               getQualifiedTableName()});
102       }
103       if (_OptSNONRESERVEDWORD1364442553 != null &&
104           viewDescriptor.materialized_table_name == null) {
105          throw new DException("DSE5102",
106                               new Object JavaDoc[] {viewDescriptor.tableDescriptor.
107                               getQualifiedTableName()});
108       }
109    }
110
111    private void setViewName(_ServerSession currentSession,
112                             ViewDescriptor viewDescriptor) throws DException {
113       TableDescriptor tableDescriptor = new TableDescriptor();
114       tableDescriptor.table_catalog = _tablename1.getCatalogName();
115       tableDescriptor.table_schema = _tablename1.getSchemaName();
116       tableDescriptor.table_name = _tablename1.getTableName();
117       if (tableDescriptor.table_schema == null) {
118          tableDescriptor.table_schema = currentSession.getCurrentSchema();
119       }
120       if (tableDescriptor.table_catalog == null) {
121          tableDescriptor.table_catalog = currentSession.getCurrentCatalog();
122       }
123       try {
124          tableDescriptor.load(currentSession);
125       } catch (DException ex) {
126          throw new DException("DSE7010", new Object JavaDoc[] {_tablename1.getTableName()});
127       }
128       if (tableDescriptor.table_catalog.equalsIgnoreCase(SystemTables.systemCatalog)) {
129          throw new DException("DSE12", null);
130       }
131       tableDescriptor.loadSchemaDescriptor(currentSession);
132       viewDescriptor.tableDescriptor = tableDescriptor;
133       viewDescriptor.setViewName();
134       viewDescriptor.load(currentSession);
135    }
136
137    public ArrayList dropView(ViewDescriptor viewDescriptor,
138                              _ServerSession currentSession,
139                              String JavaDoc dropBehavior, String JavaDoc schemaOwner) throws
140        DException {
141       if (dropBehavior.equalsIgnoreCase(SqlKeywords.RESTRICT)) {
142          checkDependencies(viewDescriptor.tableDescriptor, currentSession);
143       }
144       ArrayList revokedObjects = revokePrivileges(viewDescriptor, currentSession, schemaOwner);
145       if (viewDescriptor.materialized_table_name != null) {
146          dropMaterailizedTable(viewDescriptor, currentSession, dropBehavior,
147                                schemaOwner);
148       }
149       viewDescriptor.delete(currentSession);
150       return revokedObjects;
151    }
152
153    private void checkDependencies(TableDescriptor tableDescriptor,
154                                   _ServerSession currentSession) throws
155        DException {
156       checkViewsDependency(tableDescriptor, currentSession);
157       checkTriggerDependency(tableDescriptor, currentSession);
158       checkCheckConstraintDependency(tableDescriptor, currentSession);
159       if(currentSession.getDbVersion() >= 4.0){
160          checkRoutineDependency(tableDescriptor, currentSession);
161       }
162    }
163
164    private void checkTriggerDependency(TableDescriptor tableDescriptor,
165                                        _ServerSession currentSession) throws
166        DException {
167       QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromTriggers(
168           currentSession);
169       if (ob != null) {
170          throw new DException("DSE8015", new Object JavaDoc[] {ob.getIdentifier(),
171                               tableDescriptor.getQualifiedTableName().
172                               getIdentifier()});
173       }
174    }
175
176    private void checkRoutineDependency(TableDescriptor tableDescriptor,
177                                        _ServerSession currentSession) throws
178        DException {
179       QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromRoutines(
180           currentSession);
181       if (ob != null) {
182          throw new DException("DSE8202", new Object JavaDoc[] {ob.getIdentifier(),
183                               tableDescriptor.getQualifiedTableName().
184                               getIdentifier()});
185       }
186    }
187
188    private void checkCheckConstraintDependency(TableDescriptor tableDescriptor,
189                                                _ServerSession currentSession) throws
190        DException {
191       QualifiedIdentifier ob = tableDescriptor.
192           isTableReferencedFromCheckConstraints(
193           currentSession);
194       if (ob != null) {
195          throw new DException("DSE8012", new Object JavaDoc[] {ob.getIdentifier(),
196                               tableDescriptor.getQualifiedTableName().
197                               getIdentifier()}
198                               );
199       }
200    }
201
202    private void checkViewsDependency(TableDescriptor tableDescriptor,
203                                      _ServerSession serverSession) throws
204        DException {
205       QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromViews(
206           serverSession);
207       if (ob != null) {
208          throw new DException("DSE8014", new Object JavaDoc[] {ob.getIdentifier(),
209                               tableDescriptor.getQualifiedTableName().
210                               getIdentifier()});
211       }
212    }
213
214    private ArrayList revokePrivileges(ViewDescriptor viewDes,
215                                       _ServerSession serverSession,
216                                       String JavaDoc schemaOwner) throws DException {
217       String JavaDoc query = QueryMaker.getDropTableRevokeQuery(viewDes.tableDescriptor.
218           getQualifiedTableName(),
219           schemaOwner);
220       revokeprivilegestatement _revokePrivilegesStatement = (
221           revokeprivilegestatement) Parser.parseQuery(query);
222       _revokePrivilegesStatement.setIsSelfInitiated(false);
223       _revokePrivilegesStatement.run(serverSession.getSystemServerSession());
224       return _revokePrivilegesStatement.getAlreadyAbondenedObject();
225    }
226
227    private void dropMaterailizedTable(ViewDescriptor viewDescriptor,
228                                       _ServerSession serverSession,
229                                       String JavaDoc dropBehaviour, String JavaDoc schemaOwner) throws
230        DException {
231       TableDescriptor materializedTableDescriptor = new TableDescriptor();
232       materializedTableDescriptor.table_catalog = viewDescriptor.table_catalog;
233       materializedTableDescriptor.table_schema = viewDescriptor.table_schema;
234       materializedTableDescriptor.table_name = viewDescriptor.
235           materialized_table_name;
236       materializedTableDescriptor.load(serverSession);
237       materializedTableDescriptor.schemaDescriptor = viewDescriptor.
238           tableDescriptor.schemaDescriptor;
239       QualifiedIdentifier matTableName = materializedTableDescriptor.
240           getQualifiedTableName();
241       String JavaDoc query = QueryMaker.makeDropTableQuery(matTableName, dropBehaviour);
242       droptablestatement _droptableStatement = (droptablestatement) Parser.
243           parseQuery(query);
244       _droptableStatement.dropTable(materializedTableDescriptor, serverSession,
245                                     dropBehaviour, schemaOwner);
246       _droptableStatement.refreshServerSystem(serverSession, matTableName);
247    }
248
249    /**
250     * used while Abondening views
251     */

252
253    public void load(_ServerSession serverSession, ViewDescriptor viewDes) throws
254        DException {
255       TableDescriptor tableDes = new TableDescriptor(viewDes.table_catalog,
256           viewDes.table_schema, viewDes.table_name);
257       tableDes.load(serverSession);
258       viewDes.tableDescriptor = tableDes;
259       viewDes.tableDescriptor.loadSchemaDescriptor(serverSession);
260    }
261
262    public String JavaDoc toString() {
263       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
264       sb.append(" ");
265       sb.append(_SRESERVEDWORD12065439224);
266       sb.append(" ");
267       if (_OptSNONRESERVEDWORD1364442553 != null) {
268          sb.append(_OptSNONRESERVEDWORD1364442553);
269       }
270       sb.append(" ");
271       sb.append(_SRESERVEDWORD12065439222);
272       sb.append(" ");
273       sb.append(_tablename1);
274       sb.append(" ");
275       sb.append(_dropbehavior0);
276       return sb.toString();
277    }
278
279    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
280       return this;
281    }
282
283 }
284
Popular Tags