@Override
 public void incrementSequences(
     List<SequenceAllocation> sequenceAllocations,
     long timestamp,
     long[] values,
     SQLException[] exceptions)
     throws SQLException {
   int i = 0;
   for (SequenceAllocation sequenceAllocation : sequenceAllocations) {
     SequenceKey key = sequenceAllocation.getSequenceKey();
     SequenceInfo info = sequenceMap.get(key);
     if (info == null) {
       exceptions[i] = new SequenceNotFoundException(key.getSchemaName(), key.getSequenceName());
     } else {
       boolean increaseSeq = info.incrementBy > 0;
       if (info.limitReached) {
         SQLExceptionCode code =
             increaseSeq
                 ? SQLExceptionCode.SEQUENCE_VAL_REACHED_MAX_VALUE
                 : SQLExceptionCode.SEQUENCE_VAL_REACHED_MIN_VALUE;
         exceptions[i] = new SQLExceptionInfo.Builder(code).build().buildException();
       } else {
         values[i] = info.sequenceValue;
         info.sequenceValue += info.incrementBy * info.cacheSize;
         info.limitReached = SequenceUtil.checkIfLimitReached(info);
         if (info.limitReached && info.cycle) {
           info.sequenceValue = increaseSeq ? info.minValue : info.maxValue;
           info.limitReached = false;
         }
       }
     }
     i++;
   }
   i = 0;
   for (SQLException e : exceptions) {
     if (e != null) {
       sequenceMap.remove(sequenceAllocations.get(i).getSequenceKey());
     }
     i++;
   }
 }
 @Override
 public void validateSequences(
     List<SequenceAllocation> sequenceAllocations,
     long timestamp,
     long[] values,
     SQLException[] exceptions,
     Sequence.ValueOp action)
     throws SQLException {
   int i = 0;
   for (SequenceAllocation sequenceAllocation : sequenceAllocations) {
     SequenceInfo info = sequenceMap.get(sequenceAllocation.getSequenceKey());
     if (info == null) {
       exceptions[i] =
           new SequenceNotFoundException(
               sequenceAllocation.getSequenceKey().getSchemaName(),
               sequenceAllocation.getSequenceKey().getSequenceName());
     } else {
       values[i] = info.sequenceValue;
     }
     i++;
   }
 }