Skip to content

Commit 56d5c46

Browse files
committed
fix(driverResolve Exception during PerformUpgrade using LogScriptOutput #577
- Drop non supported frames. (Netstandard 1.3/Mono) - Replace System.Data.SQLite with Microsoft.Data.SqLite - Breaking change `Create` removed from TemporarySQLiteDatabase, it is now implicit
1 parent d2c9014 commit 56d5c46

10 files changed

+48
-124
lines changed

src/Sample/Program.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using Microsoft.Data.Sqlite;
23

34
namespace SQLiteSampleApplication
45
{
@@ -55,7 +56,7 @@ static void TemporaryFileDb()
5556

5657
static void PermanentFileDb()
5758
{
58-
Microsoft.Data.Sqlite.SqliteConnection connection = new("Data Source=dbup.db");
59+
SqliteConnection connection = new("Data Source=dbup.db");
5960

6061
using (var database = new DbUp.SQLite.Helpers.SharedConnection(connection))
6162
{
@@ -98,4 +99,4 @@ static void Display(string dbType, DbUp.Engine.DatabaseUpgradeResult result, Tim
9899
}
99100
}
100101
}
101-
}
102+
}

src/Tests/ApprovalFiles/NoPublicApiChanges.Run.DotNet.verified.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ public class TemporarySQLiteDatabase : System.IDisposable
7171
public TemporarySQLiteDatabase(string name) { }
7272
public DbUp.SQLite.Helpers.SharedConnection SharedConnection { get; }
7373
public DbUp.Helpers.AdHocSqlRunner SqlRunner { get; }
74-
public void Create() { }
7574
public void Dispose() { }
7675
}
7776
}

src/Tests/ApprovalFiles/NoPublicApiChanges.Run.Net.verified.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ public class TemporarySQLiteDatabase : System.IDisposable
7171
public TemporarySQLiteDatabase(string name) { }
7272
public DbUp.SQLite.Helpers.SharedConnection SharedConnection { get; }
7373
public DbUp.Helpers.AdHocSqlRunner SqlRunner { get; }
74-
public void Create() { }
7574
public void Dispose() { }
7675
}
7776
}

src/Tests/SQLiteSupportTests.cs

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,43 @@
1-
#if !NETCORE
2-
using System;
3-
using System.Data.SQLite;
1+
using System;
42
using System.IO;
3+
using Shouldly;
54
using Xunit;
65

76
namespace DbUp.SQLite.Tests
87
{
98
public class SQLiteSupportTests
109
{
11-
static readonly string dbFilePath = Path.Combine(Environment.CurrentDirectory, "test.db");
10+
static readonly string DbFilePath = Path.Combine(Environment.CurrentDirectory, "test.db");
1211

1312
[Fact]
1413
public void CanUseSQLite()
1514
{
16-
var connectionString = string.Format("Data Source={0}; Version=3;", dbFilePath);
15+
var connectionString = $"Data Source={DbFilePath}; Version=3;";
1716

18-
if (!File.Exists(dbFilePath))
19-
{
20-
SQLiteConnection.CreateFile(dbFilePath);
21-
}
22-
23-
var upgrader = DeployChanges.To
17+
DeployChanges.To
2418
.SQLiteDatabase(connectionString)
2519
.WithScript("Script0001", "CREATE TABLE IF NOT EXISTS Foo (Id int)")
2620
.Build();
2721
}
22+
23+
[Fact]
24+
public void DoesNotExhibitSafeHandleError_Issue577()
25+
{
26+
var connectionString = "Data source=:memory:";
27+
28+
var upgrader =
29+
DeployChanges.To
30+
.SQLiteDatabase(connectionString)
31+
.WithScript("Script001", @"
32+
create table test (
33+
contact_id INTEGER PRIMARY KEY
34+
);
35+
")
36+
.LogScriptOutput()
37+
.LogToConsole()
38+
.Build();
39+
var result = upgrader.PerformUpgrade();
40+
result.Successful.ShouldBeTrue();
41+
}
2842
}
2943
}
30-
#endif

src/Tests/SQLiteTableJournalTests.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
#if !NETCORE
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
32
using System.Data;
4-
using System.Data.SQLite;
53
using DbUp.Engine;
64
using DbUp.Engine.Output;
75
using DbUp.Engine.Transactions;
86
using DbUp.Tests.Common;
7+
using Microsoft.Data.Sqlite;
98
using NSubstitute;
109
using Shouldly;
1110
using Xunit;
@@ -22,7 +21,7 @@ public void dbversion_is_zero_when_journal_table_not_exist()
2221
var command = Substitute.For<IDbCommand>();
2322
dbConnection.CreateCommand().Returns(command);
2423
var connectionManager = Substitute.For<IConnectionManager>();
25-
command.ExecuteScalar().Returns(x => { throw new SQLiteException("table not found"); });
24+
command.ExecuteScalar().Returns(x => throw new SqliteException("table not found",1));
2625
var consoleUpgradeLog = new ConsoleUpgradeLog();
2726
var journal = new SQLiteTableJournal(() => connectionManager, () => consoleUpgradeLog, "SchemaVersions");
2827

@@ -62,4 +61,3 @@ public void creates_a_new_journal_table_when_not_exist()
6261
}
6362
}
6463
}
65-
#endif

src/dbup-sqlite/Helpers/InMemorySQLiteDatabase.cs

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,7 @@
11
using System;
22
using DbUp.Engine.Transactions;
33
using DbUp.Helpers;
4-
5-
#if MONO
6-
using SQLiteConnection = Mono.Data.Sqlite.SqliteConnection;
7-
using SQLiteConnectionStringBuilder = Mono.Data.Sqlite.SqliteConnectionStringBuilder;
8-
using SQLiteJournalModeEnum = Mono.Data.Sqlite.SQLiteJournalModeEnum;
9-
#elif NETCORE
10-
using SQLiteConnection = Microsoft.Data.Sqlite.SqliteConnection;
11-
using SQLiteConnectionStringBuilder = Microsoft.Data.Sqlite.SqliteConnectionStringBuilder;
12-
#else
13-
using System.Data.SQLite;
14-
#endif
4+
using Microsoft.Data.Sqlite;
155

166
namespace DbUp.SQLite.Helpers
177
{
@@ -21,31 +11,23 @@ namespace DbUp.SQLite.Helpers
2111
public class InMemorySQLiteDatabase : IDisposable
2212
{
2313
readonly SQLiteConnectionManager connectionManager;
24-
readonly SQLiteConnection sharedConnection;
14+
readonly SqliteConnection sharedConnection;
2515

2616
/// <summary>
2717
/// Initializes a new instance of the <see cref="InMemorySQLiteDatabase"/> class.
2818
/// </summary>
2919
public InMemorySQLiteDatabase()
3020
{
31-
var connectionStringBuilder = new SQLiteConnectionStringBuilder
21+
var connectionStringBuilder = new SqliteConnectionStringBuilder
3222
{
3323
DataSource = ":memory:",
34-
#if !NETCORE
35-
Version = 3,
36-
DefaultTimeout = 5,
37-
#if MONO
38-
JournalMode = SQLiteJournalModeEnum.Off,
39-
#else
40-
JournalMode = SQLiteJournalModeEnum.Memory,
41-
#endif
42-
UseUTF16Encoding = true
43-
#endif
24+
Mode = SqliteOpenMode.Memory,
25+
ConnectionString = "PRAGMA encoding='UTF-16'; PRAGMA journal_mode='MEMORY';"
4426
};
4527
ConnectionString = connectionStringBuilder.ToString();
4628

4729
connectionManager = new SQLiteConnectionManager(connectionStringBuilder.ConnectionString);
48-
sharedConnection = new SQLiteConnection(connectionStringBuilder.ConnectionString);
30+
sharedConnection = new SqliteConnection(connectionStringBuilder.ConnectionString);
4931
sharedConnection.Open();
5032
SqlRunner = new AdHocSqlRunner(() => sharedConnection.CreateCommand(), new SQLiteObjectParser(), null, () => true);
5133
}

src/dbup-sqlite/Helpers/TemporarySQLiteDatabase.cs

Lines changed: 4 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,7 @@
11
using System;
22
using System.IO;
33
using DbUp.Helpers;
4-
5-
#if MONO
6-
using SQLiteConnection = Mono.Data.Sqlite.SqliteConnection;
7-
using SQLiteConnectionStringBuilder = Mono.Data.Sqlite.SqliteConnectionStringBuilder;
8-
using SQLiteJournalModeEnum = Mono.Data.Sqlite.SQLiteJournalModeEnum;
9-
#elif NETCORE
10-
using SQLiteConnection = Microsoft.Data.Sqlite.SqliteConnection;
11-
using SQLiteConnectionStringBuilder = Microsoft.Data.Sqlite.SqliteConnectionStringBuilder;
12-
#else
13-
using System.Data.SQLite;
14-
#endif
4+
using Microsoft.Data.Sqlite;
155

166
namespace DbUp.SQLite.Helpers
177
{
@@ -21,7 +11,7 @@ namespace DbUp.SQLite.Helpers
2111
public class TemporarySQLiteDatabase : IDisposable
2212
{
2313
readonly string dataSourcePath;
24-
readonly SQLiteConnection sqLiteConnection;
14+
readonly SqliteConnection sqLiteConnection;
2515

2616
/// <summary>
2717
/// Initializes a new instance of the <see cref="TemporarySQLiteDatabase"/> class.
@@ -31,22 +21,12 @@ public TemporarySQLiteDatabase(string name)
3121
{
3222
dataSourcePath = Path.Combine(Directory.GetCurrentDirectory(), name);
3323

34-
var connectionStringBuilder = new SQLiteConnectionStringBuilder
24+
var connectionStringBuilder = new SqliteConnectionStringBuilder
3525
{
3626
DataSource = name,
37-
#if !NETCORE
38-
Version = 3,
39-
DefaultTimeout = 5,
40-
#if MONO
41-
JournalMode = SQLiteJournalModeEnum.Off,
42-
#else
43-
JournalMode = SQLiteJournalModeEnum.Memory,
44-
#endif
45-
UseUTF16Encoding = true
46-
#endif
4727
};
4828

49-
sqLiteConnection = new SQLiteConnection(connectionStringBuilder.ConnectionString);
29+
sqLiteConnection = new SqliteConnection(connectionStringBuilder.ConnectionString);
5030
sqLiteConnection.Open();
5131
SharedConnection = new SharedConnection(sqLiteConnection);
5232
SqlRunner = new AdHocSqlRunner(() => sqLiteConnection.CreateCommand(), new SQLiteObjectParser(), null, () => true);
@@ -59,20 +39,6 @@ public TemporarySQLiteDatabase(string name)
5939

6040
public SharedConnection SharedConnection { get; }
6141

62-
/// <summary>
63-
/// Creates the database.
64-
/// </summary>
65-
public void Create()
66-
{
67-
#if !NETCORE
68-
var filePath = new FileInfo(dataSourcePath);
69-
if (!filePath.Exists)
70-
{
71-
SQLiteConnection.CreateFile(dataSourcePath);
72-
}
73-
#endif
74-
}
75-
7642
/// <summary>
7743
/// Deletes the database.
7844
/// </summary>
@@ -82,14 +48,6 @@ public void Dispose()
8248
if (!filePath.Exists) return;
8349
SharedConnection.Dispose();
8450
sqLiteConnection.Dispose();
85-
#if !NETCORE
86-
SQLiteConnection.ClearAllPools();
87-
88-
// SQLite requires all created sql connection/command objects to be disposed
89-
// in order to delete the database file
90-
GC.Collect(2, GCCollectionMode.Forced);
91-
System.Threading.Thread.Sleep(100);
92-
#endif
9351
File.Delete(dataSourcePath);
9452
}
9553
}

src/dbup-sqlite/SQLiteConnectionManager.cs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,7 @@
33
using System.Text.RegularExpressions;
44
using DbUp.Engine.Transactions;
55
using DbUp.SQLite.Helpers;
6-
#if MONO
7-
using SQLiteConnection = Mono.Data.Sqlite.SqliteConnection;
8-
#elif NETCORE
9-
using SQLiteConnection = Microsoft.Data.Sqlite.SqliteConnection;
10-
#else
11-
using System.Data.SQLite;
12-
#endif
6+
using Microsoft.Data.Sqlite;
137

148
namespace DbUp.SQLite
159
{
@@ -21,7 +15,7 @@ public class SQLiteConnectionManager : DatabaseConnectionManager
2115
/// <summary>
2216
/// Creates new SQLite Connection Manager
2317
/// </summary>
24-
public SQLiteConnectionManager(string connectionString) : base(l => new SQLiteConnection(connectionString))
18+
public SQLiteConnectionManager(string connectionString) : base(l => new SqliteConnection(connectionString))
2519
{
2620
}
2721

@@ -46,4 +40,4 @@ public override IEnumerable<string> SplitScriptIntoCommands(string scriptContent
4640
return scriptStatements;
4741
}
4842
}
49-
}
43+
}

src/dbup-sqlite/SQLiteScriptExecutor.cs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,7 @@
44
using DbUp.Engine.Output;
55
using DbUp.Engine.Transactions;
66
using DbUp.Support;
7-
8-
#if MONO
9-
using SQLiteException = Mono.Data.Sqlite.SqliteException;
10-
#elif NETCORE
11-
using SQLiteException = Microsoft.Data.Sqlite.SqliteException;
12-
#else
13-
using System.Data.SQLite;
14-
#endif
7+
using Microsoft.Data.Sqlite;
158

169
namespace DbUp.SQLite
1710
{
@@ -46,14 +39,10 @@ protected override void ExecuteCommandsWithinExceptionHandler(int index, SqlScri
4639
{
4740
executeCommand();
4841
}
49-
catch (SQLiteException exception)
42+
catch (SqliteException exception)
5043
{
5144
Log().WriteInformation("SQLite exception has occurred in script: '{0}'", script.Name);
52-
#if NETCORE
53-
Log().WriteError("Script block number: {0}; Error Code: {1}; Message: {2}", index, exception.SqliteErrorCode, exception.Message);
54-
#else
5545
Log().WriteError("Script block number: {0}; Error Code: {1}; Message: {2}", index, exception.ErrorCode, exception.Message);
56-
#endif
5746
Log().WriteError(exception.ToString());
5847
throw;
5948
}

src/dbup-sqlite/dbup-sqlite.csproj

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<Company>DbUp Contributors</Company>
77
<Product>DbUp</Product>
88
<Copyright>Copyright © DbUp Contributors 2015</Copyright>
9-
<TargetFrameworks>netstandard1.3;net462</TargetFrameworks>
9+
<TargetFrameworks>netstandard2.0;net462</TargetFrameworks>
1010
<AssemblyName>dbup-sqlite</AssemblyName>
1111
<RootNamespace>DbUp.SQLite</RootNamespace>
1212
<PackageId>dbup-sqlite</PackageId>
@@ -22,16 +22,7 @@
2222

2323
<ItemGroup>
2424
<PackageReference Include="dbup-core" Version="5.0.37"/>
25-
</ItemGroup>
26-
27-
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.3'">
28-
<PackageReference Include="Microsoft.Data.Sqlite" Version="1.0.1" />
29-
</ItemGroup>
30-
31-
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
32-
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.118" />
33-
<Reference Include="System" />
34-
<Reference Include="Microsoft.CSharp" />
25+
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.1" />
3526
</ItemGroup>
3627

3728
<ItemGroup>

0 commit comments

Comments
 (0)