Skip to content

Commit a19a3bd

Browse files
committed
Make ClearRequest lazy
1 parent acec0ed commit a19a3bd

5 files changed

Lines changed: 15 additions & 12 deletions

File tree

Orm/Xtensive.Orm/Orm/Providers/Interfaces/IPersistDescriptor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ public interface IPersistDescriptor
1414
Lazy<PersistRequest> LazyLevel1BatchStoreRequest { get; }
1515
Lazy<PersistRequest> LazyLevel2BatchStoreRequest { get; }
1616

17-
PersistRequest ClearRequest { get; }
17+
Lazy<PersistRequest> ClearRequest { get; }
1818
}
1919
}

Orm/Xtensive.Orm/Orm/Providers/SqlSessionHandler.IProviderExecutor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,15 @@ async Task IProviderExecutor.StoreAsync(IPersistDescriptor descriptor, IEnumerab
6464
void IProviderExecutor.Clear(IPersistDescriptor descriptor, ParameterContext parameterContext)
6565
{
6666
Prepare();
67-
commandProcessor.RegisterTask(new SqlPersistTask(descriptor.ClearRequest));
67+
commandProcessor.RegisterTask(new SqlPersistTask(descriptor.ClearRequest.Value));
6868
Execute(parameterContext);
6969
}
7070

7171
/// <inheritdoc/>
7272
void IProviderExecutor.Overwrite(IPersistDescriptor descriptor, IEnumerable<Tuple> tuples)
7373
{
7474
Prepare();
75-
commandProcessor.RegisterTask(new SqlPersistTask(descriptor.ClearRequest));
75+
commandProcessor.RegisterTask(new SqlPersistTask(descriptor.ClearRequest.Value));
7676
Store(descriptor, tuples);
7777
Execute(new ParameterContext());
7878
}

Orm/Xtensive.Orm/Orm/Providers/TemporaryTables/TemporaryTableDescriptor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public sealed class TemporaryTableDescriptor : IPersistDescriptor
5656
/// <summary>
5757
/// Gets or sets the clear reqest used to delete all data from temporary table.
5858
/// </summary>
59-
public PersistRequest ClearRequest { get; set; }
59+
public Lazy<PersistRequest> ClearRequest { get; set; }
6060

6161
/// <summary>
6262
/// Gets or sets the query statement associated with this table descriptor.

Orm/Xtensive.Orm/Orm/Providers/TemporaryTables/TemporaryTableManager.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public class TemporaryTableManager : DomainBoundHandler
3232
/// <summary>
3333
/// Gets value indicating whether temporary tables are supported.
3434
/// </summary>
35-
public bool Supported { get { return backEnd!=null; } }
35+
public bool Supported { get { return backEnd != null; } }
3636

3737
/// <summary>
3838
/// Builds the descriptor of a temporary table.
@@ -93,10 +93,13 @@ public TemporaryTableDescriptor BuildDescriptor(ModelMapping modelMapping, strin
9393
LazyLevel1BatchStoreRequest = CreateLazyPersistRequest(WellKnown.MultiRowInsertLevel1BatchSize),
9494
LazyLevel2BatchStoreRequest = CreateLazyPersistRequest(WellKnown.MultiRowInsertLevel2BatchSize),
9595
LazyStoreRequest = CreateLazyPersistRequest(1),
96-
ClearRequest = new PersistRequest(driver, Handlers.ProviderInfo.Supports(ProviderFeatures.TruncateTable) ? SqlDdl.Truncate(table) : SqlDml.Delete(tableRef), null)
96+
ClearRequest = new Lazy<PersistRequest>(() => {
97+
var request = new PersistRequest(driver, Handlers.ProviderInfo.Supports(ProviderFeatures.TruncateTable) ? SqlDdl.Truncate(table) : SqlDml.Delete(tableRef), null);
98+
request.Prepare();
99+
return request;
100+
})
97101
};
98102

99-
result.ClearRequest.Prepare();
100103
return result;
101104

102105
Lazy<PersistRequest> CreateLazyPersistRequest(int batchSize) =>
@@ -147,7 +150,7 @@ protected void ExecuteNonQuery(EnumerationContext context, string statement)
147150
private static TemporaryTableStateRegistry GetRegistry(Session session)
148151
{
149152
var registry = session.Extensions.Get<TemporaryTableStateRegistry>();
150-
if (registry==null) {
153+
if (registry == null) {
151154
registry = new TemporaryTableStateRegistry();
152155
session.Extensions.Set(registry);
153156
}
@@ -167,7 +170,7 @@ private string[] BuildFieldNames(TupleDescriptor source) =>
167170
.Select(i => string.Format(ColumnNamePattern, i))
168171
.ToArray();
169172

170-
private Table CreateTemporaryTable(Schema schema, string name, TupleDescriptor source, TypeMapping[] typeMappings, string[]fieldNames, Collation collation)
173+
private Table CreateTemporaryTable(Schema schema, string name, TupleDescriptor source, TypeMapping[] typeMappings, string[] fieldNames, Collation collation)
171174
{
172175
var tableName = Handlers.NameBuilder.ApplyNamingRules(string.Format(TableNamePattern, name));
173176
var table = backEnd.CreateTemporaryTable(schema, tableName);
@@ -178,7 +181,7 @@ private Table CreateTemporaryTable(Schema schema, string name, TupleDescriptor s
178181
var column = table.CreateColumn(fieldNames[fieldIndex], mapping.MapType());
179182
column.IsNullable = true;
180183
// TODO: Dmitry Maximov, remove this workaround than collation problem will be fixed
181-
if (mapping.Type==WellKnownTypes.String)
184+
if (mapping.Type == WellKnownTypes.String)
182185
column.Collation = collation;
183186
fieldIndex++;
184187
}

Orm/Xtensive.Orm/Orm/Upgrade/Internals/Metadata/MetadataWriter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ private sealed class Descriptor : IPersistDescriptor
3030
public Lazy<PersistRequest> LazyStoreRequest { get; set; }
3131
public Lazy<PersistRequest> LazyLevel1BatchStoreRequest { get; }
3232
public Lazy<PersistRequest> LazyLevel2BatchStoreRequest { get; }
33-
public PersistRequest ClearRequest { get; set; }
33+
public Lazy<PersistRequest> ClearRequest { get; set; }
3434
}
3535

3636
private readonly StorageDriver driver;
@@ -121,7 +121,7 @@ private IPersistDescriptor CreateDescriptor(string tableName,
121121

122122
return new Descriptor {
123123
LazyStoreRequest = new Lazy<PersistRequest>(storeRequest),
124-
ClearRequest = clearRequest
124+
ClearRequest = new Lazy<PersistRequest>(clearRequest)
125125
};
126126
}
127127

0 commit comments

Comments
 (0)