From 8586d36942597766832012ea8638d2365993215d Mon Sep 17 00:00:00 2001 From: adelikat Date: Thu, 14 Nov 2019 17:19:42 -0600 Subject: [PATCH] cleanup SqlApi.cs and fix a disposable problem --- BizHawk.Client.ApiHawk/Classes/Api/SqlApi.cs | 76 ++++++++++---------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/BizHawk.Client.ApiHawk/Classes/Api/SqlApi.cs b/BizHawk.Client.ApiHawk/Classes/Api/SqlApi.cs index 4b66a827f9..0ee9bd451b 100644 --- a/BizHawk.Client.ApiHawk/Classes/Api/SqlApi.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/SqlApi.cs @@ -1,17 +1,12 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Data.SQLite; namespace BizHawk.Client.ApiHawk { public sealed class SqlApi : ISql { - public SqlApi() : base() - { } - - SQLiteConnection m_dbConnection; - string connectionString; + SQLiteConnection _dbConnection; public string CreateDatabase(string name) { @@ -20,75 +15,76 @@ namespace BizHawk.Client.ApiHawk SQLiteConnection.CreateFile(name); return "Database Created Successfully"; } - catch (SQLiteException sqlEX) + catch (SQLiteException sqlEx) { - return sqlEX.Message; + return sqlEx.Message; } - } public string OpenDatabase(string name) { try { - SQLiteConnectionStringBuilder connBuilder = new SQLiteConnectionStringBuilder(); - connBuilder.DataSource = name; - connBuilder.Version = 3; //SQLite version - connBuilder.JournalMode = SQLiteJournalModeEnum.Wal; //Allows for reads and writes to happen at the same time - connBuilder.DefaultIsolationLevel = System.Data.IsolationLevel.ReadCommitted; //This only helps make the database lock left. May be pointless now - connBuilder.SyncMode = SynchronizationModes.Off; //This shortens the delay for do synchronous calls. - m_dbConnection = new SQLiteConnection(connBuilder.ToString()); - connectionString = connBuilder.ToString(); - m_dbConnection.Open(); - m_dbConnection.Close(); + var connBuilder = new SQLiteConnectionStringBuilder + { + DataSource = name, + Version = 3, + JournalMode = SQLiteJournalModeEnum.Wal, // Allows for reads and writes to happen at the same time + DefaultIsolationLevel = System.Data.IsolationLevel.ReadCommitted, // This only helps make the database lock left. May be pointless now + SyncMode = SynchronizationModes.Off // This shortens the delay for do synchronous calls. + }; + + _dbConnection = new SQLiteConnection(connBuilder.ToString()); + _dbConnection.Open(); + _dbConnection.Close(); return "Database Opened Successfully"; } - catch (SQLiteException sqlEX) + catch (SQLiteException sqlEx) { - return sqlEX.Message; + return sqlEx.Message; } } public string WriteCommand(string query = "") { - if (query == "") + if (string.IsNullOrWhiteSpace(query)) { return "query is empty"; } + try { - m_dbConnection.Open(); - string sql = query; - SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection); + _dbConnection.Open(); + var command = new SQLiteCommand(query, _dbConnection); command.ExecuteNonQuery(); - m_dbConnection.Close(); + _dbConnection.Close(); return "Command ran successfully"; - } - catch (NullReferenceException nullEX) + catch (NullReferenceException) { return "Database not open."; } - catch (SQLiteException sqlEX) + catch (SQLiteException sqlEx) { - m_dbConnection.Close(); - return sqlEX.Message; + _dbConnection.Close(); + return sqlEx.Message; } } public dynamic ReadCommand(string query = "") { - if (query == "") + if (string.IsNullOrWhiteSpace(query)) { return "query is empty"; } + try { var table = new Dictionary(); - m_dbConnection.Open(); + _dbConnection.Open(); string sql = $"PRAGMA read_uncommitted =1;{query}"; - SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection); + using var command = new SQLiteCommand(sql, _dbConnection); SQLiteDataReader reader = command.ExecuteReader(); bool rows = reader.HasRows; long rowCount = 0; @@ -97,32 +93,34 @@ namespace BizHawk.Client.ApiHawk { columns.Add(reader.GetName(i)); } + while (reader.Read()) { for (int i = 0; i < reader.FieldCount; ++i) { table[$"{columns[i]} {rowCount}"] = reader.GetValue(i); } + rowCount += 1; } + reader.Close(); - m_dbConnection.Close(); + _dbConnection.Close(); if (rows == false) { return "No rows found"; } return table; - } catch (NullReferenceException) { return "Database not opened."; } - catch (SQLiteException sqlEX) + catch (SQLiteException sqlEx) { - m_dbConnection.Close(); - return sqlEX.Message; + _dbConnection.Close(); + return sqlEx.Message; } } }