KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemamanipulation;
2
3 import java.math.*;
4 import java.util.*;
5
6 import com.daffodilwoods.daffodildb.server.serversystem.*;
7 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*;
8 import com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition.*;
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.database.resource.*;
13
14 public class altersequencestatement implements SQLschemamanipulationstatement {
15    public sequenceincrementer[] _OptRepsequenceincrementer0;
16    public sequenceincrementer _sequenceincrementer1;
17    public localorschemaqualifiedname _localorschemaqualifiedname2;
18    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439223;
19    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439224;
20
21    public Object JavaDoc run(Object JavaDoc object) throws DException {
22       _ServerSession currentSession = (_ServerSession) object;
23       SequenceNumberDescriptor sequenceDescriptor = new SequenceNumberDescriptor();
24       setSequenceName(currentSession, sequenceDescriptor);
25       String JavaDoc schemaOwner = GeneralUtility.getSchemaOwner(sequenceDescriptor.
26           sequence_catalog, sequenceDescriptor.sequence_schema, currentSession);
27       GeneralUtility.validateUserRights(schemaOwner, currentSession);
28       executeAndStoreValues(currentSession, sequenceDescriptor);
29       refreshServerSystem(currentSession, sequenceDescriptor);
30       return null;
31
32    }
33
34    private void refreshServerSystem(_ServerSession currentSession,
35                                     SequenceNumberDescriptor sequenceDescriptor) throws
36        DException {
37       currentSession.getSequenceManager().removeSequence(sequenceDescriptor.
38           getQualifiedName());
39    }
40
41    /* initializes the sequence name in the sequenceNumbersDescriptor */
42    private void setSequenceName(_ServerSession currentSession,
43                                 SequenceNumberDescriptor sequenceDescriptor) throws
44        DException {
45       sequenceDescriptor.sequence_catalog = _localorschemaqualifiedname2.
46           getCatalogName();
47       sequenceDescriptor.sequence_schema = _localorschemaqualifiedname2.
48           getSchemaName();
49       if (sequenceDescriptor.sequence_catalog == null) {
50          sequenceDescriptor.sequence_catalog = currentSession.getCurrentCatalog();
51       }
52       if (sequenceDescriptor.sequence_schema == null) {
53          sequenceDescriptor.sequence_schema = currentSession.getCurrentSchema();
54       }
55       sequenceDescriptor.sequence_name = _localorschemaqualifiedname2.
56           getIdentifierName();
57       sequenceDescriptor.load(currentSession);
58    }
59
60    /* - executes the OptsequencestarterunsignedintegermaxvaluesequenceminvaluesequencecycleinsequencesequenceorderRepOptsequencestarterunsignedintegermaxvaluesequenceminvaluesequencecycleinsequencesequenceorder0
61        - gets All the options, checks for their duplicacy
62          and initializes them in the sequence Descriptor
63        - if any option reoccurs it throws exception
64        - stores the details of the altersequencesattement in the SequenceNumberDescriptor
65     */

66    private void executeAndStoreValues(_ServerSession serverSession,
67                                       SequenceNumberDescriptor
68                                       sequenceDescriptor) throws DException {
69       ArrayList columnsList = new ArrayList();
70       ArrayList valuesList = new ArrayList();
71       initailizeRespectiveOption(sequenceDescriptor, _sequenceincrementer1,
72                                  columnsList, valuesList);
73       if (_OptRepsequenceincrementer0 != null) {
74          sequenceincrementer options[] = _OptRepsequenceincrementer0;
75          if (options != null) {
76             for (int i = 0; i < options.length; i++) {
77                initailizeRespectiveOption(sequenceDescriptor, options[i],
78                                           columnsList, valuesList);
79             }
80          }
81       }
82       checkValuesValidity(sequenceDescriptor);
83       Object JavaDoc[] updatedValues = valuesList.toArray();
84       int[] columnIndexes = new int[columnsList.size()];
85       for (int i = 0, size = columnsList.size(); i < size; i++) {
86          columnIndexes[i] = columnsList.get(i).hashCode();
87       }
88       sequenceDescriptor.update(serverSession, columnIndexes, updatedValues);
89
90    }
91
92    private void initailizeRespectiveOption(SequenceNumberDescriptor
93                                            sequenceDescriptor,
94                                            sequenceincrementer optionalValue,
95                                            ArrayList columnsList,
96                                            ArrayList valuesList) throws
97        DException {
98       if (optionalValue instanceof
99           SNONRESERVEDWORD136444255SRESERVEDWORD1206543922suinteger) {
100          SNONRESERVEDWORD136444255SRESERVEDWORD1206543922suinteger
101              _IncrementedByUnsignedInteger = (
102              SNONRESERVEDWORD136444255SRESERVEDWORD1206543922suinteger)
103              optionalValue;
104          Integer JavaDoc incrementColumn = new Integer JavaDoc(SystemTablesFields.
105                                                sequence_number_increment_by);
106          if (columnsList.contains(incrementColumn)) {
107             throw new DException("DSE5507", new Object JavaDoc[] {"incrementby"});
108          }
109          sequenceDescriptor.increment_by = ( (BigDecimal)
110                                             _IncrementedByUnsignedInteger.run(null)).
111              longValue();
112          if (sequenceDescriptor.increment_by == 0) {
113             throw new DException("DSE5508", new Object JavaDoc[] {null});
114          }
115          columnsList.add(incrementColumn);
116          valuesList.add(new Long JavaDoc(sequenceDescriptor.increment_by));
117       } else if (optionalValue instanceof SNONRESERVEDWORD136444255suinteger) {
118          SNONRESERVEDWORD136444255suinteger _maxMinValueSequence = (
119              SNONRESERVEDWORD136444255suinteger) optionalValue;
120          String JavaDoc maxMinSequence = (String JavaDoc) _maxMinValueSequence.
121              _SNONRESERVEDWORD1364442551.run(null);
122          BigDecimal maxMinVal = (BigDecimal) _maxMinValueSequence.run(null);
123          if (maxMinSequence.equalsIgnoreCase("MINVALUE")) {
124             Integer JavaDoc minValueColumn = new Integer JavaDoc(SystemTablesFields.
125                                                  sequence_number_min_value);
126             if (columnsList.contains(minValueColumn)) {
127                throw new DException("DSE5507", new Object JavaDoc[] {"minvalue/nominvalue"});
128             }
129             BigDecimal minLimit = new BigDecimal("" + Long.MIN_VALUE);
130             if (maxMinVal.compareTo(minLimit) < 0) {
131                throw new DException("DSE5509", new Object JavaDoc[] {minLimit});
132             }
133             sequenceDescriptor.min_value = maxMinVal.longValue();
134             columnsList.add(minValueColumn);
135             valuesList.add(new Long JavaDoc(sequenceDescriptor.min_value));
136
137          } else {
138             Integer JavaDoc maxValueColumn = new Integer JavaDoc(SystemTablesFields.
139                                                  sequence_number_max_value);
140             if (columnsList.contains(maxValueColumn)) {
141                throw new DException("DSE5507", new Object JavaDoc[] {"maxvalue/nomaxvalue"});
142             }
143             BigDecimal maxLimit = new BigDecimal("" + Long.MAX_VALUE);
144             if (maxMinVal.compareTo(maxLimit) > 0) {
145                throw new DException("DSE5510", new Object JavaDoc[] {maxLimit});
146             }
147             sequenceDescriptor.max_value = maxMinVal.longValue();
148             columnsList.add(maxValueColumn);
149             valuesList.add(new Long JavaDoc(sequenceDescriptor.max_value));
150          }
151       } else if (optionalValue instanceof SNONRESERVEDWORD136444255) {
152          String JavaDoc nonReservedwordValue = (String JavaDoc) ( (SNONRESERVEDWORD136444255)
153                                                  optionalValue).run(null);
154          if (nonReservedwordValue.equalsIgnoreCase("NOMINVALUE")) {
155             Integer JavaDoc minValueColumn = new Integer JavaDoc(SystemTablesFields.
156                                                  sequence_number_min_value);
157             if (columnsList.contains(minValueColumn)) {
158                throw new DException("DSE5507", new Object JavaDoc[] {"minvalue/nominvalue"});
159             }
160             sequenceDescriptor.min_value = Long.MIN_VALUE;
161             columnsList.add(minValueColumn);
162             valuesList.add(new Long JavaDoc(sequenceDescriptor.min_value));
163          } else if (nonReservedwordValue.equalsIgnoreCase("NOMAXVALUE")) {
164             Integer JavaDoc maxValueColumn = new Integer JavaDoc(SystemTablesFields.
165                                                  sequence_number_max_value);
166             if (columnsList.contains(maxValueColumn)) {
167                throw new DException("DSE5507", new Object JavaDoc[] {"maxvalue/nomaxvalue"});
168             }
169             sequenceDescriptor.max_value = Long.MAX_VALUE;
170             columnsList.add(maxValueColumn);
171             valuesList.add(new Long JavaDoc(sequenceDescriptor.max_value));
172          } else if (nonReservedwordValue.equalsIgnoreCase("NOCYCLE")) {
173             Integer JavaDoc cycleInSequenceColumn = new Integer JavaDoc(SystemTablesFields.
174                 sequence_number_cycle_in_sequence);
175             if (columnsList.contains(cycleInSequenceColumn)) {
176                throw new DException("DSE5507", new Object JavaDoc[] {"cycle/nocycle"});
177             }
178             sequenceDescriptor.cycle_in_sequence = false;
179             columnsList.add(cycleInSequenceColumn);
180             valuesList.add(new Boolean JavaDoc(sequenceDescriptor.cycle_in_sequence));
181          } else {
182             throw new DException("DSE5504", new Object JavaDoc[] {null});
183             /** @todo */
184             /*Integer sequenceOrderColumn = new Integer(SystemTablesFields.sequence_number_sequence_order);
185                                if(columnsList.contains(sequenceOrderColumn))
186               throw new DException ("DSE5507",new Object[]{null}) ;
187                                sequenceDescriptor.sequence_order = false;
188                                columnsList.add(sequenceOrderColumn);
189                  valuesList.add(new Boolean(sequenceDescriptor.sequence_order));*/

190          }
191
192       } else if (optionalValue instanceof SRESERVEDWORD1206543922) {
193          String JavaDoc reservedWordValue = (String JavaDoc) ( (SRESERVEDWORD1206543922)
194                                               optionalValue).run(null);
195          if (reservedWordValue.equalsIgnoreCase("CYCLE")) {
196             Integer JavaDoc cycleInSequenceColumn = new Integer JavaDoc(SystemTablesFields.
197                 sequence_number_cycle_in_sequence);
198             if (columnsList.contains(cycleInSequenceColumn)) {
199                throw new DException("DSE5507", new Object JavaDoc[] {"cycle/nocycle"});
200             }
201             sequenceDescriptor.cycle_in_sequence = true;
202             columnsList.add(cycleInSequenceColumn);
203             valuesList.add(new Boolean JavaDoc(sequenceDescriptor.cycle_in_sequence));
204          } else {
205             throw new DException("DSE5504", new Object JavaDoc[] {null});
206             /** @todo */
207             /* Integer sequenceOrderColumn = new Integer(SystemTablesFields.sequence_number_sequence_order);
208               if(columnsList.contains(sequenceOrderColumn))
209                 throw new DException ("DSE5507",new Object[]{null}) ;
210               sequenceDescriptor.sequence_order = true;
211               columnsList.add(sequenceOrderColumn);
212               valuesList.add(new Boolean(sequenceDescriptor.sequence_order));*/

213          }
214       }
215    }
216
217    private void checkValuesValidity(SequenceNumberDescriptor sequenceDescriptor) throws
218        DException {
219       if (sequenceDescriptor.max_value < sequenceDescriptor.min_value) {
220          throw new DException("DSE5512", new Object JavaDoc[] {null});
221       }
222
223
224       if ( (new BigInteger(String.valueOf(sequenceDescriptor.increment_by)).abs()).compareTo(
225           (new BigInteger(String.valueOf(sequenceDescriptor.max_value)).subtract(new BigInteger(String.valueOf(sequenceDescriptor.min_value))))) > 0) {
226          throw new DException("DSE5514", null);
227       }
228
229       if (sequenceDescriptor.last_value == null) {
230         if(sequenceDescriptor.max_value < sequenceDescriptor.start_with){
231           throw new DException("DSE5526", null);
232         }
233         if(sequenceDescriptor.min_value > sequenceDescriptor.start_with){
234           throw new DException("DSE5525", null);
235         }
236          return;
237       }
238       long lastValue = sequenceDescriptor.last_value.longValue();
239
240       if ((sequenceDescriptor.max_value < lastValue) || (sequenceDescriptor.max_value < sequenceDescriptor.start_with)) {
241          throw new DException("DSE5515", new Object JavaDoc[] {null});
242       }
243       if ((sequenceDescriptor.min_value > lastValue) || (sequenceDescriptor.min_value > sequenceDescriptor.start_with)) {
244          throw new DException("DSE5517", new Object JavaDoc[] {null});
245       }
246
247
248    }
249
250    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
251       return this;
252    }
253
254    public String JavaDoc toString() {
255       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
256       sb.append(" ");
257       sb.append(_SRESERVEDWORD12065439224);
258       sb.append(" ");
259       sb.append(_SRESERVEDWORD12065439223);
260       sb.append(" ");
261       sb.append(_localorschemaqualifiedname2);
262       sb.append(" ");
263       sb.append(_sequenceincrementer1);
264       sb.append(" ");
265       if (_OptRepsequenceincrementer0 != null) {
266          for (int i = 0; i < _OptRepsequenceincrementer0.length; i++) {
267             sb.append(" ").append(_OptRepsequenceincrementer0[i]);
268          }
269       }
270       return sb.toString();
271    }
272 }
273
Popular Tags