From 1381d5012508a3ccebcaf9392be1b091249787f4 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Mon, 10 Oct 2016 13:14:35 -0700 Subject: [PATCH] [RombaSharp] Romba db fixes --- RombaSharp/Partials/RombaSharp_Helpers.cs | 35 ++++++++++++----------- RombaSharp/Partials/RombaSharp_Inits.cs | 26 ++++++++++------- SabreTools.Helper/Tools/DatabaseTools.cs | 16 +++++------ 3 files changed, 42 insertions(+), 35 deletions(-) diff --git a/RombaSharp/Partials/RombaSharp_Helpers.cs b/RombaSharp/Partials/RombaSharp_Helpers.cs index 64db4c3a..8daacff5 100644 --- a/RombaSharp/Partials/RombaSharp_Helpers.cs +++ b/RombaSharp/Partials/RombaSharp_Helpers.cs @@ -230,6 +230,7 @@ namespace SabreTools private static void DisplayDBStats() { SqliteConnection dbc = new SqliteConnection(_connectionString); + dbc.Open(); // Total uncompressed size string query = "SELECT SUM(size) FROM data"; @@ -242,12 +243,12 @@ namespace SabreTools _logger.User("Total files: " + (long)slc.ExecuteScalar()); // Total number of files that exist - query = "SELECT COUNT(*) FROM data WHERE exists=1"; + query = "SELECT COUNT(*) FROM data WHERE indepot=1"; slc = new SqliteCommand(query, dbc); _logger.User("Total files in depots: " + (long)slc.ExecuteScalar()); // Total number of files that are missing - query = "SELECT COUNT(*) FROM data WHERE exists=0"; + query = "SELECT COUNT(*) FROM data WHERE indepot=0"; slc = new SqliteCommand(query, dbc); _logger.User("Total files missing: " + (long)slc.ExecuteScalar()); @@ -313,7 +314,7 @@ namespace SabreTools /// /// Populate or refresh the database information /// - /// Each hash has the following attributes: size, crc, md5, sha-1, dathash, existss + /// Each hash has the following attributes: size, crc, md5, sha-1, dathash, indepot private static void RefreshDatabase() { // Make sure the db is set @@ -344,9 +345,11 @@ namespace SabreTools // Create a List of dat hashes in the database (SHA-1) List databaseDats = new List(); - // Populate the List from the database - string query = "SELECT UNIQUE hash FROM dats"; SqliteConnection dbc = new SqliteConnection(_connectionString); + dbc.Open(); + + // Populate the List from the database + string query = "SELECT hash FROM dats"; SqliteCommand slc = new SqliteCommand(query, dbc); SqliteDataReader sldr = slc.ExecuteReader(); if (sldr.HasRows) @@ -399,9 +402,9 @@ namespace SabreTools foreach (Rom rom in tempdat.Files[romkey]) { query = "SELECT id FROM data WHERE size=" + rom.Size + " AND (" - + "(crc=\"" + rom.CRC + "\" OR value=\"null\")" - + " AND (md5=\"" + rom.MD5 + "\" OR value=\"null\")" - + " AND (sha1=\"" + rom.SHA1 + "\" OR value=\"null\"))"; + + "(crc=\"" + rom.CRC + "\" OR crc=\"null\")" + + " AND (md5=\"" + rom.MD5 + "\" OR md5=\"null\")" + + " AND (sha1=\"" + rom.SHA1 + "\" OR sha1=\"null\"))"; slc = new SqliteCommand(query, dbc); sldr = slc.ExecuteReader(); @@ -409,7 +412,7 @@ namespace SabreTools if (sldr.HasRows) { sldr.Read(); - string id = sldr.GetString(0); + long id = sldr.GetInt64(0); string squery = "SELECT * FROM dats WHERE id=" + id; SqliteCommand sslc = new SqliteCommand(squery, dbc); @@ -430,18 +433,18 @@ namespace SabreTools // If it doesn't exist, add the hash and the dat hash for a new id else { - string squery = "INSERT INTO data (size, crc, md5, sha1, exists) VALUES" - + " size=" + rom.Size + "," - + " crc=\"" + (rom.CRC == "" ? "null" : rom.CRC) + "\"," - + " md5=\"" + (rom.MD5 == "" ? "null" : rom.MD5) + "\"," - + " sha1=\"" + (rom.SHA1 == "" ? "null" : rom.SHA1) + "\"," - + " exists=0)"; + string squery = "INSERT INTO data (size, crc, md5, sha1, indepot) VALUES (" + + rom.Size + "," + + "\"" + (rom.CRC == "" ? "null" : rom.CRC) + "\"," + + "\"" + (rom.MD5 == "" ? "null" : rom.MD5) + "\"," + + "\"" + (rom.SHA1 == "" ? "null" : rom.SHA1) + "\"," + + "0)"; SqliteCommand sslc = new SqliteCommand(squery, dbc); sslc.ExecuteNonQuery(); long id = -1; - squery = "SELECT last_insertConstants.Rowid()"; + squery = @"select last_insert_rowid()"; sslc = new SqliteCommand(squery, dbc); id = (long)sslc.ExecuteScalar(); diff --git a/RombaSharp/Partials/RombaSharp_Inits.cs b/RombaSharp/Partials/RombaSharp_Inits.cs index 47256fb8..48bdb697 100644 --- a/RombaSharp/Partials/RombaSharp_Inits.cs +++ b/RombaSharp/Partials/RombaSharp_Inits.cs @@ -38,8 +38,10 @@ namespace SabreTools DatFile need = new DatFile(); need.Files = new SortedDictionary>(); - // Now that we have the Dats, add the files to the database SqliteConnection dbc = new SqliteConnection(_connectionString); + dbc.Open(); + + // Now that we have the Dats, add the files to the database foreach (string key in df.Files.Keys) { List datItems = df.Files[key]; @@ -49,7 +51,7 @@ namespace SabreTools + "(crc=\"" + rom.CRC + "\" OR value=\"null\")" + " AND (md5=\"" + rom.MD5 + "\" OR value=\"null\")" + " AND (sha1=\"" + rom.SHA1 + "\" OR value=\"null\")" - + " AND exists=0"; + + " AND indepot=0"; SqliteCommand slc = new SqliteCommand(query, dbc); SqliteDataReader sldr = slc.ExecuteReader(); @@ -57,9 +59,9 @@ namespace SabreTools if (sldr.HasRows) { sldr.Read(); - string id = sldr.GetString(0); + long id = sldr.GetInt64(0); - string squery = "UPDATE data SET exists=1 WHERE id=" + id; + string squery = "UPDATE data SET indepot=1 WHERE id=" + id; SqliteCommand sslc = new SqliteCommand(squery, dbc); sslc.ExecuteNonQuery(); sslc.Dispose(); @@ -80,12 +82,12 @@ namespace SabreTools // If it doesn't exist, and we're not adding only needed files else if (!onlyNeeded) { - string squery = "INSERT INTO data (size, crc, md5, sha1, exists) VALUES" - + " size=" + rom.Size + "," - + " crc=\"" + (rom.CRC == "" ? "null" : rom.CRC) + "\"," - + " md5=\"" + (rom.MD5 == "" ? "null" : rom.MD5) + "\"," - + " sha1=\"" + (rom.SHA1 == "" ? "null" : rom.SHA1) + "\"," - + " exists=1)"; + string squery = "INSERT INTO data (size, crc, md5, sha1, indepot) VALUES (" + + rom.Size + "," + + "\"" + (rom.CRC == "" ? "null" : rom.CRC) + "\"," + + "\"" + (rom.MD5 == "" ? "null" : rom.MD5) + "\"," + + "\"" + (rom.SHA1 == "" ? "null" : rom.SHA1) + "\"," + + "1)"; SqliteCommand sslc = new SqliteCommand(squery, dbc); sslc.ExecuteNonQuery(); sslc.Dispose(); @@ -221,8 +223,10 @@ namespace SabreTools } } - // Now, search for each of them and return true or false for each SqliteConnection dbc = new SqliteConnection(_connectionString); + dbc.Open(); + + // Now, search for each of them and return true or false for each foreach (string input in crc) { string query = "SELECT * FROM data WHERE crc=\"" + input + "\""; diff --git a/SabreTools.Helper/Tools/DatabaseTools.cs b/SabreTools.Helper/Tools/DatabaseTools.cs index 1455080f..7f780fd1 100644 --- a/SabreTools.Helper/Tools/DatabaseTools.cs +++ b/SabreTools.Helper/Tools/DatabaseTools.cs @@ -73,12 +73,12 @@ namespace SabreTools.Helper { string query = @" CREATE TABLE IF NOT EXISTS data ( - 'id' INTEGER NOT NULL - 'size' INTEGER NOT NULL - 'crc' TEXT NOT NULL - 'md5' TEXT NOT NULL - 'sha1' TEXT NOT NULL - 'exists' INTEGER NOT NULL + 'id' INTEGER NOT NULL, + 'size' INTEGER NOT NULL, + 'crc' TEXT NOT NULL, + 'md5' TEXT NOT NULL, + 'sha1' TEXT NOT NULL, + 'indepot' INTEGER NOT NULL, PRIMARY KEY (id) )"; SqliteCommand slc = new SqliteCommand(query, dbc); @@ -86,8 +86,8 @@ CREATE TABLE IF NOT EXISTS data ( query = @" CREATE TABLE IF NOT EXISTS dats ( - 'id' INTEGER NOT NULL - 'hash' TEXT NOT NULL + 'id' INTEGER NOT NULL, + 'hash' TEXT NOT NULL, PRIMARY KEY (id, hash) )"; slc = new SqliteCommand(query, dbc);