Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Plugins/tools~/fix-library-path.sed
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ s/class SQLite3/partial class SQLite3/
# Add [RequiredMember] attribute to ColumnInfo.Name property
# This fixes managed code stripping removing its setter method
s/Column ("name")/Column ("name"), UnityEngine.Scripting.RequiredMember/

# Use main thread TaskScheduler in WebGL
s/TaskScheduler\.Default/SQLiteAsyncExtensions.TaskScheduler/
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,4 @@ Third-party code:
This is be useful for libraries making raw queries.
- `SQLite3.SetDirectory` is only defined in Windows platforms.
- Adds a `[RequiredMember]` attribute to `ColumnInfo.Name` property, fixing errors on columns when managed code stripping is enabled.
- Changes the `TaskScheduler` used by the async API on WebGL to one that executes tasks on Unity's main thread.
23 changes: 23 additions & 0 deletions Runtime/SQLiteAsyncExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System.Threading.Tasks;
using UnityEngine;

namespace SQLite
{
public static class SQLiteAsyncExtensions
{
#if UNITY_WEBGL
// WebGL builds cannot use background threads, so use a
// TaskScheduler that executes tasks on Unity's main thread.
public static TaskScheduler TaskScheduler { get; private set; }

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
private static void InitializeTaskScheduler()
{
TaskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
}
#else
// On all other platforms, use the default TaskScheduler
public static TaskScheduler TaskScheduler => TaskScheduler.Default;
#endif
}
}
11 changes: 11 additions & 0 deletions Runtime/SQLiteAsyncExtensions.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions Runtime/sqlite-net/SQLiteAsync.cs
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ public Task CloseAsync ()
{
return Task.Factory.StartNew (() => {
SQLiteConnectionPool.Shared.CloseConnection (_connectionString);
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, SQLiteAsyncExtensions.TaskScheduler);
}

Task<T> ReadAsync<T> (Func<SQLiteConnectionWithLock, T> read)
Expand All @@ -225,7 +225,7 @@ Task<T> ReadAsync<T> (Func<SQLiteConnectionWithLock, T> read)
using (conn.Lock ()) {
return read (conn);
}
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, SQLiteAsyncExtensions.TaskScheduler);
}

Task<T> WriteAsync<T> (Func<SQLiteConnectionWithLock, T> write)
Expand All @@ -235,7 +235,7 @@ Task<T> WriteAsync<T> (Func<SQLiteConnectionWithLock, T> write)
using (conn.Lock ()) {
return write (conn);
}
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, SQLiteAsyncExtensions.TaskScheduler);
}

Task<T> TransactAsync<T> (Func<SQLiteConnectionWithLock, T> transact)
Expand All @@ -247,7 +247,7 @@ Task<T> TransactAsync<T> (Func<SQLiteConnectionWithLock, T> transact)
return transact (conn);
}
}
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, SQLiteAsyncExtensions.TaskScheduler);
}

/// <summary>
Expand Down Expand Up @@ -1201,7 +1201,7 @@ Task<U> ReadAsync<U> (Func<SQLiteConnectionWithLock, U> read)
using (conn.Lock ()) {
return read (conn);
}
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, SQLiteAsyncExtensions.TaskScheduler);
}

Task<U> WriteAsync<U> (Func<SQLiteConnectionWithLock, U> write)
Expand All @@ -1211,7 +1211,7 @@ Task<U> WriteAsync<U> (Func<SQLiteConnectionWithLock, U> write)
using (conn.Lock ()) {
return write (conn);
}
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
}, CancellationToken.None, TaskCreationOptions.DenyChildAttach, SQLiteAsyncExtensions.TaskScheduler);
}

/// <summary>
Expand Down