Switch to Microsoft.Data.Sqlite for arm64
There is a slight change the the way QueryResult works in order to satisfy the variances in the new library. Disposing of the command with the reader appears to solve this, and hopefully, with minimal impact to plugins.
This commit is contained in:
parent
699047d119
commit
c063aabbc0
4 changed files with 26 additions and 14 deletions
|
|
@ -65,13 +65,13 @@ namespace TShockAPI.DB
|
|||
try
|
||||
{
|
||||
db.Open();
|
||||
using (var com = db.CreateCommand())
|
||||
var com = db.CreateCommand(); // this will be disposed via the QueryResult instance
|
||||
{
|
||||
com.CommandText = query;
|
||||
for (int i = 0; i < args.Length; i++)
|
||||
com.AddParameter("@" + i, args[i]);
|
||||
|
||||
return new QueryResult(db, com.ExecuteReader());
|
||||
return new QueryResult(db, com.ExecuteReader(), com);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -117,13 +117,13 @@ namespace TShockAPI.DB
|
|||
{
|
||||
var db = olddb.CloneEx();
|
||||
db.Open();
|
||||
using (var com = db.CreateCommand())
|
||||
var com = db.CreateCommand(); // this will be disposed via the QueryResult instance
|
||||
{
|
||||
com.CommandText = query;
|
||||
foreach (var kv in values)
|
||||
com.AddParameter("@" + kv.Key, kv.Value);
|
||||
|
||||
return new QueryResult(db, com.ExecuteReader());
|
||||
return new QueryResult(db, com.ExecuteReader(), com);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -274,11 +274,13 @@ namespace TShockAPI.DB
|
|||
{
|
||||
public IDbConnection Connection { get; protected set; }
|
||||
public IDataReader Reader { get; protected set; }
|
||||
public IDbCommand Command { get; protected set; }
|
||||
|
||||
public QueryResult(IDbConnection conn, IDataReader reader)
|
||||
public QueryResult(IDbConnection conn, IDataReader reader, IDbCommand command)
|
||||
{
|
||||
Connection = conn;
|
||||
Reader = reader;
|
||||
Command = command;
|
||||
}
|
||||
|
||||
~QueryResult()
|
||||
|
|
@ -301,6 +303,11 @@ namespace TShockAPI.DB
|
|||
Reader.Dispose();
|
||||
Reader = null;
|
||||
}
|
||||
if (Command != null)
|
||||
{
|
||||
Command.Dispose();
|
||||
Command = null;
|
||||
}
|
||||
if (Connection != null)
|
||||
{
|
||||
Connection.Dispose();
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ using System.Linq;
|
|||
using System.Net;
|
||||
using System.Reflection;
|
||||
using MaxMind;
|
||||
using System.Data.SQLite;
|
||||
using MySql.Data.MySqlClient;
|
||||
using Newtonsoft.Json;
|
||||
using Rests;
|
||||
|
|
@ -261,7 +260,7 @@ namespace TShockAPI
|
|||
};
|
||||
// if sqlite.interop cannot be found, try and search the runtimes folder. this usually happens when debugging tsapi
|
||||
// since it does not have the dependency installed directly
|
||||
NativeLibrary.SetDllImportResolver(typeof(SQLiteConnection).Assembly, ResolveNativeDep);
|
||||
NativeLibrary.SetDllImportResolver(typeof(Microsoft.Data.Sqlite.SqliteConnection).Assembly, ResolveNativeDep);
|
||||
|
||||
Main.SettingsUnlock_WorldEvil = true;
|
||||
|
||||
|
|
@ -322,7 +321,7 @@ namespace TShockAPI
|
|||
{
|
||||
string sql = Path.Combine(SavePath, Config.Settings.SqliteDBPath);
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(sql));
|
||||
DB = new SQLiteConnection(string.Format("Data Source={0},Version=3", sql));
|
||||
DB = new Microsoft.Data.Sqlite.SqliteConnection(string.Format("Data Source={0}", sql));
|
||||
}
|
||||
else if (Config.Settings.StorageType.ToLower() == "mysql")
|
||||
{
|
||||
|
|
@ -440,9 +439,17 @@ namespace TShockAPI
|
|||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (Log is not null)
|
||||
{
|
||||
Log.ConsoleError("Fatal Startup Exception");
|
||||
Log.ConsoleError(ex.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Fatal Startup Exception");
|
||||
Console.WriteLine(ex.ToString());
|
||||
}
|
||||
Environment.Exit(1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,8 +30,7 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
|
||||
<PackageReference Include="MySql.Data" Version="8.0.28" />
|
||||
<PackageReference Include="SQLite" Version="3.13.0" />
|
||||
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.115.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="6.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -25,8 +25,7 @@
|
|||
<!-- match tshocks dependencies so that publishing outputs all files to ./bin -->
|
||||
<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
|
||||
<PackageReference Include="MySql.Data" Version="8.0.28" />
|
||||
<PackageReference Include="SQLite" Version="3.13.0" />
|
||||
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.115.5" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="6.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="MoveTShockDebug" AfterTargets="FinalCleanup;PostBuildEvent">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue