Skip to content

Commit 3f10a59

Browse files
committed
Fix issue ThatRendle#171 (SqlBulkInserter does not use specified schema)
1 parent 1305aae commit 3f10a59

4 files changed

Lines changed: 65 additions & 2 deletions

File tree

Simple.Data.BehaviourTest/BulkInsertTest.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,16 @@ public class BulkInsertTest : DatabaseIntegrationContext
1111
protected override void SetSchema(MockSchemaProvider schemaProvider)
1212
{
1313
schemaProvider.SetTables(new[] { "dbo", "Users", "BASE TABLE" },
14-
new[] { "dbo", "NoIdentityColumnUsers", "BASE TABLE" });
14+
new[] { "dbo", "NoIdentityColumnUsers", "BASE TABLE" },
15+
new[] { "foo", "Users", "BASE TABLE" });
1516
schemaProvider.SetColumns(new object[] { "dbo", "Users", "Id", true },
1617
new[] { "dbo", "Users", "Name" },
1718
new[] { "dbo", "Users", "Password" },
1819
new[] { "dbo", "Users", "Age" },
20+
new object[] { "foo", "Users", "Id", true },
21+
new[] { "foo", "Users", "Name" },
22+
new[] { "foo", "Users", "Password" },
23+
new[] { "foo", "Users", "Age" },
1924
new[] { "dbo", "NoIdentityColumnUsers", "Id" },
2025
new[] { "dbo", "NoIdentityColumnUsers", "Name" },
2126
new[] { "dbo", "NoIdentityColumnUsers", "Password" },
@@ -33,6 +38,17 @@ public void TestBulkInsertWithStaticTypeObjectAndIdentityColumn()
3338
Parameter(1).Is(DBNull.Value);
3439
Parameter(2).Is(42);
3540
}
41+
42+
[Test]
43+
public void TestBulkInsertWithStaticTypeObjectAndIdentityColumnOnSchemaQualifiedTable()
44+
{
45+
var users = new[] { new User { Name = "Steve", Age = 50 }, new User { Name = "Phil", Age = 42 }};
46+
_db.foo.Users.Insert(users);
47+
GeneratedSqlIs("insert into [foo].[Users] ([Name],[Password],[Age]) values (@p0,@p1,@p2)");
48+
Parameter(0).Is("Phil");
49+
Parameter(1).Is(DBNull.Value);
50+
Parameter(2).Is(42);
51+
}
3652

3753
[Test]
3854
public void TestBulkInsertWithStaticTypeObjectAndIdentityColumnAndIdentityFunctionThatExpectsAValueSelects()

Simple.Data.SqlServer/SqlBulkInserter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public IEnumerable<IDictionary<string, object>> Insert(AdoAdapter adapter, strin
3737
bulkCopy = new SqlBulkCopy(connection);
3838
}
3939

40-
bulkCopy.DestinationTableName = adapter.GetSchema().FindTable(tableName).ActualName;
40+
bulkCopy.DestinationTableName = adapter.GetSchema().FindTable(tableName).QualifiedName;
4141

4242
using (connection.MaybeDisposable())
4343
using (bulkCopy)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
namespace Simple.Data.SqlTest
2+
{
3+
using System.Collections.Generic;
4+
using NUnit.Framework;
5+
6+
[TestFixture]
7+
public class BulkInsertTest
8+
{
9+
[TestFixtureSetUp]
10+
public void Setup()
11+
{
12+
DatabaseHelper.Reset();
13+
}
14+
15+
[Test]
16+
public void BulkInsertUsesSchema()
17+
{
18+
var db = DatabaseHelper.Open();
19+
db.test.SchemaTable.DeleteAll();
20+
db.test.SchemaTable.Insert(GenerateItems());
21+
22+
var list = db.test.SchemaTable.All().ToList();
23+
Assert.AreEqual(1000, list.Count);
24+
}
25+
26+
private static IEnumerable<SchemaItem> GenerateItems()
27+
{
28+
for (int i = 0; i < 1000; i++)
29+
{
30+
yield return new SchemaItem(i, i.ToString());
31+
}
32+
}
33+
}
34+
35+
class SchemaItem
36+
{
37+
public SchemaItem(int id, string description)
38+
{
39+
Id = id;
40+
Description = description;
41+
}
42+
43+
public int Id { get; set; }
44+
public string Description { get; set; }
45+
}
46+
}

Simple.Data.SqlTest/Simple.Data.SqlTest.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
</CodeAnalysisDependentAssemblyPaths>
6363
</ItemGroup>
6464
<ItemGroup>
65+
<Compile Include="BulkInsertTest.cs" />
6566
<Compile Include="ConversionTests.cs" />
6667
<Compile Include="DatabaseHelper.cs" />
6768
<Compile Include="DatabaseOpenerTests.cs" />

0 commit comments

Comments
 (0)