refactor: included checkifnull function, added sql schema for the signature database

This commit is contained in:
Michael Green
2023-02-26 23:48:27 +11:00
parent c9e55c03f8
commit e9b7e146be
4 changed files with 207 additions and 212 deletions

View File

@@ -47,8 +47,6 @@ foreach (string commandLineArg in commandLineArgs)
}
}
tosecXML = "/Users/michaelgreen/Downloads/TOSEC - DAT Pack - Complete (3764) (TOSEC-v2023-01-23)/TOSEC";
// check if configPath is valid and create it if not
if (!Directory.Exists(configPath))
{
@@ -98,78 +96,15 @@ if (Directory.Exists(tosecXML))
{
sql = "SELECT * FROM signatures_sources WHERE sourcemd5=@sourcemd5";
dbDict = new Dictionary<string, object>();
if (tosecObject.Name != null)
{
dbDict.Add("name", tosecObject.Name);
}
else
{
dbDict.Add("name", "");
}
if (tosecObject.Description != null)
{
dbDict.Add("description", tosecObject.Description);
}
else
{
dbDict.Add("description", "");
}
if (tosecObject.Category != null)
{
dbDict.Add("category", tosecObject.Category);
}
else
{
dbDict.Add("category", "");
}
if (tosecObject.Version != null)
{
dbDict.Add("version", tosecObject.Version);
}
else
{
dbDict.Add("version", "");
}
if (tosecObject.Author != null)
{
dbDict.Add("author", tosecObject.Author);
}
else
{
dbDict.Add("author", "");
}
if (tosecObject.Email != null)
{
dbDict.Add("email", tosecObject.Email);
}
else
{
dbDict.Add("email", "");
}
if (tosecObject.Homepage != null)
{
dbDict.Add("homepage", tosecObject.Homepage);
}
else
{
dbDict.Add("homepage", "");
}
if (tosecObject.Url != null)
{
dbDict.Add("uri", tosecObject.Url.ToString());
}
else
{
dbDict.Add("uri", "");
}
if (tosecObject.SourceType != null)
{
dbDict.Add("sourcetype", tosecObject.SourceType);
}
else
{
dbDict.Add("sourcetype", "");
}
dbDict.Add("name", Common.ReturnValueIfNull(tosecObject.Name, ""));
dbDict.Add("description", Common.ReturnValueIfNull(tosecObject.Description, ""));
dbDict.Add("category", Common.ReturnValueIfNull(tosecObject.Category, ""));
dbDict.Add("version", Common.ReturnValueIfNull(tosecObject.Version, ""));
dbDict.Add("author", Common.ReturnValueIfNull(tosecObject.Author, ""));
dbDict.Add("email", Common.ReturnValueIfNull(tosecObject.Email, ""));
dbDict.Add("homepage", Common.ReturnValueIfNull(tosecObject.Homepage, ""));
dbDict.Add("uri", Common.ReturnValueIfNull(tosecObject.Url, ""));
dbDict.Add("sourcetype", Common.ReturnValueIfNull(tosecObject.SourceType, ""));
dbDict.Add("sourcemd5", tosecObject.SourceMd5);
dbDict.Add("sourcesha1", tosecObject.SourceSHA1);
@@ -201,87 +136,18 @@ if (Directory.Exists(tosecXML))
// set up game dictionary
dbDict = new Dictionary<string, object>();
if (gameObject.Name != null)
{
dbDict.Add("name", gameObject.Name);
} else
{
dbDict.Add("name", "");
}
if (gameObject.Description != null)
{
dbDict.Add("description", gameObject.Description);
}
else
{
dbDict.Add("description", "");
}
if (gameObject.Year != null)
{
dbDict.Add("year", gameObject.Year);
}
else
{
dbDict.Add("year", "");
}
if (gameObject.Publisher != null)
{
dbDict.Add("publisher", gameObject.Publisher);
}
else
{
dbDict.Add("publisher", "");
}
dbDict.Add("name", Common.ReturnValueIfNull(gameObject.Name, ""));
dbDict.Add("description", Common.ReturnValueIfNull(gameObject.Description, ""));
dbDict.Add("year", Common.ReturnValueIfNull(gameObject.Year, ""));
dbDict.Add("publisher", Common.ReturnValueIfNull(gameObject.Publisher, ""));
dbDict.Add("demo", (int)gameObject.Demo);
if (gameObject.System != null)
{
dbDict.Add("system", gameObject.System);
dbDict.Add("platform", gameObject.System);
}
else
{
dbDict.Add("system", "");
}
if (gameObject.SystemVariant != null)
{
dbDict.Add("systemvariant", gameObject.SystemVariant);
}
else
{
dbDict.Add("systemvariant", "");
}
if (gameObject.Video != null)
{
dbDict.Add("video", gameObject.Video);
}
else
{
dbDict.Add("video", "");
}
if (gameObject.Country != null)
{
dbDict.Add("country", gameObject.Country);
}
else
{
dbDict.Add("country", "");
}
if (gameObject.Language != null)
{
dbDict.Add("language", gameObject.Language);
}
else
{
dbDict.Add("language", "");
}
if (gameObject.Copyright != null)
{
dbDict.Add("copyright", gameObject.Copyright);
}
else
{
dbDict.Add("copyright", "");
}
dbDict.Add("system", Common.ReturnValueIfNull(gameObject.System, ""));
dbDict.Add("platform", Common.ReturnValueIfNull(gameObject.System, ""));
dbDict.Add("systemvariant", Common.ReturnValueIfNull(gameObject.SystemVariant, ""));
dbDict.Add("video", Common.ReturnValueIfNull(gameObject.Video, ""));
dbDict.Add("country", Common.ReturnValueIfNull(gameObject.Country, ""));
dbDict.Add("language", Common.ReturnValueIfNull(gameObject.Language, ""));
dbDict.Add("copyright", Common.ReturnValueIfNull(gameObject.Copyright, ""));
// store platform
int gameSystem = 0;
@@ -354,46 +220,13 @@ if (Directory.Exists(tosecXML))
sql = "SELECT * FROM signatures_roms WHERE gameid=@gameid AND md5=@md5";
dbDict = new Dictionary<string, object>();
dbDict.Add("gameid", gameId);
if (romObject.Name != null)
{
dbDict.Add("name", romObject.Name);
} else
{
dbDict.Add("name", "");
}
if (romObject.Size != null)
{
dbDict.Add("size", romObject.Size);
}
else
{
dbDict.Add("size", 0);
}
if (romObject.Crc != null)
{
dbDict.Add("crc", romObject.Crc);
}
else
{
dbDict.Add("name", "");
}
dbDict.Add("name", Common.ReturnValueIfNull(romObject.Name, ""));
dbDict.Add("size", Common.ReturnValueIfNull(romObject.Size, ""));
dbDict.Add("crc", Common.ReturnValueIfNull(romObject.Crc, ""));
dbDict.Add("md5", romObject.Md5);
if (romObject.Sha1 != null)
{
dbDict.Add("sha1", romObject.Sha1);
}
else
{
dbDict.Add("sha1", "");
}
if (romObject.DevelopmentStatus != null)
{
dbDict.Add("developmentstatus", romObject.DevelopmentStatus);
}
else
{
dbDict.Add("developmentstatus", "");
}
dbDict.Add("sha1", Common.ReturnValueIfNull(romObject.Sha1, ""));
dbDict.Add("developmentstatus", Common.ReturnValueIfNull(romObject.DevelopmentStatus, ""));
if (romObject.flags != null)
{
if (romObject.flags.Count > 0)
@@ -401,30 +234,16 @@ if (Directory.Exists(tosecXML))
dbDict.Add("flags", Newtonsoft.Json.JsonConvert.SerializeObject(romObject.flags));
} else
{
dbDict.Add("flags", "{ }");
dbDict.Add("flags", "[ ]");
}
}
else
{
dbDict.Add("flags", "{ }");
dbDict.Add("flags", "[ ]");
}
dbDict.Add("romtype", (int)romObject.RomType);
if (romObject.RomTypeMedia != null)
{
dbDict.Add("romtypemedia", romObject.RomTypeMedia);
}
else
{
dbDict.Add("romtypemedia", "");
}
if (romObject.MediaLabel != null)
{
dbDict.Add("medialabel", romObject.MediaLabel);
}
else
{
dbDict.Add("medialabel", "");
}
dbDict.Add("romtypemedia", Common.ReturnValueIfNull(romObject.RomTypeMedia, ""));
dbDict.Add("medialabel", Common.ReturnValueIfNull(romObject.MediaLabel, ""));
sigDB = db.ExecuteCMD(sql, dbDict);
if (sigDB.Rows.Count == 0)

24
gaseous-tools/Common.cs Normal file
View File

@@ -0,0 +1,24 @@
using System;
namespace gaseous_tools
{
public class Common
{
/// <summary>
/// Returns IfNullValue if the ObjectToCheck is null
/// </summary>
/// <param name="ObjectToCheck">Any nullable object to check for null</param>
/// <param name="IfNullValue">Any object to return if ObjectToCheck is null</param>
/// <returns></returns>
static public object ReturnValueIfNull(object? ObjectToCheck, object IfNullValue)
{
if (ObjectToCheck == null)
{
return IfNullValue;
} else
{
return ObjectToCheck;
}
}
}
}

View File

@@ -0,0 +1,144 @@
-- MySQL dump 10.13 Distrib 8.0.32, for macos13.0 (arm64)
--
-- Host: localhost Database: gaseous
-- ------------------------------------------------------
-- Server version 8.0.32
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `signatures_games`
--
DROP TABLE IF EXISTS `signatures_games`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `signatures_games` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`year` varchar(15) DEFAULT NULL,
`publisherid` int DEFAULT NULL,
`demo` int DEFAULT NULL,
`systemid` int DEFAULT NULL,
`systemvariant` varchar(100) DEFAULT NULL,
`video` varchar(10) DEFAULT NULL,
`country` varchar(5) DEFAULT NULL,
`language` varchar(5) DEFAULT NULL,
`copyright` varchar(15) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `publisher_idx` (`publisherid`),
KEY `system_idx` (`systemid`),
KEY `ingest_idx` (`name`,`year`,`publisherid`,`systemid`,`country`,`language`) USING BTREE,
CONSTRAINT `publisher` FOREIGN KEY (`publisherid`) REFERENCES `signatures_publishers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `system` FOREIGN KEY (`systemid`) REFERENCES `signatures_platforms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1134279 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `signatures_platforms`
--
DROP TABLE IF EXISTS `signatures_platforms`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `signatures_platforms` (
`id` int NOT NULL AUTO_INCREMENT,
`platform` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idsignatures_platforms_UNIQUE` (`id`),
KEY `platforms_idx` (`platform`,`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1091 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `signatures_publishers`
--
DROP TABLE IF EXISTS `signatures_publishers`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `signatures_publishers` (
`id` int NOT NULL AUTO_INCREMENT,
`publisher` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `publisher_idx` (`publisher`,`id`)
) ENGINE=InnoDB AUTO_INCREMENT=71898 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `signatures_roms`
--
DROP TABLE IF EXISTS `signatures_roms`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `signatures_roms` (
`id` int NOT NULL AUTO_INCREMENT,
`gameid` int DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`size` bigint DEFAULT NULL,
`crc` varchar(20) DEFAULT NULL,
`md5` varchar(100) DEFAULT NULL,
`sha1` varchar(100) DEFAULT NULL,
`developmentstatus` varchar(100) DEFAULT NULL,
`flags` json DEFAULT NULL,
`romtype` int DEFAULT NULL,
`romtypemedia` varchar(100) DEFAULT NULL,
`medialabel` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`,`gameid`) USING BTREE,
KEY `gameid_idx` (`gameid`),
KEY `flags_idx` ((cast(`flags` as char(255) array))),
CONSTRAINT `gameid` FOREIGN KEY (`gameid`) REFERENCES `signatures_games` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2587448 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `signatures_sources`
--
DROP TABLE IF EXISTS `signatures_sources`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `signatures_sources` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`category` varchar(45) DEFAULT NULL,
`version` varchar(45) DEFAULT NULL,
`author` varchar(255) DEFAULT NULL,
`email` varchar(45) DEFAULT NULL,
`homepage` varchar(45) DEFAULT NULL,
`url` varchar(45) DEFAULT NULL,
`sourcetype` varchar(45) DEFAULT NULL,
`sourcemd5` varchar(45) DEFAULT NULL,
`sourcesha1` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `sourcemd5_idx` (`sourcemd5`,`id`) USING BTREE,
KEY `sourcesha1_idx` (`sourcesha1`,`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5968 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2023-02-26 23:40:56

View File

@@ -10,4 +10,12 @@
<ItemGroup>
<PackageReference Include="MySql.Data" Version="8.0.32" />
</ItemGroup>
<ItemGroup>
<None Remove="Database\" />
<None Remove="Database\MySQL\" />
</ItemGroup>
<ItemGroup>
<Folder Include="Database\" />
<Folder Include="Database\MySQL\" />
</ItemGroup>
</Project>