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
|
try
|
||||||
{
|
{
|
||||||
db.Open();
|
db.Open();
|
||||||
using (var com = db.CreateCommand())
|
var com = db.CreateCommand(); // this will be disposed via the QueryResult instance
|
||||||
{
|
{
|
||||||
com.CommandText = query;
|
com.CommandText = query;
|
||||||
for (int i = 0; i < args.Length; i++)
|
for (int i = 0; i < args.Length; i++)
|
||||||
com.AddParameter("@" + i, args[i]);
|
com.AddParameter("@" + i, args[i]);
|
||||||
|
|
||||||
return new QueryResult(db, com.ExecuteReader());
|
return new QueryResult(db, com.ExecuteReader(), com);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
@ -117,13 +117,13 @@ namespace TShockAPI.DB
|
||||||
{
|
{
|
||||||
var db = olddb.CloneEx();
|
var db = olddb.CloneEx();
|
||||||
db.Open();
|
db.Open();
|
||||||
using (var com = db.CreateCommand())
|
var com = db.CreateCommand(); // this will be disposed via the QueryResult instance
|
||||||
{
|
{
|
||||||
com.CommandText = query;
|
com.CommandText = query;
|
||||||
foreach (var kv in values)
|
foreach (var kv in values)
|
||||||
com.AddParameter("@" + kv.Key, kv.Value);
|
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 IDbConnection Connection { get; protected set; }
|
||||||
public IDataReader Reader { 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;
|
Connection = conn;
|
||||||
Reader = reader;
|
Reader = reader;
|
||||||
|
Command = command;
|
||||||
}
|
}
|
||||||
|
|
||||||
~QueryResult()
|
~QueryResult()
|
||||||
|
|
@ -301,6 +303,11 @@ namespace TShockAPI.DB
|
||||||
Reader.Dispose();
|
Reader.Dispose();
|
||||||
Reader = null;
|
Reader = null;
|
||||||
}
|
}
|
||||||
|
if (Command != null)
|
||||||
|
{
|
||||||
|
Command.Dispose();
|
||||||
|
Command = null;
|
||||||
|
}
|
||||||
if (Connection != null)
|
if (Connection != null)
|
||||||
{
|
{
|
||||||
Connection.Dispose();
|
Connection.Dispose();
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using MaxMind;
|
using MaxMind;
|
||||||
using System.Data.SQLite;
|
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Rests;
|
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
|
// 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
|
// 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;
|
Main.SettingsUnlock_WorldEvil = true;
|
||||||
|
|
||||||
|
|
@ -322,7 +321,7 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
string sql = Path.Combine(SavePath, Config.Settings.SqliteDBPath);
|
string sql = Path.Combine(SavePath, Config.Settings.SqliteDBPath);
|
||||||
Directory.CreateDirectory(Path.GetDirectoryName(sql));
|
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")
|
else if (Config.Settings.StorageType.ToLower() == "mysql")
|
||||||
{
|
{
|
||||||
|
|
@ -441,8 +440,16 @@ namespace TShockAPI
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log.ConsoleError("Fatal Startup Exception");
|
if (Log is not null)
|
||||||
Log.ConsoleError(ex.ToString());
|
{
|
||||||
|
Log.ConsoleError("Fatal Startup Exception");
|
||||||
|
Log.ConsoleError(ex.ToString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Fatal Startup Exception");
|
||||||
|
Console.WriteLine(ex.ToString());
|
||||||
|
}
|
||||||
Environment.Exit(1);
|
Environment.Exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
|
<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
|
||||||
<PackageReference Include="MySql.Data" Version="8.0.28" />
|
<PackageReference Include="MySql.Data" Version="8.0.28" />
|
||||||
<PackageReference Include="SQLite" Version="3.13.0" />
|
<PackageReference Include="Microsoft.Data.Sqlite" Version="6.0.3" />
|
||||||
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.115.5" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,7 @@
|
||||||
<!-- match tshocks dependencies so that publishing outputs all files to ./bin -->
|
<!-- match tshocks dependencies so that publishing outputs all files to ./bin -->
|
||||||
<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
|
<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
|
||||||
<PackageReference Include="MySql.Data" Version="8.0.28" />
|
<PackageReference Include="MySql.Data" Version="8.0.28" />
|
||||||
<PackageReference Include="SQLite" Version="3.13.0" />
|
<PackageReference Include="Microsoft.Data.Sqlite" Version="6.0.3" />
|
||||||
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.115.5" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<Target Name="MoveTShockDebug" AfterTargets="FinalCleanup;PostBuildEvent">
|
<Target Name="MoveTShockDebug" AfterTargets="FinalCleanup;PostBuildEvent">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue