/// <summary>
        /// Acquires the lock on the specified temporary table.
        /// </summary>
        /// <param name="context">The <see cref="EnumerationContext"/>.</param>
        /// <param name="descriptor">The descriptor of temporary table.</param>
        /// <returns>
        /// A <see cref="IDisposable"/> implementor that should be used to free acquired lock.
        /// </returns>
        public IDisposable Acquire(EnumerationContext context, TemporaryTableDescriptor descriptor)
        {
            var name     = descriptor.Name;
            var session  = context.Session;
            var registry = GetRegistry(session);

            bool isLocked;

            if (!registry.States.TryGetValue(name, out isLocked))
            {
                backEnd.InitializeTable(context, descriptor);
            }
            else if (isLocked)
            {
                return(null);
            }

            registry.States[name] = true;
            backEnd.AcquireTable(context, descriptor);

            return(new Disposable(disposing => {
                backEnd.ReleaseTable(context, descriptor);
                registry.States[name] = false;
            }));
        }
Exemple #2
0
        protected void ExecuteNonQuery(EnumerationContext context, string statement)
        {
            var executor = context.Session.Services.Demand <ISqlExecutor>();

            executor.ExecuteNonQuery(statement);
        }
Exemple #3
0
 /// <summary>
 /// Releases the lock on a temporary table.
 /// </summary>
 public abstract void ReleaseTable(EnumerationContext context, TemporaryTableDescriptor descriptor);
Exemple #4
0
 /// <summary>
 /// Initializes the table. This is called once per session on a first acquire request.
 /// </summary>
 public abstract void InitializeTable(EnumerationContext context, TemporaryTableDescriptor descriptor);
 public override void ReleaseTable(EnumerationContext context, TemporaryTableDescriptor descriptor)
 {
 }
 public override void InitializeTable(EnumerationContext context, TemporaryTableDescriptor descriptor)
 {
     ExecuteNonQuery(context, descriptor.CreateStatement);
 }
 public override void ReleaseTable(EnumerationContext context, TemporaryTableDescriptor descriptor)
 {
     ExecuteNonQuery(context, descriptor.DropStatement);
 }
 public override void InitializeTable(EnumerationContext context, TemporaryTableDescriptor descriptor)
 {
 }