[RombaSharp] Romba db fixes

This commit is contained in:
Matt Nadareski
2016-10-10 13:14:35 -07:00
parent c21dcece3d
commit 1381d50125
3 changed files with 42 additions and 35 deletions

View File

@@ -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
/// <summary>
/// Populate or refresh the database information
/// </summary>
/// <remarks>Each hash has the following attributes: size, crc, md5, sha-1, dathash, existss</remarks>
/// <remarks>Each hash has the following attributes: size, crc, md5, sha-1, dathash, indepot</remarks>
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<string> databaseDats = new List<string>();
// 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();

View File

@@ -38,8 +38,10 @@ namespace SabreTools
DatFile need = new DatFile();
need.Files = new SortedDictionary<string, List<DatItem>>();
// 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<DatItem> 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 + "\"";

View File

@@ -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);