wasCSharpSQLite – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | using System.Diagnostics; |
2 | using System.IO; |
||
3 | |||
4 | using Community.CsharpSQLite; |
||
5 | using Xunit; |
||
6 | using Community.CsharpSqlite; |
||
7 | |||
8 | namespace Community.CsharpSQLite.UnitTests |
||
9 | { |
||
10 | public class Stress |
||
11 | { |
||
12 | public Stress() |
||
13 | { |
||
14 | var db = OpenDB(databaseName); |
||
15 | InitializeTables(db); |
||
16 | db.CloseDatabase(); |
||
17 | } |
||
18 | |||
19 | private SQLiteDatabase OpenDB(string fileName) |
||
20 | { |
||
21 | if (File.Exists(fileName)) |
||
22 | File.Delete(fileName); |
||
23 | |||
24 | var db = new SQLiteDatabase(fileName); |
||
25 | |||
26 | for (int i = 0; i < PRAGMA_Commands.Length; i++) |
||
27 | { |
||
28 | db.ExecuteNonQuery(PRAGMA_Commands[i]); |
||
29 | } |
||
30 | |||
31 | return db; |
||
32 | } |
||
33 | |||
34 | private void InitializeTables(SQLiteDatabase db) |
||
35 | { |
||
36 | db.ExecuteNonQuery("BEGIN EXCLUSIVE"); |
||
37 | for (int i = 0; i < CREATE_Commands.Length; i++) |
||
38 | { |
||
39 | db.ExecuteNonQuery(CREATE_Commands[i]); |
||
40 | } |
||
41 | } |
||
42 | |||
43 | private const string databaseName = "test.db"; |
||
44 | |||
45 | private static readonly string[] CREATE_Commands = |
||
46 | { |
||
47 | "CREATE TABLE Root (intIndex INTEGER PRIMARY KEY, strIndex TEXT)", |
||
48 | "CREATE INDEX RootStrIndex ON Root (strIndex)" |
||
49 | }; |
||
50 | |||
51 | private static readonly string[] PRAGMA_Commands = |
||
52 | { |
||
53 | "PRAGMA synchronous = OFF", |
||
54 | "PRAGMA temp_store = MEMORY", |
||
55 | "PRAGMA journal_mode = OFF", |
||
56 | "PRAGMA locking_mode=EXCLUSIVE" |
||
57 | }; |
||
58 | |||
59 | private const string INSERT_Command = |
||
60 | "INSERT INTO Root VALUES (?,?)"; |
||
61 | |||
62 | [Fact] |
||
63 | public void InsertRecords() |
||
64 | { |
||
65 | var db = OpenDB(databaseName); |
||
66 | |||
67 | db.ExecuteNonQuery("BEGIN"); |
||
68 | var stmt = new SQLiteVdbe(db, INSERT_Command); |
||
69 | long key = 1999; |
||
70 | for (var i = 0; i < 1000; i++) |
||
71 | { |
||
72 | key = (3141592621L * key + 2718281829L) % 1000000007L; |
||
73 | stmt.Reset(); |
||
74 | stmt.BindLong(1, key); |
||
75 | stmt.BindText(2, key.ToString()); |
||
76 | stmt.ExecuteStep(); |
||
77 | } |
||
78 | stmt.Close(); |
||
79 | db.ExecuteNonQuery("END"); |
||
80 | |||
81 | db.CloseDatabase(); |
||
82 | } |
||
83 | |||
84 | [Fact] |
||
85 | public void Insert_1000() |
||
86 | { |
||
87 | for (var i = 0; i < 1000; i++) |
||
88 | { |
||
89 | Debug.WriteLine("Round " + i); |
||
90 | InsertRecords(); |
||
91 | } |
||
92 | } |
||
93 | } |
||
94 | } |