docs: @Override
  	public Long nextValue(NextValueRequest request) {
  		String sequenceName = sequenceName( request.getKey() );
  		// This method return 2 statements: the first one to acquire a lock and the second one to update the sequence node
  		RemoteStatements remoteStatements = updateNextValueQuery( request );
  
  		Number nextValue = nextValue( remoteStatements );
  
  		// sequence nodes are expected to have been created up-front
  		if ( request.getKey().getMetadata().getType() == IdSourceType.SEQUENCE ) {
  			if ( nextValue == null ) {
  				throw logger.sequenceNotFound( sequenceName );
  			}
  		}
  		// The only way I found to make it work in a multi-threaded environment is to first increment the value and then read it.
  		// Our API allows for an initial value and to make sure that I'm actually reading the correct one,
  		// the first time I need to decrement the value I obtain from the db.
  		return nextValue.longValue() - request.getIncrement();
  	}