Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 128156f

Browse files
authored
FbBlobStream (#127)
1 parent f00a9a9 commit 128156f

File tree

10 files changed

+796
-55
lines changed

10 files changed

+796
-55
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
using System.IO;
2+
using System.Security.Cryptography;
3+
using System.Threading.Tasks;
4+
using FirebirdSql.Data.TestsBase;
5+
using NUnit.Framework;
6+
7+
namespace FirebirdSql.Data.FirebirdClient.Tests;
8+
9+
[TestFixtureSource(typeof(FbServerTypeTestFixtureSource), nameof(FbServerTypeTestFixtureSource.Default))]
10+
[TestFixtureSource(typeof(FbServerTypeTestFixtureSource), nameof(FbServerTypeTestFixtureSource.Embedded))]
11+
public class BlobStreamTests : FbTestsBase
12+
{
13+
public BlobStreamTests(FbServerType serverType, bool compression, FbWireCrypt wireCrypt)
14+
: base(serverType, compression, wireCrypt)
15+
{ }
16+
17+
[Test]
18+
public async Task FbBlobStreamReadTest()
19+
{
20+
var id_value = RandomNumberGenerator.GetInt32(int.MinValue, int.MaxValue);
21+
var insert_values = RandomNumberGenerator.GetBytes(100000 * 4);
22+
23+
await using (var transaction = await Connection.BeginTransactionAsync())
24+
{
25+
await using (var insert = new FbCommand("INSERT INTO TEST (int_field, blob_field) values(@int_field, @blob_field)", Connection, transaction))
26+
{
27+
insert.Parameters.Add("@int_field", FbDbType.Integer).Value = id_value;
28+
insert.Parameters.Add("@blob_field", FbDbType.Binary).Value = insert_values;
29+
await insert.ExecuteNonQueryAsync();
30+
}
31+
await transaction.CommitAsync();
32+
}
33+
34+
await using (var select = new FbCommand($"SELECT blob_field FROM TEST WHERE int_field = {id_value}", Connection))
35+
{
36+
await using var reader = await select.ExecuteReaderAsync();
37+
while (await reader.ReadAsync())
38+
{
39+
await using var output = new MemoryStream();
40+
await using (var stream = reader.GetStream(0))
41+
{
42+
await stream.CopyToAsync(output);
43+
}
44+
45+
var select_values = output.ToArray();
46+
CollectionAssert.AreEqual(insert_values, select_values);
47+
}
48+
}
49+
}
50+
51+
[Test]
52+
public async Task FbBlobStreamWriteTest()
53+
{
54+
var id_value = RandomNumberGenerator.GetInt32(int.MinValue, int.MaxValue);
55+
var insert_values = RandomNumberGenerator.GetBytes(100000 * 4);
56+
57+
await using (var transaction = await Connection.BeginTransactionAsync())
58+
{
59+
await using (var insert = new FbCommand("INSERT INTO TEST (int_field, blob_field) values(@int_field, @blob_field)", Connection, transaction))
60+
{
61+
insert.Parameters.Add("@int_field", FbDbType.Integer).Value = id_value;
62+
insert.Parameters.Add("@blob_field", FbDbType.Binary).Value = insert_values;
63+
await insert.ExecuteNonQueryAsync();
64+
}
65+
66+
await using (var select = new FbCommand($"SELECT blob_field FROM TEST WHERE int_field = {id_value}", Connection, transaction))
67+
{
68+
await using var reader = await select.ExecuteReaderAsync();
69+
while (await reader.ReadAsync())
70+
{
71+
await using var stream = reader.GetStream(0);
72+
await stream.WriteAsync(insert_values);
73+
74+
break;
75+
}
76+
}
77+
await transaction.CommitAsync();
78+
}
79+
80+
await using (var select = new FbCommand($"SELECT blob_field FROM TEST WHERE int_field = {id_value}", Connection))
81+
{
82+
var select_values = (byte[])await select.ExecuteScalarAsync();
83+
CollectionAssert.AreEqual(insert_values, select_values);
84+
}
85+
}
86+
}

‎src/FirebirdSql.Data.FirebirdClient.Tests/FbBlobTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public async Task BinaryBlobTest()
4444
insert.Parameters.Add("@blob_field", FbDbType.Binary).Value = insert_values;
4545
await insert.ExecuteNonQueryAsync();
4646
}
47+
4748
await transaction.CommitAsync();
4849
}
4950

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /