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 run(Object object) throws DException { 22 _ServerSession currentSession = (_ServerSession) object; 23 SequenceNumberDescriptor sequenceDescriptor = new SequenceNumberDescriptor(); 24 setSequenceName(currentSession, sequenceDescriptor); 25 String 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 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 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 [] 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 incrementColumn = new Integer (SystemTablesFields. 105 sequence_number_increment_by); 106 if (columnsList.contains(incrementColumn)) { 107 throw new DException("DSE5507", new Object [] {"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 [] {null}); 114 } 115 columnsList.add(incrementColumn); 116 valuesList.add(new Long (sequenceDescriptor.increment_by)); 117 } else if (optionalValue instanceof SNONRESERVEDWORD136444255suinteger) { 118 SNONRESERVEDWORD136444255suinteger _maxMinValueSequence = ( 119 SNONRESERVEDWORD136444255suinteger) optionalValue; 120 String maxMinSequence = (String ) _maxMinValueSequence. 121 _SNONRESERVEDWORD1364442551.run(null); 122 BigDecimal maxMinVal = (BigDecimal) _maxMinValueSequence.run(null); 123 if (maxMinSequence.equalsIgnoreCase("MINVALUE")) { 124 Integer minValueColumn = new Integer (SystemTablesFields. 125 sequence_number_min_value); 126 if (columnsList.contains(minValueColumn)) { 127 throw new DException("DSE5507", new Object [] {"minvalue/nominvalue"}); 128 } 129 BigDecimal minLimit = new BigDecimal("" + Long.MIN_VALUE); 130 if (maxMinVal.compareTo(minLimit) < 0) { 131 throw new DException("DSE5509", new Object [] {minLimit}); 132 } 133 sequenceDescriptor.min_value = maxMinVal.longValue(); 134 columnsList.add(minValueColumn); 135 valuesList.add(new Long (sequenceDescriptor.min_value)); 136 137 } else { 138 Integer maxValueColumn = new Integer (SystemTablesFields. 139 sequence_number_max_value); 140 if (columnsList.contains(maxValueColumn)) { 141 throw new DException("DSE5507", new Object [] {"maxvalue/nomaxvalue"}); 142 } 143 BigDecimal maxLimit = new BigDecimal("" + Long.MAX_VALUE); 144 if (maxMinVal.compareTo(maxLimit) > 0) { 145 throw new DException("DSE5510", new Object [] {maxLimit}); 146 } 147 sequenceDescriptor.max_value = maxMinVal.longValue(); 148 columnsList.add(maxValueColumn); 149 valuesList.add(new Long (sequenceDescriptor.max_value)); 150 } 151 } else if (optionalValue instanceof SNONRESERVEDWORD136444255) { 152 String nonReservedwordValue = (String ) ( (SNONRESERVEDWORD136444255) 153 optionalValue).run(null); 154 if (nonReservedwordValue.equalsIgnoreCase("NOMINVALUE")) { 155 Integer minValueColumn = new Integer (SystemTablesFields. 156 sequence_number_min_value); 157 if (columnsList.contains(minValueColumn)) { 158 throw new DException("DSE5507", new Object [] {"minvalue/nominvalue"}); 159 } 160 sequenceDescriptor.min_value = Long.MIN_VALUE; 161 columnsList.add(minValueColumn); 162 valuesList.add(new Long (sequenceDescriptor.min_value)); 163 } else if (nonReservedwordValue.equalsIgnoreCase("NOMAXVALUE")) { 164 Integer maxValueColumn = new Integer (SystemTablesFields. 165 sequence_number_max_value); 166 if (columnsList.contains(maxValueColumn)) { 167 throw new DException("DSE5507", new Object [] {"maxvalue/nomaxvalue"}); 168 } 169 sequenceDescriptor.max_value = Long.MAX_VALUE; 170 columnsList.add(maxValueColumn); 171 valuesList.add(new Long (sequenceDescriptor.max_value)); 172 } else if (nonReservedwordValue.equalsIgnoreCase("NOCYCLE")) { 173 Integer cycleInSequenceColumn = new Integer (SystemTablesFields. 174 sequence_number_cycle_in_sequence); 175 if (columnsList.contains(cycleInSequenceColumn)) { 176 throw new DException("DSE5507", new Object [] {"cycle/nocycle"}); 177 } 178 sequenceDescriptor.cycle_in_sequence = false; 179 columnsList.add(cycleInSequenceColumn); 180 valuesList.add(new Boolean (sequenceDescriptor.cycle_in_sequence)); 181 } else { 182 throw new DException("DSE5504", new Object [] {null}); 183 184 190 } 191 192 } else if (optionalValue instanceof SRESERVEDWORD1206543922) { 193 String reservedWordValue = (String ) ( (SRESERVEDWORD1206543922) 194 optionalValue).run(null); 195 if (reservedWordValue.equalsIgnoreCase("CYCLE")) { 196 Integer cycleInSequenceColumn = new Integer (SystemTablesFields. 197 sequence_number_cycle_in_sequence); 198 if (columnsList.contains(cycleInSequenceColumn)) { 199 throw new DException("DSE5507", new Object [] {"cycle/nocycle"}); 200 } 201 sequenceDescriptor.cycle_in_sequence = true; 202 columnsList.add(cycleInSequenceColumn); 203 valuesList.add(new Boolean (sequenceDescriptor.cycle_in_sequence)); 204 } else { 205 throw new DException("DSE5504", new Object [] {null}); 206 207 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 [] {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 [] {null}); 242 } 243 if ((sequenceDescriptor.min_value > lastValue) || (sequenceDescriptor.min_value > sequenceDescriptor.start_with)) { 244 throw new DException("DSE5517", new Object [] {null}); 245 } 246 247 248 } 249 250 public Object clone() throws CloneNotSupportedException { 251 return this; 252 } 253 254 public String toString() { 255 StringBuffer sb = new StringBuffer (); 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 |