public override object Generate(ISessionImplementor session, object obj)
        {
            if (maxLo < 1)
            {
                //keep the behavior consistent even for boundary usages
                long val = Convert.ToInt64(base.Generate(session, obj));
                if (val == 0)
                {
                    val = Convert.ToInt64(base.Generate(session, obj));
                }
                return(IdentifierGeneratorFactory.CreateNumber(val, returnClass));
            }

            if (lo > maxLo)
            {
                long hival = Convert.ToInt64(base.Generate(session, obj));
                lo = 1;
                hi = hival * (maxLo + 1);
                if (log.IsDebugEnabled)
                {
                    log.Debug("new hi value: " + hival);
                }
            }
            return(IdentifierGeneratorFactory.CreateNumber(hi + lo++, returnClass));
        }
        public override async Task <object> GenerateAsync(ISessionImplementor session, object obj, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            using (await _generate.LockAsync())
            {
                if (maxLo < 1)
                {
                    //keep the behavior consistent even for boundary usages
                    long val = Convert.ToInt64(await(base.GenerateAsync(session, obj, cancellationToken)).ConfigureAwait(false));
                    if (val == 0)
                    {
                        val = Convert.ToInt64(await(base.GenerateAsync(session, obj, cancellationToken)).ConfigureAwait(false));
                    }
                    return(IdentifierGeneratorFactory.CreateNumber(val, returnClass));
                }

                if (lo > maxLo)
                {
                    long hival = Convert.ToInt64(await(base.GenerateAsync(session, obj, cancellationToken)).ConfigureAwait(false));
                    lo = (hival == 0) ? 1 : 0;
                    hi = hival * (maxLo + 1);
                    if (log.IsDebugEnabled)
                    {
                        log.Debug("new hi value: " + hival);
                    }
                }
                return(IdentifierGeneratorFactory.CreateNumber(hi + lo++, returnClass));
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Generate a <see cref="Int64"/> for the identifier by selecting and updating a value in a table.
        /// </summary>
        /// <param name="session">The <see cref="ISessionImplementor"/> this id is being generated in.</param>
        /// <param name="obj">The entity for which the id is being generated.</param>
        /// <returns>The new identifier as a <see cref="Int64"/>.</returns>
        public override object Generate(ISessionImplementor session, object obj)
        {
            using (_asyncLock.Lock())
            {
                if (maxLo < 1)
                {
                    //keep the behavior consistent even for boundary usages
                    long val = Convert.ToInt64(base.Generate(session, obj));
                    if (val == 0)
                    {
                        val = Convert.ToInt64(base.Generate(session, obj));
                    }
                    return(IdentifierGeneratorFactory.CreateNumber(val, returnClass));
                }
                if (lo > maxLo)
                {
                    long hival = Convert.ToInt64(base.Generate(session, obj));
                    lo = (hival == 0) ? 1 : 0;
                    hi = hival * (maxLo + 1);
                    log.Debug("New high value: {0}", hival);
                }

                return(IdentifierGeneratorFactory.CreateNumber(hi + lo++, returnClass));
            }
        }
Ejemplo n.º 4
0
 public object Generate(ISessionImplementor session, object obj)
 {
     if (sql != null)
     {
         getNext(session);
     }
     return(IdentifierGeneratorFactory.CreateNumber(next++, returnClass));
 }
 public override object Generate(ISessionImplementor session, object obj)
 {
     if (lo > maxLo)
     {
         long hival = Convert.ToInt64(base.Generate(session, obj));
         lo = 1;
         hi = hival * (maxLo + 1);
         log.Debug("new hi value: " + hival);
     }
     return(IdentifierGeneratorFactory.CreateNumber(hi + lo++, returnClass));
 }
Ejemplo n.º 6
0
 public async Task <object> GenerateAsync(ISessionImplementor session, object obj, CancellationToken cancellationToken)
 {
     cancellationToken.ThrowIfCancellationRequested();
     using (await _generate.LockAsync())
     {
         if (_sql != null)
         {
             await(GetNextAsync(session, cancellationToken)).ConfigureAwait(false);
         }
         return(IdentifierGeneratorFactory.CreateNumber(_next++, _returnClass));
     }
 }
Ejemplo n.º 7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="session"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public object Generate(ISessionImplementor session, object obj)
        {
            using (_asyncLock.Lock())
            {
                if (_sql != null)
                {
                    GetNext(session);
                }

                return(IdentifierGeneratorFactory.CreateNumber(_next++, _returnClass));
            }
        }