View difference between Paste ID: BawvJGK8 and 9CB4Mn2J
SHOW: | | - or go back to the newest paste.
1
using System;
2
using System.Data.SQLite;
3
using System.IO;
4
using System.Linq;
5
using System.Threading;
6
using System.Threading.Tasks;
7
8
namespace ConsoleApplication1
9
{
10
	internal class Program
11
	{
12
		/// <summary>
13
		///     The main entry point for the application.
14
		/// </summary>
15
		[STAThread]
16
		private static void Main()
17
		{
18
			File.Delete("test.db3");
19
			//Thread.Sleep(20000);
20
			var cs = "data source=test.db3;";
21
			var sqLiteConnectionStringBuilder = new SQLiteConnectionStringBuilder(cs) { JournalMode = SQLiteJournalModeEnum.Wal };
22
			cs = sqLiteConnectionStringBuilder.ToString();
23
			var path = Environment.Is64BitProcess ? "x64" : "x86";
24
			var dllFullFileName = Path.Combine(path, "SQLite.Interop.dll");
25
			using (var connection = new SQLiteConnection(cs))
26
			{
27
				connection.Open();
28
				connection.EnableExtensions(true);
29
				connection.LoadExtension(dllFullFileName, "sqlite3_fts5_init");
30
				var extPath = Path.Combine(path, "stemmer5.dll");
31
				connection.LoadExtension(extPath);
32
				connection.EnableExtensions(false);
33
				using (var command = connection.CreateCommand())
34
				{
35
					command.CommandText = "CREATE VIRTUAL TABLE IF NOT EXISTS test USING FTS5(a,b,tokenize='snowball russian english', prefix = '1 2 3 4 5 6 7')";
36
					command.ExecuteScalar();
37
				}
38
			}
39
			Console.WriteLine("start");
40
			try
41
			{
42
				var test1 = Test1();
43
				var test = Test();
44
				Task.WaitAll(test, test1);
45
				Console.WriteLine("end");
46
				Console.ReadKey();
47
			}
48
			catch(Exception)
49
			{
50
				throw;
51
			}
52
		}
53
54
		private static async Task Test()
55
		{
56
			try
57
			{
58
				foreach (var VARIABLE in Enumerable.Range(0, 20))
59
				{
60
					var cs = "data source=test.db3;";
61
					var sqLiteConnectionStringBuilder = new SQLiteConnectionStringBuilder(cs) {JournalMode = SQLiteJournalModeEnum.Wal};
62
					cs = sqLiteConnectionStringBuilder.ToString();
63
					var path = Environment.Is64BitProcess ? "x64" : "x86";
64
					var dllFullFileName = Path.Combine(path, "SQLite.Interop.dll");
65
66
					using (var connection = new SQLiteConnection(cs))
67
					{
68
						await connection.OpenAsync().ConfigureAwait(false);
69
						connection.EnableExtensions(true);
70
						connection.LoadExtension(dllFullFileName, "sqlite3_fts5_init");
71
						var extPath = Path.Combine(path, "stemmer5.dll");
72
						connection.LoadExtension(extPath);
73
						connection.EnableExtensions(false);
74
						using (var command = connection.CreateCommand())
75
						{
76
							command.CommandText = "INSERT INTO TEST VALUES(@a, @b)";
77
							var parameter = command.CreateParameter();
78
							parameter.ParameterName = "@a";
79
							var parameter1 = command.CreateParameter();
80
							parameter1.ParameterName = "@b";
81
							command.Parameters.AddRange(new[] {parameter, parameter1});
82
							using (var transaction = connection.BeginTransaction())
83
							{
84
								foreach (var i in Enumerable.Range(0, 10000))
85
								{
86
									parameter.Value = i;
87
									parameter1.Value = i + i;
88
									await command.ExecuteScalarAsync().ConfigureAwait(false);
89
								}
90
								transaction.Commit();
91
							}
92
						}
93
					}
94
				}
95
			}
96
			catch(Exception ex)
97
			{
98
				Console.WriteLine(ex);
99
			}
100
		}
101
102
		private static async Task Test1()
103
		{
104
			try
105
			{
106
				await Task.Delay(1000).ConfigureAwait(false);
107
				var cs = "data source=test.db3;";
108
				var sqLiteConnectionStringBuilder = new SQLiteConnectionStringBuilder(cs) {JournalMode = SQLiteJournalModeEnum.Wal};
109
				cs = sqLiteConnectionStringBuilder.ToString();
110
				var path = Environment.Is64BitProcess ? "x64" : "x86";
111
				var dllFullFileName = Path.Combine(path, "SQLite.Interop.dll");
112
				foreach (var i in Enumerable.Range(0, 600))
113
				{
114
					using (var connection = new SQLiteConnection(cs))
115
					{
116
						await connection.OpenAsync().ConfigureAwait(false);
117
						connection.EnableExtensions(true);
118
						connection.LoadExtension(dllFullFileName, "sqlite3_fts5_init");
119
						var extPath = Path.Combine(path, "stemmer5.dll");
120
						connection.LoadExtension(extPath);
121
						connection.EnableExtensions(false);
122
						using (var command = connection.CreateCommand())
123
						{
124
							command.CommandText = "SELECT * FROM test";
125
							using (var dataReader = await command.ExecuteReaderAsync().ConfigureAwait(false))
126
							{
127
								while(await dataReader.ReadAsync().ConfigureAwait(false))
128
								{
129
									var l = await dataReader.GetFieldValueAsync<long>(0).ConfigureAwait(false);
130
									var l1 = await dataReader.GetFieldValueAsync<long>(0).ConfigureAwait(false);
131
								}
132
							}
133
						}
134
					}
135
				}
136
			}
137
			catch(Exception ex)
138
			{
139
				Console.WriteLine(ex);
140
			}
141
		}
142
	}
143
}