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