KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > ddl > schemadefinition > triggerdefinition


1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition;
2
3 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
4 import com.daffodilwoods.daffodildb.server.serversystem.*;
5 import com.daffodilwoods.daffodildb.server.sql99.common.*;
6 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*;
7 import com.daffodilwoods.daffodildb.server.sql99.dql.tableexpression.fromclause.*;
8 import com.daffodilwoods.daffodildb.server.sql99.token.*;
9 import com.daffodilwoods.database.general.*;
10 import com.daffodilwoods.database.resource.*;
11
12 public class triggerdefinition implements SQLschemadefinitionstatement, schemaelement {
13    public triggeredaction _triggeredaction0;
14    public SRESERVEDWORD1206543922oldornewvaluesaliaslist
15        _OptSRESERVEDWORD1206543922oldornewvaluesaliaslist1;
16    public tablename _tablename2;
17    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439223;
18    public triggerevent _triggerevent4;
19    public triggeractiontime _triggeractiontime5;
20    public triggername _triggername6;
21    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439227;
22    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439228;
23
24    private SchemaDescriptor schemaDescriptor;
25    public void setSchemaDescriptor(_Descriptor schemaDes0) throws
26        DException {
27       schemaDescriptor = (SchemaDescriptor) schemaDes0;
28    }
29
30    /** @todo algo
31     * initialise currentUserSession
32     * get and set trigger name
33     * check and set schema and catalog name
34     * set trigger table
35     * check user rights
36     * store Trigger Properties
37     * a. Trigger event type
38     * b. Trigger action time
39     * c. Trigger alias used
40     * Triggerred Stataments checking
41     * a. semantic checking of when condition -- if given
42     * b. semantic chcecking of triggerred statements
43     * c. storing Tables and column included in when condition and triggered
44     * statements
45     * save trigger descriptor
46     * Refreshing data dictionary for the trigger
47     *
48     * remaining work
49     * storing Tables Included In Triggerred statement and when condition
50     * storing Columns Included In Triggerred statement and when condition
51     * */

52    public Object JavaDoc run(Object JavaDoc object) throws com.daffodilwoods.database.resource.
53
       DException {
54       _ServerSession currentSession = ( (_ServerSession) object);
55       boolean isIndependentStt = schemaDescriptor == null;
56       TriggerDescriptor triggerDescriptor = new TriggerDescriptor();
57       setTriggerTable(triggerDescriptor, currentSession);
58       setTriggerName(currentSession, triggerDescriptor);
59       validateUserPrivilege(triggerDescriptor, currentSession, isIndependentStt);
60       storeTriggerProperties(currentSession, triggerDescriptor);
61       triggerDescriptor.save(currentSession);
62       if (isIndependentStt) {
63          /**
64           * this required only when it is independent statement
65           */

66          currentSession.getDataDictionary().getDDSTriggerOperation().addTrigger(
67              triggerDescriptor.tableDescriptor.getQualifiedTableName(),
68              triggerDescriptor.action_orientation.equalsIgnoreCase(SqlKeywords.ROW),
69              triggerDescriptor);
70       }
71       currentSession.refreshTriggers(triggerDescriptor.tableDescriptor.getQualifiedTableName());
72       return null;
73    }
74
75    private void setTriggerName(_ServerSession currentSession,
76                                TriggerDescriptor triggerDescriptor) throws
77        DException {
78       _triggername6.setTiggerName(triggerDescriptor);
79       checkSchema(triggerDescriptor, currentSession);
80    }
81
82  /* private void checkSchema(TriggerDescriptor triggerDescriptor,
83                             _ServerSession currentSession) throws DException {
84       if (schemaDescriptor != null) {
85          if (triggerDescriptor.trigger_catalog != null) {
86             if (!triggerDescriptor.trigger_catalog.equalsIgnoreCase(
87                 schemaDescriptor.
88                 catalog_name)) {
89                throw new DException("DSE228", null);
90             }
91          } else {
92             triggerDescriptor.trigger_catalog = schemaDescriptor.catalog_name;
93
94          }
95          if (triggerDescriptor.trigger_schema != null) {
96             if (!triggerDescriptor.trigger_schema.equalsIgnoreCase(schemaDescriptor.
97                 schema_name)) {
98                throw new DException("DSE905", null);
99             }
100          } else {
101             triggerDescriptor.trigger_schema = schemaDescriptor.schema_name;
102          }
103       } else {
104          if (triggerDescriptor.trigger_catalog == null) {
105             triggerDescriptor.trigger_catalog = currentSession.getCurrentCatalog();
106          }
107          if (triggerDescriptor.trigger_schema == null) {
108             triggerDescriptor.trigger_schema = currentSession.getCurrentSchema();
109          }
110          schemaDescriptor = new SchemaDescriptor();
111          schemaDescriptor.catalog_name = triggerDescriptor.trigger_catalog;
112          schemaDescriptor.schema_name = triggerDescriptor.trigger_schema;
113          schemaDescriptor.load(currentSession);
114       }
115    }
116
117    private void setTriggerTable(TriggerDescriptor triggerDescriptor,
118                                 _ServerSession connection) throws DException {
119       triggerDescriptor.event_object_catalog = _tablename2.getCatalogName();
120       triggerDescriptor.event_object_schema = _tablename2.getSchemaName();
121       triggerDescriptor.event_object_name = _tablename2.getTableName();
122       if (triggerDescriptor.event_object_schema == null) {
123          triggerDescriptor.event_object_schema = triggerDescriptor.trigger_schema;
124       }
125       if (triggerDescriptor.event_object_catalog == null) {
126          triggerDescriptor.event_object_catalog = triggerDescriptor.
127              trigger_catalog;
128       }
129       TableDescriptor tableDescriptor = new TableDescriptor();
130       tableDescriptor.table_catalog = triggerDescriptor.event_object_catalog;
131       tableDescriptor.table_schema = triggerDescriptor.event_object_schema;
132       tableDescriptor.table_name = triggerDescriptor.event_object_name;
133       tableDescriptor.load(connection);
134       if (tableDescriptor.table_type.equals(SqlKeywords.VIEW)) {
135          throw new DException("DSE1014", null);
136       }
137       triggerDescriptor.tableDescriptor = tableDescriptor;
138    }*/

139
140    /**
141     * a. current enabled authorization identifier should be schema owner
142     * b. current enabled authorization identifier should have trigger privilege on table
143     */

144    private void validateUserPrivilege(TriggerDescriptor triggerDescriptor,
145                                       _ServerSession currentSession,
146                                       boolean isIndependentStt) throws
147        DException {
148       String JavaDoc currentUser = currentSession.getCurrentUser();
149       if (isIndependentStt &&
150           !currentSession.isEnabledAuthorizationIdentifier(schemaDescriptor.schema_owner, true)) {
151          throw new DException("DSE12", null);
152       }
153       QualifiedIdentifier tableName = triggerDescriptor.tableDescriptor.
154           getQualifiedTableName();
155       if (!currentSession.getDataDictionary().getPrivilegeCharacteristics(currentUser, _PrivilegeCharacteristics.AUTHORIZATION_ROLE).getPrivilegeTable(tableName).
156           hasTablePrivileges(_PrivilegeTable.TRIGGER)) {
157          throw new DException("DSE27", null);
158       }
159    }
160
161    private void storeTriggerProperties(_ServerSession currentSession,
162                                        TriggerDescriptor triggerDescriptor) throws
163        DException {
164       triggerDescriptor.condition_timing = (String JavaDoc) _triggeractiontime5.run(null);
165       setTriggerEvent(triggerDescriptor);
166       _triggeredaction0.setTriggerDescriptor(triggerDescriptor);
167       _triggeredaction0.setTriggerActionOrientation();
168       setReferences(triggerDescriptor);
169       _triggeredaction0.validateTriggeredAction(currentSession);
170       _triggeredaction0.setTriggerSearchCondition();
171       _triggeredaction0.setTriggeredStatement(currentSession);
172       /** @todo
173        * Make proper use of action order in case of getting TriggerCharacteristcis
174        * */

175       triggerDescriptor.setActionOrder(currentSession);
176       _triggeredaction0.setTablesIncludedAndColumnIncluded(currentSession);
177    }
178
179    private void setTriggerEvent(TriggerDescriptor triggerDescriptor) throws
180        DException {
181       triggerDescriptor.event_manipulation = (String JavaDoc) _triggerevent4.run(triggerDescriptor);
182    }
183
184    private void setReferences(TriggerDescriptor triggerDescriptor) throws
185        DException {
186       if (_OptSRESERVEDWORD1206543922oldornewvaluesaliaslist1 != null) {
187          _OptSRESERVEDWORD1206543922oldornewvaluesaliaslist1.setTriggerDescriptor(
188              triggerDescriptor);
189          _OptSRESERVEDWORD1206543922oldornewvaluesaliaslist1.run(null);
190       }
191    }
192
193    public String JavaDoc toString() {
194       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
195       sb.append(" ");
196       sb.append(_SRESERVEDWORD12065439228);
197       sb.append(" ");
198       sb.append(_SRESERVEDWORD12065439227);
199       sb.append(" ");
200       sb.append(_triggername6);
201       sb.append(" ");
202       sb.append(_triggeractiontime5);
203       sb.append(" ");
204       sb.append(_triggerevent4);
205       sb.append(" ");
206       sb.append(_SRESERVEDWORD12065439223);
207       sb.append(" ");
208       sb.append(_tablename2);
209       sb.append(" ");
210       if (_OptSRESERVEDWORD1206543922oldornewvaluesaliaslist1 != null) {
211          sb.append(_OptSRESERVEDWORD1206543922oldornewvaluesaliaslist1);
212       }
213       sb.append(" ");
214       sb.append(_triggeredaction0);
215       return sb.toString();
216    }
217
218    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
219       return this;
220    }
221
222    private void checkSchema(TriggerDescriptor triggerDescriptor,
223                             _ServerSession currentSession) throws DException {
224       if (schemaDescriptor != null) {
225          if (triggerDescriptor.trigger_catalog != null) {
226             if (!triggerDescriptor.trigger_catalog.equalsIgnoreCase(
227                 schemaDescriptor.catalog_name)) {
228                throw new DException("DSE228", null);
229             }
230          } else {
231             triggerDescriptor.trigger_catalog = schemaDescriptor.catalog_name;
232
233          }
234          if (triggerDescriptor.trigger_schema != null) {
235             if (!triggerDescriptor.trigger_schema.equalsIgnoreCase(schemaDescriptor.
236                 schema_name)) {
237                throw new DException("DSE905", null);
238             }
239          } else {
240             triggerDescriptor.trigger_schema = schemaDescriptor.schema_name;
241          }
242       } else {
243          if (triggerDescriptor.trigger_catalog == null) {
244             triggerDescriptor.trigger_catalog = triggerDescriptor.event_object_catalog;
245          }
246          if (triggerDescriptor.trigger_schema == null) {
247             triggerDescriptor.trigger_schema = triggerDescriptor.event_object_schema;
248          }
249          schemaDescriptor = new SchemaDescriptor();
250          schemaDescriptor.catalog_name = triggerDescriptor.trigger_catalog;
251          schemaDescriptor.schema_name = triggerDescriptor.trigger_schema;
252          schemaDescriptor.load(currentSession);
253       }
254    }
255
256    private void setTriggerTable(TriggerDescriptor triggerDescriptor,
257                                 _ServerSession connection) throws DException {
258       triggerDescriptor.event_object_catalog = _tablename2.getCatalogName();
259       triggerDescriptor.event_object_schema = _tablename2.getSchemaName();
260       triggerDescriptor.event_object_name = _tablename2.getTableName();
261       if (triggerDescriptor.event_object_schema == null) {
262          triggerDescriptor.event_object_schema = connection.getCurrentSchema();
263       }
264       if (triggerDescriptor.event_object_catalog == null) {
265          triggerDescriptor.event_object_catalog = connection.getCurrentCatalog();
266       }
267       TableDescriptor tableDescriptor = new TableDescriptor();
268       tableDescriptor.table_catalog = triggerDescriptor.event_object_catalog;
269       tableDescriptor.table_schema = triggerDescriptor.event_object_schema;
270       tableDescriptor.table_name = triggerDescriptor.event_object_name;
271       tableDescriptor.load(connection);
272       if (tableDescriptor.table_type.equals(SqlKeywords.VIEW)) {
273          throw new DException("DSE1014", null);
274       }
275       triggerDescriptor.tableDescriptor = tableDescriptor;
276    }
277 }
278
Popular Tags