diff --git a/DATabase/DATabase.csproj b/DATabase/DATabase.csproj index 32d43ba5..eb4449af 100644 --- a/DATabase/DATabase.csproj +++ b/DATabase/DATabase.csproj @@ -69,6 +69,7 @@ + diff --git a/DATabase/Helper/Database.cs b/DATabase/Helper/Database.cs new file mode 100644 index 00000000..68e68917 --- /dev/null +++ b/DATabase/Helper/Database.cs @@ -0,0 +1,94 @@ +using System; +using System.Data.SQLite; +using System.IO; + +namespace DATabase.Helper +{ + class Database + { + public static void EnsureDatabase(string db, string connectionString) + { + // Make sure the file exists + if (!File.Exists(db)) + { + SQLiteConnection.CreateFile(db); + } + + // Connect to the file + SQLiteConnection dbc = new SQLiteConnection(connectionString); + dbc.Open(); + try + { + // Make sure the database has the correct schema + string query = @" +CREATE TABLE IF NOT EXISTS checksums ( + 'file' INTEGER NOT NULL, + 'size' INTEGER NOT NULL DEFAULT -1, + 'crc' TEXT NOT NULL, + 'md5' TEXT NOT NULL, + 'sha1' TEXT NOT NULL, + PRIMARY KEY (file, size, crc, md5, sha1) +)"; + SQLiteCommand slc = new SQLiteCommand(query, dbc); + slc.ExecuteNonQuery(); + + query = @" +CREATE TABLE IF NOT EXISTS files ( + 'id' INTEGER PRIMARY KEY NOT NULL, + 'setid' INTEGER NOT NULL, + 'name' TEXT NOT NULL, + 'type' TEXT NOT NULL DEFAULT 'rom', + 'lastupdated' TEXT NOT NULL +)"; + slc = new SQLiteCommand(query, dbc); + slc.ExecuteNonQuery(); + + query = @" +CREATE TABLE IF NOT EXISTS games ( + 'id' INTEGER PRIMARY KEY NOT NULL, + 'system' INTEGER NOT NULL, + 'name' TEXT NOT NULL, + 'parent' INTEGER NOT NULL DEFAULT '0', + 'source' INTEGER NOT NULL DEFAULT '0' +)"; + slc = new SQLiteCommand(query, dbc); + slc.ExecuteNonQuery(); + + query = @" +CREATE TABLE IF NOT EXISTS parent ( + 'id' INTEGER PRIMARY KEY NOT NULL, + 'name' TEXT NOT NULL +)"; + slc = new SQLiteCommand(query, dbc); + slc.ExecuteNonQuery(); + + query = @" +CREATE TABLE IF NOT EXISTS sources ( + 'id' INTEGER PRIMARY KEY NOT NULL, + 'name' TEXT NOT NULL UNIQUE, + 'url' TEXT NOT NULL +)"; + slc = new SQLiteCommand(query, dbc); + slc.ExecuteNonQuery(); + + query = @" +CREATE TABLE IF NOT EXISTS systems ( + 'id' INTEGER PRIMARY KEY NOT NULL, + 'manufacturer' TEXT NOT NULL, + 'system' TEXT NOT NULL +)"; + slc = new SQLiteCommand(query, dbc); + slc.ExecuteNonQuery(); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + finally + { + // Close and return the database connection + dbc.Close(); + } + } + } +} diff --git a/DATabase/Program.cs b/DATabase/Program.cs index 69c58745..c72c5170 100644 --- a/DATabase/Program.cs +++ b/DATabase/Program.cs @@ -9,14 +9,13 @@ namespace DATabase { class Program { - private static string _connectionString = "Data Source=DATabase.sqlite;Version = 3;"; + private static string _dbName = "DATabase.sqlite"; + private static string _connectionString = "Data Source=" + _dbName + ";Version = 3;"; static void Main(string[] args) { - // Ensure the database is set up properly - EnsureDatabase(); - - // Make sure all mappings are created and ready to be used + // Perform initial setup and verification + Database.EnsureDatabase(_dbName, _connectionString); Remapping.CreateRemappings(); // If there's not enough arguments, show the help screen @@ -190,91 +189,6 @@ ORDER BY systems.manufacturer, systems.system"; return; } - private static void EnsureDatabase() - { - // Make sure the file exists - if (!File.Exists("DATabase.sqlite")) - { - SQLiteConnection.CreateFile("DATabase.sqlite"); - } - - // Connect to the file - SQLiteConnection dbc = new SQLiteConnection(_connectionString); - dbc.Open(); - try - { - // Make sure the database has the correct schema - string query = @" -CREATE TABLE IF NOT EXISTS checksums ( - 'file' INTEGER NOT NULL, - 'size' INTEGER NOT NULL DEFAULT -1, - 'crc' TEXT NOT NULL, - 'md5' TEXT NOT NULL, - 'sha1' TEXT NOT NULL, - PRIMARY KEY (file, size, crc, md5, sha1) -)"; - SQLiteCommand slc = new SQLiteCommand(query, dbc); - slc.ExecuteNonQuery(); - - query = @" -CREATE TABLE IF NOT EXISTS files ( - 'id' INTEGER PRIMARY KEY NOT NULL, - 'setid' INTEGER NOT NULL, - 'name' TEXT NOT NULL, - 'type' TEXT NOT NULL DEFAULT 'rom', - 'lastupdated' TEXT NOT NULL -)"; - slc = new SQLiteCommand(query, dbc); - slc.ExecuteNonQuery(); - - query = @" -CREATE TABLE IF NOT EXISTS games ( - 'id' INTEGER PRIMARY KEY NOT NULL, - 'system' INTEGER NOT NULL, - 'name' TEXT NOT NULL, - 'parent' INTEGER NOT NULL DEFAULT '0', - 'source' INTEGER NOT NULL DEFAULT '0' -)"; - slc = new SQLiteCommand(query, dbc); - slc.ExecuteNonQuery(); - - query = @" -CREATE TABLE IF NOT EXISTS parent ( - 'id' INTEGER PRIMARY KEY NOT NULL, - 'name' TEXT NOT NULL -)"; - slc = new SQLiteCommand(query, dbc); - slc.ExecuteNonQuery(); - - query = @" -CREATE TABLE IF NOT EXISTS sources ( - 'id' INTEGER PRIMARY KEY NOT NULL, - 'name' TEXT NOT NULL UNIQUE, - 'url' TEXT NOT NULL -)"; - slc = new SQLiteCommand(query, dbc); - slc.ExecuteNonQuery(); - - query = @" -CREATE TABLE IF NOT EXISTS systems ( - 'id' INTEGER PRIMARY KEY NOT NULL, - 'manufacturer' TEXT NOT NULL, - 'system' TEXT NOT NULL -)"; - slc = new SQLiteCommand(query, dbc); - slc.ExecuteNonQuery(); - } - catch (Exception ex) - { - Console.WriteLine(ex); - } - finally - { - // Close and return the database connection - dbc.Close(); - } - } - private static void Help () { Console.Write(@"