Skip to content

Commit 0aee315

Browse files
committed
Use ModuleInitializer for automatic Sqlite initialization
1 parent d3ab500 commit 0aee315

File tree

2 files changed

+12
-21
lines changed

2 files changed

+12
-21
lines changed

nuget/Sqlite_net.SourceGenerator/SQLiteFastColumnSetterGenerator.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,9 +191,13 @@ static void Execute(
191191
sb.AppendLine();
192192
sb.AppendLine($"namespace {rootNamespace}");
193193
sb.AppendLine("{");
194-
sb.AppendLine(" public static class SQLiteInitializer");
194+
sb.AppendLine(" [SQLite.Preserve(AllMembers = true)]");
195+
sb.AppendLine(" public static class SQLiteInitializer");
195196
sb.AppendLine(" {");
196197
sb.AppendLine(" private static bool initialized;");
198+
sb.AppendLine("#if NET5_0_OR_GREATER");
199+
sb.AppendLine(" [System.Runtime.CompilerServices.ModuleInitializer]");
200+
sb.AppendLine("#endif");
197201
sb.AppendLine(" public static void Init()");
198202
sb.AppendLine(" {");
199203
sb.AppendLine (" if (initialized)");

tests/SQLite.Tests/SourceGeneratorTest.cs

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ public class StringTest : BaseTest<string>
4848
{
4949
}
5050

51+
#if NET5_0_OR_GREATER
52+
#endif
5153
public class BaseTest<T>
5254
{
5355
[PrimaryKey]
@@ -124,8 +126,6 @@ public InnerTestDb (String path)
124126
[Test]
125127
public void SqliteInitializer_PrivateInnerTestSetter ()
126128
{
127-
SQLiteInitializer.Init ();
128-
129129
if (!SQLite.FastColumnSetter.customSetter.TryGetValue((typeof(PrivateInnerTestSetter), nameof(PrivateInnerTestSetter.Id)), out var setter))
130130
{
131131
Assert.IsTrue(true, "Should not be registered");
@@ -139,8 +139,6 @@ public void SqliteInitializer_PrivateInnerTestSetter ()
139139
[Test]
140140
public void SqliteInitializer_StringTestSetter ()
141141
{
142-
SQLiteInitializer.Init ();
143-
144142
if (SQLite.FastColumnSetter.customSetter.TryGetValue ((typeof (StringTest), nameof (StringTest.Id)), out var setter)) {
145143
Assert.IsTrue (true, "Should be registered");
146144
}
@@ -152,8 +150,6 @@ public void SqliteInitializer_StringTestSetter ()
152150
[Test]
153151
public void SqliteInitializer_InnerTestSetter ()
154152
{
155-
SQLiteInitializer.Init ();
156-
157153
if (SQLite.FastColumnSetter.customSetter.TryGetValue ((typeof (InnerTestSetter), nameof (InnerTestSetter.Id)), out var setter)) {
158154
Assert.IsTrue (true, "Should be registered");
159155
}
@@ -166,8 +162,6 @@ public void SqliteInitializer_InnerTestSetter ()
166162
[Test]
167163
public void SqliteInitializer_OuterTestSetter_ZRenamedA()
168164
{
169-
SQLiteInitializer.Init ();
170-
171165
if (SQLite.FastColumnSetter.customSetter.TryGetValue ((typeof (OuterTestSetter), "A"), out var setter)) {
172166
Assert.IsTrue (true, "Should be registered");
173167
}
@@ -179,8 +173,6 @@ public void SqliteInitializer_OuterTestSetter_ZRenamedA()
179173
[Test]
180174
public void SqliteInitializer_OuterTestSetter_NotWritable_NotRegistered()
181175
{
182-
SQLiteInitializer.Init ();
183-
184176
if (!SQLite.FastColumnSetter.customSetter.TryGetValue ((typeof (OuterTestSetter), nameof (OuterTestSetter.NotWritable)), out var setter)) {
185177
Assert.IsTrue (true, "Should not be registered (not writable)");
186178
}
@@ -192,8 +184,6 @@ public void SqliteInitializer_OuterTestSetter_NotWritable_NotRegistered()
192184
[Test]
193185
public void SqliteInitializer_OuterTestSetter_Ignore_NotRegistered ()
194186
{
195-
SQLiteInitializer.Init ();
196-
197187
if (!SQLite.FastColumnSetter.customSetter.TryGetValue ((typeof (OuterTestSetter), nameof (OuterTestSetter.Ignore)), out var setter)) {
198188
Assert.IsTrue (true, "Should not be registered (Ignore)");
199189
}
@@ -205,8 +195,6 @@ public void SqliteInitializer_OuterTestSetter_Ignore_NotRegistered ()
205195
[Test]
206196
public void SqliteInitializer_OuterTestSetter ()
207197
{
208-
SQLiteInitializer.Init ();
209-
210198
if (SQLite.FastColumnSetter.customSetter.TryGetValue ((typeof (OuterTestSetter), nameof (OuterTestSetter.Id)), out var setter)) {
211199
Assert.IsTrue(true, "Should not be registered");
212200
}
@@ -218,7 +206,6 @@ public void SqliteInitializer_OuterTestSetter ()
218206
[Test]
219207
public void SqliteInitializer_Inner_AndReadData()
220208
{
221-
SQLiteInitializer.Init();
222209
var mapperCount = FastColumnSetter.customSetter.Count;
223210

224211
var n = 20;
@@ -240,7 +227,7 @@ public void SqliteInitializer_Inner_AndReadData()
240227
[Test]
241228
public void SetFastColumnSetters_Inner_AndReadData_IsCalled()
242229
{
243-
SQLiteInitializer.Init ();
230+
244231
var mapperCount = FastColumnSetter.customSetter.Count;
245232

246233
var n = 20;
@@ -262,7 +249,7 @@ public void SetFastColumnSetters_Inner_AndReadData_IsCalled()
262249
[Test]
263250
public void SqliteInitializer_Outer_AndReadData ()
264251
{
265-
SQLiteInitializer.Init ();
252+
266253
var mapperCount = FastColumnSetter.customSetter.Count;
267254

268255
var n = 20;
@@ -284,7 +271,7 @@ public void SqliteInitializer_Outer_AndReadData ()
284271
[Test]
285272
public void SqliteInitializer_Outer_AndReadData_ZRenamedA()
286273
{
287-
SQLiteInitializer.Init ();
274+
288275
var mapperCount = FastColumnSetter.customSetter.Count;
289276

290277
var n = 20;
@@ -307,7 +294,7 @@ public void SqliteInitializer_Outer_AndReadData_ZRenamedA()
307294
[Test]
308295
public void SetFastColumnSetters_Outer_AndReadData_IsCalled ()
309296
{
310-
SQLiteInitializer.Init ();
297+
311298
var mapperCount = FastColumnSetter.customSetter.Count;
312299

313300
var n = 20;
@@ -329,7 +316,7 @@ public void SetFastColumnSetters_Outer_AndReadData_IsCalled ()
329316
[Test]
330317
public void SetFastColumnSetters_AllBasicTypes_Works ()
331318
{
332-
SQLiteInitializer.Init ();
319+
333320
var mapperCount = FastColumnSetter.customSetter.Count;
334321

335322
var n = 20;

0 commit comments

Comments
 (0)