/// <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; })); }
protected void ExecuteNonQuery(EnumerationContext context, string statement) { var executor = context.Session.Services.Demand <ISqlExecutor>(); executor.ExecuteNonQuery(statement); }
/// <summary> /// Releases the lock on a temporary table. /// </summary> public abstract void ReleaseTable(EnumerationContext context, TemporaryTableDescriptor descriptor);
/// <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) { }