-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSystemDataSQLiteTestRun.cs
More file actions
146 lines (125 loc) · 4.72 KB
/
SystemDataSQLiteTestRun.cs
File metadata and controls
146 lines (125 loc) · 4.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using System;
using System.Data;
using System.Data.SQLite;
using System.Linq;
using Comparisons.SQLiteVSDoublets.Model;
namespace Comparisons.SQLiteVSDoublets.SystemDataSQLite
{
/// <summary>
/// <para>
/// Represents the System.Data.SQLite test run.
/// </para>
/// <para></para>
/// </summary>
/// <seealso cref="TestRun"/>
public class SystemDataSQLiteTestRun : TestRun
{
/// <summary>
/// <para>
/// The connection string.
/// </para>
/// <para></para>
/// </summary>
private readonly string _connectionString;
/// <summary>
/// <para>
/// Initializes a new <see cref="SystemDataSQLiteTestRun"/> instance.
/// </para>
/// <para></para>
/// </summary>
/// <param name="dbFilename">
/// <para>A db filename.</para>
/// <para></para>
/// </param>
public SystemDataSQLiteTestRun(string dbFilename) : base(dbFilename)
{
_connectionString = $"Data Source={dbFilename};Version=3;";
}
/// <summary>
/// <para>
/// Prepares this instance.
/// </para>
/// <para></para>
/// </summary>
public override void Prepare()
{
using var connection = new SQLiteConnection(_connectionString);
connection.Open();
const string createTableQuery = @"
CREATE TABLE IF NOT EXISTS BlogPosts (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Title TEXT NOT NULL UNIQUE,
Content TEXT NOT NULL,
PublicationDateTime TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
)";
using var command = new SQLiteCommand(createTableQuery, connection);
command.ExecuteNonQuery();
}
/// <summary>
/// <para>
/// Creates the list.
/// </para>
/// <para></para>
/// </summary>
public override void CreateList()
{
using var connection = new SQLiteConnection(_connectionString);
connection.Open();
using var transaction = connection.BeginTransaction();
const string insertQuery = @"
INSERT INTO BlogPosts (Title, Content, PublicationDateTime)
VALUES (@Title, @Content, @PublicationDateTime)";
using var command = new SQLiteCommand(insertQuery, connection, transaction);
var titleParam = command.Parameters.Add("@Title", DbType.String);
var contentParam = command.Parameters.Add("@Content", DbType.String);
var dateParam = command.Parameters.Add("@PublicationDateTime", DbType.String);
foreach (var blogPost in BlogPosts.List)
{
titleParam.Value = blogPost.Title;
contentParam.Value = blogPost.Content;
dateParam.Value = blogPost.PublicationDateTime.ToString("yyyy-MM-dd HH:mm:ss");
command.ExecuteNonQuery();
}
transaction.Commit();
}
/// <summary>
/// <para>
/// Reads the list.
/// </para>
/// <para></para>
/// </summary>
public override void ReadList()
{
using var connection = new SQLiteConnection(_connectionString);
connection.Open();
const string selectQuery = @"SELECT Id, Title, Content, PublicationDateTime FROM BlogPosts";
using var command = new SQLiteCommand(selectQuery, connection);
using var reader = command.ExecuteReader();
while (reader.Read())
{
var blogPost = new BlogPost
{
Id = reader.GetInt32("Id"),
Title = reader.GetString("Title"),
Content = reader.GetString("Content"),
PublicationDateTime = DateTime.Parse(reader.GetString("PublicationDateTime"))
};
ReadBlogPosts.Add(blogPost);
}
}
/// <summary>
/// <para>
/// Deletes the list.
/// </para>
/// <para></para>
/// </summary>
public override void DeleteList()
{
using var connection = new SQLiteConnection(_connectionString);
connection.Open();
const string deleteQuery = @"DELETE FROM BlogPosts";
using var command = new SQLiteCommand(deleteQuery, connection);
command.ExecuteNonQuery();
}
}
}