Skip to content

Commit acec0ed

Browse files
committed
Make 1-row INSERT Lazy
1 parent b929502 commit acec0ed

5 files changed

Lines changed: 9 additions & 14 deletions

File tree

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ namespace Xtensive.Orm.Providers
1010
{
1111
public interface IPersistDescriptor
1212
{
13-
PersistRequest StoreRequest { get; }
14-
13+
Lazy<PersistRequest> LazyStoreRequest { get; }
1514
Lazy<PersistRequest> LazyLevel1BatchStoreRequest { get; }
1615
Lazy<PersistRequest> LazyLevel2BatchStoreRequest { get; }
1716

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ private void Store(IPersistDescriptor descriptor, IEnumerable<Tuple> tuples)
9797
}
9898
else {
9999
foreach (var tuple in level1Chunk) {
100-
commandProcessor.RegisterTask(new SqlPersistTask(descriptor.StoreRequest, tuple));
100+
commandProcessor.RegisterTask(new SqlPersistTask(descriptor.LazyStoreRequest.Value, tuple));
101101
}
102102
}
103103
}
@@ -106,7 +106,7 @@ private void Store(IPersistDescriptor descriptor, IEnumerable<Tuple> tuples)
106106
}
107107
else {
108108
foreach (var tuple in tuples) {
109-
commandProcessor.RegisterTask(new SqlPersistTask(descriptor.StoreRequest, tuple));
109+
commandProcessor.RegisterTask(new SqlPersistTask(descriptor.LazyStoreRequest.Value, tuple));
110110
}
111111
}
112112
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public sealed class TemporaryTableDescriptor : IPersistDescriptor
5151
/// <summary>
5252
/// Gets or sets the persist request used to store data in temporary table.
5353
/// </summary>
54-
public PersistRequest StoreRequest { get; set; }
54+
public Lazy<PersistRequest> LazyStoreRequest { get; set; }
5555

5656
/// <summary>
5757
/// Gets or sets the clear reqest used to delete all data from temporary table.

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,29 +85,25 @@ public TemporaryTableDescriptor BuildDescriptor(ModelMapping modelMapping, strin
8585
// insert statements
8686

8787

88-
var storeRequestBindings = new List<PersistParameterBinding>();
89-
var insertStatement = MakeUpInsertQuery(tableRef, typeMappings, storeRequestBindings, hasColumns, 1);
90-
9188
var result = new TemporaryTableDescriptor(name) {
9289
TupleDescriptor = source,
9390
QueryStatement = queryStatement,
9491
CreateStatement = driver.Compile(SqlDdl.Create(table)).GetCommandText(),
9592
DropStatement = driver.Compile(SqlDdl.Drop(table)).GetCommandText(),
9693
LazyLevel1BatchStoreRequest = CreateLazyPersistRequest(WellKnown.MultiRowInsertLevel1BatchSize),
9794
LazyLevel2BatchStoreRequest = CreateLazyPersistRequest(WellKnown.MultiRowInsertLevel2BatchSize),
98-
StoreRequest = new PersistRequest(driver, insertStatement, storeRequestBindings),
95+
LazyStoreRequest = CreateLazyPersistRequest(1),
9996
ClearRequest = new PersistRequest(driver, Handlers.ProviderInfo.Supports(ProviderFeatures.TruncateTable) ? SqlDdl.Truncate(table) : SqlDml.Delete(tableRef), null)
10097
};
10198

102-
result.StoreRequest.Prepare();
10399
result.ClearRequest.Prepare();
104100
return result;
105101

106102
Lazy<PersistRequest> CreateLazyPersistRequest(int batchSize) =>
107103
new Lazy<PersistRequest>(() => {
108104
var bindings = new List<PersistParameterBinding>(batchSize);
109-
var level2BatchInsertStatement = MakeUpInsertQuery(tableRef, typeMappings, bindings, hasColumns, batchSize);
110-
var persistRequest = new PersistRequest(driver, level2BatchInsertStatement, bindings);
105+
var statement = MakeUpInsertQuery(tableRef, typeMappings, bindings, hasColumns, batchSize);
106+
var persistRequest = new PersistRequest(driver, statement, bindings);
111107
persistRequest.Prepare();
112108
return persistRequest;
113109
});

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ internal sealed class MetadataWriter
2727

2828
private sealed class Descriptor : IPersistDescriptor
2929
{
30-
public PersistRequest StoreRequest { get; set; }
30+
public Lazy<PersistRequest> LazyStoreRequest { get; set; }
3131
public Lazy<PersistRequest> LazyLevel1BatchStoreRequest { get; }
3232
public Lazy<PersistRequest> LazyLevel2BatchStoreRequest { get; }
3333
public PersistRequest ClearRequest { get; set; }
@@ -120,7 +120,7 @@ private IPersistDescriptor CreateDescriptor(string tableName,
120120
clearRequest.Prepare();
121121

122122
return new Descriptor {
123-
StoreRequest = storeRequest,
123+
LazyStoreRequest = new Lazy<PersistRequest>(storeRequest),
124124
ClearRequest = clearRequest
125125
};
126126
}

0 commit comments

Comments
 (0)