PageRenderTime 59ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/JMMServer/JMMServer/Databases/SQLServer.cs

https://bitbucket.org/gibwar/jmm-test
C# | 2578 lines | 2139 code | 432 blank | 7 comment | 41 complexity | 482d430d6403b838882d872b6557dd1b MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data.SqlClient;
  6. using System.IO;
  7. using Microsoft.Win32;
  8. using JMMServer.Entities;
  9. using JMMServer.Repositories;
  10. using NLog;
  11. using Microsoft.SqlServer.Management.Smo;
  12. using Microsoft.SqlServer.Management.Common;
  13. using System.Collections;
  14. namespace JMMServer.Databases
  15. {
  16. public class SQLServer
  17. {
  18. private static Logger logger = LogManager.GetCurrentClassLogger();
  19. public static string GetConnectionString()
  20. {
  21. return string.Format("Server={0};Database={1};UID={2};PWD={3};",
  22. ServerSettings.DatabaseServer, ServerSettings.DatabaseName, ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword);
  23. }
  24. public static bool DatabaseAlreadyExists()
  25. {
  26. int count = 0;
  27. string cmd = string.Format("Select count(*) from sysdatabases where name = '{0}'", ServerSettings.DatabaseName);
  28. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  29. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, "master")))
  30. {
  31. using (SqlCommand command = new SqlCommand(cmd, tmpConn))
  32. {
  33. tmpConn.Open();
  34. object result = command.ExecuteScalar();
  35. count = int.Parse(result.ToString());
  36. }
  37. }
  38. // if the Versions already exists, it means we have done this already
  39. if (count > 0) return true;
  40. return false;
  41. }
  42. public static ArrayList GetData(string sql)
  43. {
  44. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  45. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  46. {
  47. ArrayList rowList = new ArrayList();
  48. using (SqlCommand command = new SqlCommand(sql, tmpConn))
  49. {
  50. tmpConn.Open();
  51. SqlDataReader reader = command.ExecuteReader();
  52. while (reader.Read())
  53. {
  54. object[] values = new object[reader.FieldCount];
  55. reader.GetValues(values);
  56. rowList.Add(values);
  57. }
  58. }
  59. return rowList;
  60. }
  61. }
  62. public static bool TestLogin()
  63. {
  64. return true;
  65. }
  66. public static void CreateDatabaseOld()
  67. {
  68. if (DatabaseAlreadyExists()) return;
  69. SQLServerDatabase db = new SQLServerDatabase();
  70. string dataPath = GetDatabasePath(ServerSettings.DatabaseServer);
  71. db.DatabaseName = ServerSettings.DatabaseName;
  72. db.MdfFileName = ServerSettings.DatabaseName;
  73. db.MdfFilePath = Path.Combine(dataPath, ServerSettings.DatabaseName + ".mdf");
  74. db.MdfFileSize = "3072KB";
  75. db.MdfMaxFileSize = "UNLIMITED";
  76. db.MdfFileGrowth = "1024KB";
  77. db.LdfFileName = ServerSettings.DatabaseName + "_log";
  78. db.LdfFilePath = Path.Combine(dataPath, ServerSettings.DatabaseName + ".ldf");
  79. db.LdfFileSize = "3072KB";
  80. db.LdfMaxFileSize = "2048GB";
  81. db.LdfFileGrowth = "1024KB";
  82. StringBuilder sb = new StringBuilder();
  83. sb.AppendFormat("CREATE DATABASE [{0}] ON PRIMARY ", db.DatabaseName);
  84. sb.AppendFormat("( NAME = N'{0}', FILENAME = N'{1}' , SIZE = ", db.MdfFileName, db.MdfFilePath);
  85. sb.AppendFormat("{0} , MAXSIZE = {1}, FILEGROWTH = {2}", db.MdfFileSize, db.MdfMaxFileSize, db.MdfFileGrowth);
  86. sb.Append(" )");
  87. sb.Append(" LOG ON ");
  88. sb.AppendFormat("( NAME = N'{0}', FILENAME = N'{1}' , SIZE = ", db.LdfFileName, db.LdfFilePath);
  89. sb.AppendFormat("{0} , MAXSIZE = {1}, FILEGROWTH = {2}", db.LdfFileSize, db.LdfMaxFileSize, db.LdfFileGrowth);
  90. sb.Append(" ) ");
  91. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database=master", ServerSettings.DatabaseServer,
  92. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword)))
  93. {
  94. using (SqlCommand command = new SqlCommand(sb.ToString(), tmpConn))
  95. {
  96. tmpConn.Open();
  97. command.ExecuteNonQuery();
  98. Console.WriteLine("Database created successfully!");
  99. }
  100. }
  101. }
  102. public static void CreateDatabase()
  103. {
  104. if (DatabaseAlreadyExists()) return;
  105. ServerConnection conn = new ServerConnection(ServerSettings.DatabaseServer, ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword);
  106. Server srv = new Server(conn);
  107. Database db = new Database(srv, ServerSettings.DatabaseName);
  108. db.Create();
  109. }
  110. #region Schema Updates
  111. public static void UpdateSchema()
  112. {
  113. VersionsRepository repVersions = new VersionsRepository();
  114. Versions ver = repVersions.GetByVersionType(Constants.DatabaseTypeKey);
  115. if (ver == null) return;
  116. int versionNumber = 0;
  117. int.TryParse(ver.VersionValue, out versionNumber);
  118. try
  119. {
  120. UpdateSchema_002(versionNumber);
  121. UpdateSchema_003(versionNumber);
  122. UpdateSchema_004(versionNumber);
  123. UpdateSchema_005(versionNumber);
  124. UpdateSchema_006(versionNumber);
  125. UpdateSchema_007(versionNumber);
  126. UpdateSchema_008(versionNumber);
  127. UpdateSchema_009(versionNumber);
  128. UpdateSchema_010(versionNumber);
  129. UpdateSchema_011(versionNumber);
  130. UpdateSchema_012(versionNumber);
  131. UpdateSchema_013(versionNumber);
  132. UpdateSchema_014(versionNumber);
  133. UpdateSchema_015(versionNumber);
  134. UpdateSchema_016(versionNumber);
  135. UpdateSchema_017(versionNumber);
  136. UpdateSchema_018(versionNumber);
  137. UpdateSchema_019(versionNumber);
  138. UpdateSchema_020(versionNumber);
  139. UpdateSchema_021(versionNumber);
  140. UpdateSchema_022(versionNumber);
  141. UpdateSchema_023(versionNumber);
  142. UpdateSchema_024(versionNumber);
  143. UpdateSchema_025(versionNumber);
  144. UpdateSchema_026(versionNumber);
  145. }
  146. catch (Exception ex)
  147. {
  148. logger.ErrorException("Error updating schema: " + ex.ToString(), ex);
  149. }
  150. }
  151. private static void UpdateSchema_002(int currentVersionNumber)
  152. {
  153. int thisVersion = 2;
  154. if (currentVersionNumber >= thisVersion) return;
  155. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  156. List<string> cmds = new List<string>();
  157. cmds.Add("CREATE TABLE IgnoreAnime( " +
  158. " IgnoreAnimeID int IDENTITY(1,1) NOT NULL, " +
  159. " JMMUserID int NOT NULL, " +
  160. " AnimeID int NOT NULL, " +
  161. " IgnoreType int NOT NULL, " +
  162. " CONSTRAINT [PK_IgnoreAnime] PRIMARY KEY CLUSTERED " +
  163. " ( " +
  164. " IgnoreAnimeID ASC " +
  165. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  166. " ) ON [PRIMARY]");
  167. cmds.Add("CREATE UNIQUE INDEX UIX_IgnoreAnime_User_AnimeID ON IgnoreAnime(JMMUserID, AnimeID, IgnoreType)");
  168. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  169. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  170. {
  171. tmpConn.Open();
  172. foreach (string cmdTable in cmds)
  173. {
  174. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  175. {
  176. command.ExecuteNonQuery();
  177. }
  178. }
  179. }
  180. UpdateDatabaseVersion(thisVersion);
  181. }
  182. private static void UpdateSchema_003(int currentVersionNumber)
  183. {
  184. int thisVersion = 3;
  185. if (currentVersionNumber >= thisVersion) return;
  186. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  187. List<string> cmds = new List<string>();
  188. cmds.Add("CREATE TABLE Trakt_Friend( " +
  189. " Trakt_FriendID int IDENTITY(1,1) NOT NULL, " +
  190. " Username nvarchar(100) NOT NULL, " +
  191. " FullName nvarchar(100) NULL, " +
  192. " Gender nvarchar(100) NULL, " +
  193. " Age nvarchar(100) NULL, " +
  194. " Location nvarchar(100) NULL, " +
  195. " About nvarchar(MAX) NULL, " +
  196. " Joined int NOT NULL, " +
  197. " Avatar nvarchar(MAX) NULL, " +
  198. " Url nvarchar(MAX) NULL, " +
  199. " LastAvatarUpdate datetime NOT NULL, " +
  200. " CONSTRAINT [PK_Trakt_Friend] PRIMARY KEY CLUSTERED " +
  201. " ( " +
  202. " Trakt_FriendID ASC " +
  203. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  204. " ) ON [PRIMARY]");
  205. cmds.Add("CREATE UNIQUE INDEX UIX_Trakt_Friend_Username ON Trakt_Friend(Username)");
  206. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  207. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  208. {
  209. tmpConn.Open();
  210. foreach (string cmdTable in cmds)
  211. {
  212. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  213. {
  214. command.ExecuteNonQuery();
  215. }
  216. }
  217. }
  218. UpdateDatabaseVersion(thisVersion);
  219. }
  220. private static void UpdateSchema_004(int currentVersionNumber)
  221. {
  222. int thisVersion = 4;
  223. if (currentVersionNumber >= thisVersion) return;
  224. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  225. List<string> cmds = new List<string>();
  226. cmds.Add("ALTER TABLE AnimeGroup ADD DefaultAnimeSeriesID int NULL");
  227. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  228. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  229. {
  230. tmpConn.Open();
  231. foreach (string cmdTable in cmds)
  232. {
  233. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  234. {
  235. command.ExecuteNonQuery();
  236. }
  237. }
  238. }
  239. UpdateDatabaseVersion(thisVersion);
  240. }
  241. private static void UpdateSchema_005(int currentVersionNumber)
  242. {
  243. int thisVersion = 5;
  244. if (currentVersionNumber >= thisVersion) return;
  245. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  246. List<string> cmds = new List<string>();
  247. cmds.Add("ALTER TABLE JMMUser ADD CanEditServerSettings int NULL");
  248. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  249. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  250. {
  251. tmpConn.Open();
  252. foreach (string cmdTable in cmds)
  253. {
  254. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  255. {
  256. command.ExecuteNonQuery();
  257. }
  258. }
  259. }
  260. UpdateDatabaseVersion(thisVersion);
  261. }
  262. private static void UpdateSchema_006(int currentVersionNumber)
  263. {
  264. int thisVersion = 6;
  265. if (currentVersionNumber >= thisVersion) return;
  266. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  267. List<string> cmds = new List<string>();
  268. cmds.Add("ALTER TABLE VideoInfo ADD VideoBitDepth varchar(max) NULL");
  269. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  270. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  271. {
  272. tmpConn.Open();
  273. foreach (string cmdTable in cmds)
  274. {
  275. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  276. {
  277. command.ExecuteNonQuery();
  278. }
  279. }
  280. }
  281. UpdateDatabaseVersion(thisVersion);
  282. }
  283. private static void UpdateSchema_007(int currentVersionNumber)
  284. {
  285. int thisVersion = 7;
  286. if (currentVersionNumber >= thisVersion) return;
  287. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  288. DatabaseHelper.FixDuplicateTvDBLinks();
  289. DatabaseHelper.FixDuplicateTraktLinks();
  290. List<string> cmds = new List<string>();
  291. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_AniDB_TvDB_Season ON CrossRef_AniDB_TvDB(TvDBID, TvDBSeasonNumber)");
  292. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_AniDB_Trakt_Season ON CrossRef_AniDB_Trakt(TraktID, TraktSeasonNumber)");
  293. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_AniDB_Trakt_Anime ON CrossRef_AniDB_Trakt(AnimeID)");
  294. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  295. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  296. {
  297. tmpConn.Open();
  298. foreach (string cmdTable in cmds)
  299. {
  300. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  301. {
  302. command.ExecuteNonQuery();
  303. }
  304. }
  305. }
  306. UpdateDatabaseVersion(thisVersion);
  307. }
  308. private static void UpdateSchema_008(int currentVersionNumber)
  309. {
  310. int thisVersion = 8;
  311. if (currentVersionNumber >= thisVersion) return;
  312. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  313. DatabaseHelper.FixDuplicateTvDBLinks();
  314. DatabaseHelper.FixDuplicateTraktLinks();
  315. List<string> cmds = new List<string>();
  316. cmds.Add("ALTER TABLE jmmuser ALTER COLUMN Password NVARCHAR(150) NULL");
  317. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  318. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  319. {
  320. tmpConn.Open();
  321. foreach (string cmdTable in cmds)
  322. {
  323. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  324. {
  325. command.ExecuteNonQuery();
  326. }
  327. }
  328. }
  329. UpdateDatabaseVersion(thisVersion);
  330. }
  331. private static void UpdateSchema_009(int currentVersionNumber)
  332. {
  333. int thisVersion = 9;
  334. if (currentVersionNumber >= thisVersion) return;
  335. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  336. List<string> cmds = new List<string>();
  337. cmds.Add("ALTER TABLE ImportFolder ADD IsWatched int NULL");
  338. cmds.Add("UPDATE ImportFolder SET IsWatched = 1");
  339. cmds.Add("ALTER TABLE ImportFolder ALTER COLUMN IsWatched int NOT NULL");
  340. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  341. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  342. {
  343. tmpConn.Open();
  344. foreach (string cmdTable in cmds)
  345. {
  346. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  347. {
  348. command.ExecuteNonQuery();
  349. }
  350. }
  351. }
  352. UpdateDatabaseVersion(thisVersion);
  353. }
  354. private static void UpdateSchema_010(int currentVersionNumber)
  355. {
  356. int thisVersion = 10;
  357. if (currentVersionNumber >= thisVersion) return;
  358. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  359. List<string> cmds = new List<string>();
  360. cmds.Add("CREATE TABLE CrossRef_AniDB_MAL( " +
  361. " CrossRef_AniDB_MALID int IDENTITY(1,1) NOT NULL, " +
  362. " AnimeID int NOT NULL, " +
  363. " MALID int NOT NULL, " +
  364. " MALTitle nvarchar(500), " +
  365. " CrossRefSource int NOT NULL, " +
  366. " CONSTRAINT [PK_CrossRef_AniDB_MAL] PRIMARY KEY CLUSTERED " +
  367. " ( " +
  368. " CrossRef_AniDB_MALID ASC " +
  369. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  370. " ) ON [PRIMARY] ");
  371. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_AniDB_MAL_AnimeID ON CrossRef_AniDB_MAL(AnimeID)");
  372. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_AniDB_MAL_MALID ON CrossRef_AniDB_MAL(MALID)");
  373. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  374. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  375. {
  376. tmpConn.Open();
  377. foreach (string cmdTable in cmds)
  378. {
  379. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  380. {
  381. command.ExecuteNonQuery();
  382. }
  383. }
  384. }
  385. UpdateDatabaseVersion(thisVersion);
  386. }
  387. private static void UpdateSchema_011(int currentVersionNumber)
  388. {
  389. int thisVersion = 11;
  390. if (currentVersionNumber >= thisVersion) return;
  391. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  392. List<string> cmds = new List<string>();
  393. cmds.Add("DROP INDEX [UIX_CrossRef_AniDB_MAL_AnimeID] ON [dbo].[CrossRef_AniDB_MAL] WITH ( ONLINE = OFF )");
  394. cmds.Add("DROP INDEX [UIX_CrossRef_AniDB_MAL_MALID] ON [dbo].[CrossRef_AniDB_MAL] WITH ( ONLINE = OFF )");
  395. cmds.Add("DROP TABLE [dbo].[CrossRef_AniDB_MAL]");
  396. cmds.Add("CREATE TABLE CrossRef_AniDB_MAL( " +
  397. " CrossRef_AniDB_MALID int IDENTITY(1,1) NOT NULL, " +
  398. " AnimeID int NOT NULL, " +
  399. " MALID int NOT NULL, " +
  400. " MALTitle nvarchar(500), " +
  401. " StartEpisodeType int NOT NULL, " +
  402. " StartEpisodeNumber int NOT NULL, " +
  403. " CrossRefSource int NOT NULL, " +
  404. " CONSTRAINT [PK_CrossRef_AniDB_MAL] PRIMARY KEY CLUSTERED " +
  405. " ( " +
  406. " CrossRef_AniDB_MALID ASC " +
  407. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  408. " ) ON [PRIMARY] ");
  409. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_AniDB_MAL_MALID ON CrossRef_AniDB_MAL(MALID)");
  410. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_AniDB_MAL_Anime ON CrossRef_AniDB_MAL(AnimeID, StartEpisodeType, StartEpisodeNumber)");
  411. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  412. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  413. {
  414. tmpConn.Open();
  415. foreach (string cmdTable in cmds)
  416. {
  417. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  418. {
  419. command.ExecuteNonQuery();
  420. }
  421. }
  422. }
  423. UpdateDatabaseVersion(thisVersion);
  424. }
  425. private static void UpdateSchema_012(int currentVersionNumber)
  426. {
  427. int thisVersion = 12;
  428. if (currentVersionNumber >= thisVersion) return;
  429. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  430. List<string> cmds = new List<string>();
  431. cmds.Add("CREATE TABLE Playlist( " +
  432. " PlaylistID int IDENTITY(1,1) NOT NULL, " +
  433. " PlaylistName nvarchar(MAX) NULL, " +
  434. " PlaylistItems varchar(MAX) NULL, " +
  435. " DefaultPlayOrder int NOT NULL, " +
  436. " PlayWatched int NOT NULL, " +
  437. " PlayUnwatched int NOT NULL, " +
  438. " CONSTRAINT [PK_Playlist] PRIMARY KEY CLUSTERED " +
  439. " ( " +
  440. " PlaylistID ASC " +
  441. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  442. " ) ON [PRIMARY] ");
  443. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  444. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  445. {
  446. tmpConn.Open();
  447. foreach (string cmdTable in cmds)
  448. {
  449. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  450. {
  451. command.ExecuteNonQuery();
  452. }
  453. }
  454. }
  455. UpdateDatabaseVersion(thisVersion);
  456. }
  457. private static void UpdateSchema_013(int currentVersionNumber)
  458. {
  459. int thisVersion = 13;
  460. if (currentVersionNumber >= thisVersion) return;
  461. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  462. List<string> cmds = new List<string>();
  463. cmds.Add("ALTER TABLE AnimeSeries ADD SeriesNameOverride nvarchar(500) NULL");
  464. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  465. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  466. {
  467. tmpConn.Open();
  468. foreach (string cmdTable in cmds)
  469. {
  470. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  471. {
  472. command.ExecuteNonQuery();
  473. }
  474. }
  475. }
  476. UpdateDatabaseVersion(thisVersion);
  477. }
  478. private static void UpdateSchema_014(int currentVersionNumber)
  479. {
  480. int thisVersion = 14;
  481. if (currentVersionNumber >= thisVersion) return;
  482. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  483. List<string> cmds = new List<string>();
  484. cmds.Add("CREATE TABLE BookmarkedAnime( " +
  485. " BookmarkedAnimeID int IDENTITY(1,1) NOT NULL, " +
  486. " AnimeID int NOT NULL, " +
  487. " Priority int NOT NULL, " +
  488. " Notes nvarchar(MAX) NULL, " +
  489. " Downloading int NOT NULL, " +
  490. " CONSTRAINT [PK_BookmarkedAnime] PRIMARY KEY CLUSTERED " +
  491. " ( " +
  492. " BookmarkedAnimeID ASC " +
  493. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  494. " ) ON [PRIMARY] ");
  495. cmds.Add("CREATE UNIQUE INDEX UIX_BookmarkedAnime_AnimeID ON BookmarkedAnime(BookmarkedAnimeID)");
  496. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  497. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  498. {
  499. tmpConn.Open();
  500. foreach (string cmdTable in cmds)
  501. {
  502. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  503. {
  504. command.ExecuteNonQuery();
  505. }
  506. }
  507. }
  508. UpdateDatabaseVersion(thisVersion);
  509. }
  510. private static void UpdateSchema_015(int currentVersionNumber)
  511. {
  512. int thisVersion = 15;
  513. if (currentVersionNumber >= thisVersion) return;
  514. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  515. List<string> cmds = new List<string>();
  516. cmds.Add("ALTER TABLE VideoLocal ADD DateTimeCreated datetime NULL");
  517. cmds.Add("UPDATE VideoLocal SET DateTimeCreated = DateTimeUpdated");
  518. cmds.Add("ALTER TABLE VideoLocal ALTER COLUMN DateTimeCreated datetime NOT NULL");
  519. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  520. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  521. {
  522. tmpConn.Open();
  523. foreach (string cmdTable in cmds)
  524. {
  525. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  526. {
  527. command.ExecuteNonQuery();
  528. }
  529. }
  530. }
  531. UpdateDatabaseVersion(thisVersion);
  532. }
  533. private static void UpdateSchema_016(int currentVersionNumber)
  534. {
  535. int thisVersion = 16;
  536. if (currentVersionNumber >= thisVersion) return;
  537. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  538. List<string> cmds = new List<string>();
  539. cmds.Add("CREATE TABLE CrossRef_AniDB_TvDB_Episode( " +
  540. " CrossRef_AniDB_TvDB_EpisodeID int IDENTITY(1,1) NOT NULL, " +
  541. " AnimeID int NOT NULL, " +
  542. " AniDBEpisodeID int NOT NULL, " +
  543. " TvDBEpisodeID int NOT NULL, " +
  544. " CONSTRAINT [PK_CrossRef_AniDB_TvDB_Episode] PRIMARY KEY CLUSTERED " +
  545. " ( " +
  546. " CrossRef_AniDB_TvDB_EpisodeID ASC " +
  547. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  548. " ) ON [PRIMARY] ");
  549. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_AniDB_TvDB_Episode_AniDBEpisodeID ON CrossRef_AniDB_TvDB_Episode(AniDBEpisodeID)");
  550. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  551. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  552. {
  553. tmpConn.Open();
  554. foreach (string cmdTable in cmds)
  555. {
  556. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  557. {
  558. command.ExecuteNonQuery();
  559. }
  560. }
  561. }
  562. UpdateDatabaseVersion(thisVersion);
  563. }
  564. private static void UpdateSchema_017(int currentVersionNumber)
  565. {
  566. int thisVersion = 17;
  567. if (currentVersionNumber >= thisVersion) return;
  568. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  569. List<string> cmds = new List<string>();
  570. cmds.Add("CREATE TABLE AniDB_MylistStats( " +
  571. " AniDB_MylistStatsID int IDENTITY(1,1) NOT NULL, " +
  572. " Animes int NOT NULL, " +
  573. " Episodes int NOT NULL, " +
  574. " Files int NOT NULL, " +
  575. " SizeOfFiles bigint NOT NULL, " +
  576. " AddedAnimes int NOT NULL, " +
  577. " AddedEpisodes int NOT NULL, " +
  578. " AddedFiles int NOT NULL, " +
  579. " AddedGroups int NOT NULL, " +
  580. " LeechPct int NOT NULL, " +
  581. " GloryPct int NOT NULL, " +
  582. " ViewedPct int NOT NULL, " +
  583. " MylistPct int NOT NULL, " +
  584. " ViewedMylistPct int NOT NULL, " +
  585. " EpisodesViewed int NOT NULL, " +
  586. " Votes int NOT NULL, " +
  587. " Reviews int NOT NULL, " +
  588. " ViewiedLength int NOT NULL, " +
  589. " CONSTRAINT [PK_AniDB_MylistStats] PRIMARY KEY CLUSTERED " +
  590. " ( " +
  591. " AniDB_MylistStatsID ASC " +
  592. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  593. " ) ON [PRIMARY] ");
  594. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  595. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  596. {
  597. tmpConn.Open();
  598. foreach (string cmdTable in cmds)
  599. {
  600. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  601. {
  602. command.ExecuteNonQuery();
  603. }
  604. }
  605. }
  606. UpdateDatabaseVersion(thisVersion);
  607. }
  608. private static void UpdateSchema_018(int currentVersionNumber)
  609. {
  610. int thisVersion = 18;
  611. if (currentVersionNumber >= thisVersion) return;
  612. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  613. List<string> cmds = new List<string>();
  614. cmds.Add("CREATE TABLE FileFfdshowPreset( " +
  615. " FileFfdshowPresetID int IDENTITY(1,1) NOT NULL, " +
  616. " Hash varchar(50) NOT NULL, " +
  617. " FileSize bigint NOT NULL, " +
  618. " Preset nvarchar(MAX) NULL, " +
  619. " CONSTRAINT [PK_FileFfdshowPreset] PRIMARY KEY CLUSTERED " +
  620. " ( " +
  621. " FileFfdshowPresetID ASC " +
  622. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  623. " ) ON [PRIMARY] ");
  624. cmds.Add("CREATE UNIQUE INDEX UIX_FileFfdshowPreset_Hash ON FileFfdshowPreset(Hash, FileSize)");
  625. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  626. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  627. {
  628. tmpConn.Open();
  629. foreach (string cmdTable in cmds)
  630. {
  631. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  632. {
  633. command.ExecuteNonQuery();
  634. }
  635. }
  636. }
  637. UpdateDatabaseVersion(thisVersion);
  638. }
  639. private static void UpdateSchema_019(int currentVersionNumber)
  640. {
  641. int thisVersion = 19;
  642. if (currentVersionNumber >= thisVersion) return;
  643. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  644. List<string> cmds = new List<string>();
  645. cmds.Add("ALTER TABLE AniDB_Anime ADD DisableExternalLinksFlag int NULL");
  646. cmds.Add("UPDATE AniDB_Anime SET DisableExternalLinksFlag = 0");
  647. cmds.Add("ALTER TABLE AniDB_Anime ALTER COLUMN DisableExternalLinksFlag int NOT NULL");
  648. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  649. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  650. {
  651. tmpConn.Open();
  652. foreach (string cmdTable in cmds)
  653. {
  654. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  655. {
  656. command.ExecuteNonQuery();
  657. }
  658. }
  659. }
  660. UpdateDatabaseVersion(thisVersion);
  661. }
  662. private static void UpdateSchema_020(int currentVersionNumber)
  663. {
  664. int thisVersion = 20;
  665. if (currentVersionNumber >= thisVersion) return;
  666. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  667. List<string> cmds = new List<string>();
  668. cmds.Add("ALTER TABLE AniDB_File ADD FileVersion int NULL");
  669. cmds.Add("UPDATE AniDB_File SET FileVersion = 1");
  670. cmds.Add("ALTER TABLE AniDB_File ALTER COLUMN FileVersion int NOT NULL");
  671. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  672. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  673. {
  674. tmpConn.Open();
  675. foreach (string cmdTable in cmds)
  676. {
  677. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  678. {
  679. command.ExecuteNonQuery();
  680. }
  681. }
  682. }
  683. UpdateDatabaseVersion(thisVersion);
  684. }
  685. private static void UpdateSchema_021(int currentVersionNumber)
  686. {
  687. int thisVersion = 21;
  688. if (currentVersionNumber >= thisVersion) return;
  689. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  690. List<string> cmds = new List<string>();
  691. cmds.Add("CREATE TABLE RenameScript( " +
  692. " RenameScriptID int IDENTITY(1,1) NOT NULL, " +
  693. " ScriptName nvarchar(MAX) NULL, " +
  694. " Script nvarchar(MAX) NULL, " +
  695. " IsEnabledOnImport int NOT NULL, " +
  696. " CONSTRAINT [PK_RenameScript] PRIMARY KEY CLUSTERED " +
  697. " ( " +
  698. " RenameScriptID ASC " +
  699. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  700. " ) ON [PRIMARY] ");
  701. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  702. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  703. {
  704. tmpConn.Open();
  705. foreach (string cmdTable in cmds)
  706. {
  707. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  708. {
  709. command.ExecuteNonQuery();
  710. }
  711. }
  712. }
  713. UpdateDatabaseVersion(thisVersion);
  714. }
  715. private static void UpdateSchema_022(int currentVersionNumber)
  716. {
  717. int thisVersion = 22;
  718. if (currentVersionNumber >= thisVersion) return;
  719. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  720. List<string> cmds = new List<string>();
  721. cmds.Add("ALTER TABLE AniDB_File ADD IsCensored int NULL");
  722. cmds.Add("ALTER TABLE AniDB_File ADD IsDeprecated int NULL");
  723. cmds.Add("ALTER TABLE AniDB_File ADD InternalVersion int NULL");
  724. cmds.Add("UPDATE AniDB_File SET IsCensored = 0");
  725. cmds.Add("UPDATE AniDB_File SET IsDeprecated = 0");
  726. cmds.Add("UPDATE AniDB_File SET InternalVersion = 1");
  727. cmds.Add("ALTER TABLE AniDB_File ALTER COLUMN IsCensored int NOT NULL");
  728. cmds.Add("ALTER TABLE AniDB_File ALTER COLUMN IsDeprecated int NOT NULL");
  729. cmds.Add("ALTER TABLE AniDB_File ALTER COLUMN InternalVersion int NOT NULL");
  730. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  731. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  732. {
  733. tmpConn.Open();
  734. foreach (string cmdTable in cmds)
  735. {
  736. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  737. {
  738. command.ExecuteNonQuery();
  739. }
  740. }
  741. }
  742. UpdateDatabaseVersion(thisVersion);
  743. }
  744. private static void UpdateSchema_023(int currentVersionNumber)
  745. {
  746. int thisVersion = 23;
  747. if (currentVersionNumber >= thisVersion) return;
  748. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  749. List<string> cmds = new List<string>();
  750. cmds.Add("ALTER TABLE VideoLocal ADD IsVariation int NULL");
  751. cmds.Add("UPDATE VideoLocal SET IsVariation = 0");
  752. cmds.Add("ALTER TABLE VideoLocal ALTER COLUMN IsVariation int NOT NULL");
  753. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  754. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  755. {
  756. tmpConn.Open();
  757. foreach (string cmdTable in cmds)
  758. {
  759. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  760. {
  761. command.ExecuteNonQuery();
  762. }
  763. }
  764. }
  765. UpdateDatabaseVersion(thisVersion);
  766. }
  767. private static void UpdateSchema_024(int currentVersionNumber)
  768. {
  769. int thisVersion = 24;
  770. if (currentVersionNumber >= thisVersion) return;
  771. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  772. List<string> cmds = new List<string>();
  773. cmds.Add("CREATE TABLE AniDB_Recommendation ( " +
  774. " AniDB_RecommendationID int IDENTITY(1,1) NOT NULL, " +
  775. " AnimeID int NOT NULL, " +
  776. " UserID int NOT NULL, " +
  777. " RecommendationType int NOT NULL, " +
  778. " RecommendationText nvarchar(MAX), " +
  779. " CONSTRAINT [PK_AniDB_Recommendation] PRIMARY KEY CLUSTERED " +
  780. " ( " +
  781. " AniDB_RecommendationID ASC " +
  782. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  783. " ) ON [PRIMARY] ");
  784. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Recommendation ON AniDB_Recommendation(AnimeID, UserID)");
  785. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  786. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  787. {
  788. tmpConn.Open();
  789. foreach (string cmdTable in cmds)
  790. {
  791. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  792. {
  793. command.ExecuteNonQuery();
  794. }
  795. }
  796. }
  797. UpdateDatabaseVersion(thisVersion);
  798. }
  799. private static void UpdateSchema_025(int currentVersionNumber)
  800. {
  801. int thisVersion = 25;
  802. if (currentVersionNumber >= thisVersion) return;
  803. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  804. List<string> cmds = new List<string>();
  805. cmds.Add("update CrossRef_File_Episode SET CrossRefSource=1 WHERE Hash IN (Select Hash from ANIDB_File) AND CrossRefSource=2");
  806. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  807. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  808. {
  809. tmpConn.Open();
  810. foreach (string cmdTable in cmds)
  811. {
  812. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  813. {
  814. command.ExecuteNonQuery();
  815. }
  816. }
  817. }
  818. UpdateDatabaseVersion(thisVersion);
  819. }
  820. private static void UpdateSchema_026(int currentVersionNumber)
  821. {
  822. int thisVersion = 26;
  823. if (currentVersionNumber >= thisVersion) return;
  824. logger.Info("Updating schema to VERSION: {0}", thisVersion);
  825. List<string> cmds = new List<string>();
  826. cmds.Add("CREATE TABLE LogMessage ( " +
  827. " LogMessageID int IDENTITY(1,1) NOT NULL, " +
  828. " LogType nvarchar(MAX) NOT NULL, " +
  829. " LogContent nvarchar(MAX) NOT NULL, " +
  830. " LogDate datetime NOT NULL, " +
  831. " CONSTRAINT [PK_LogMessage] PRIMARY KEY CLUSTERED " +
  832. " ( " +
  833. " LogMessageID ASC " +
  834. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  835. " ) ON [PRIMARY] ");
  836. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  837. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  838. {
  839. tmpConn.Open();
  840. foreach (string cmdTable in cmds)
  841. {
  842. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  843. {
  844. command.ExecuteNonQuery();
  845. }
  846. }
  847. }
  848. UpdateDatabaseVersion(thisVersion);
  849. }
  850. private static void UpdateDatabaseVersion(int versionNumber)
  851. {
  852. VersionsRepository repVersions = new VersionsRepository();
  853. Versions ver = repVersions.GetByVersionType(Constants.DatabaseTypeKey);
  854. if (ver == null) return;
  855. ver.VersionValue = versionNumber.ToString();
  856. repVersions.Save(ver);
  857. }
  858. #endregion
  859. #region Create Initial Schema
  860. public static void CreateInitialSchema()
  861. {
  862. int count = 0;
  863. string cmd = string.Format("Select count(*) from sysobjects where name = 'Versions'");
  864. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  865. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  866. {
  867. using (SqlCommand command = new SqlCommand(cmd, tmpConn))
  868. {
  869. tmpConn.Open();
  870. object result = command.ExecuteScalar();
  871. count = int.Parse(result.ToString());
  872. }
  873. }
  874. // if the Versions already exists, it means we have done this already
  875. if (count > 0) return;
  876. //Create all the commands to be executed
  877. List<string> commands = new List<string>();
  878. commands.AddRange(CreateTableString_Versions());
  879. commands.AddRange(CreateTableString_AniDB_Anime());
  880. commands.AddRange(CreateTableString_AniDB_Anime_Category());
  881. commands.AddRange(CreateTableString_AniDB_Anime_Character());
  882. commands.AddRange(CreateTableString_AniDB_Anime_Relation());
  883. commands.AddRange(CreateTableString_AniDB_Anime_Review());
  884. commands.AddRange(CreateTableString_AniDB_Anime_Similar());
  885. commands.AddRange(CreateTableString_AniDB_Anime_Tag());
  886. commands.AddRange(CreateTableString_AniDB_Anime_Title());
  887. commands.AddRange(CreateTableString_AniDB_Category());
  888. commands.AddRange(CreateTableString_AniDB_Character());
  889. commands.AddRange(CreateTableString_AniDB_Character_Seiyuu());
  890. commands.AddRange(CreateTableString_AniDB_Seiyuu());
  891. commands.AddRange(CreateTableString_AniDB_Episode());
  892. commands.AddRange(CreateTableString_AniDB_File());
  893. commands.AddRange(CreateTableString_AniDB_GroupStatus());
  894. commands.AddRange(CreateTableString_AniDB_ReleaseGroup());
  895. commands.AddRange(CreateTableString_AniDB_Review());
  896. commands.AddRange(CreateTableString_AniDB_Tag());
  897. commands.AddRange(CreateTableString_AnimeEpisode());
  898. commands.AddRange(CreateTableString_AnimeGroup());
  899. commands.AddRange(CreateTableString_AnimeSeries());
  900. commands.AddRange(CreateTableString_CommandRequest());
  901. commands.AddRange(CreateTableString_CrossRef_AniDB_Other());
  902. commands.AddRange(CreateTableString_CrossRef_AniDB_TvDB());
  903. commands.AddRange(CreateTableString_CrossRef_File_Episode());
  904. commands.AddRange(CreateTableString_CrossRef_Languages_AniDB_File());
  905. commands.AddRange(CreateTableString_CrossRef_Subtitles_AniDB_File());
  906. commands.AddRange(CreateTableString_FileNameHash());
  907. commands.AddRange(CreateTableString_Language());
  908. commands.AddRange(CreateTableString_ImportFolder());
  909. commands.AddRange(CreateTableString_ScheduledUpdate());
  910. commands.AddRange(CreateTableString_VideoInfo());
  911. commands.AddRange(CreateTableString_VideoLocal());
  912. commands.AddRange(CreateTableString_DuplicateFile());
  913. commands.AddRange(CreateTableString_GroupFilter());
  914. commands.AddRange(CreateTableString_GroupFilterCondition());
  915. commands.AddRange(CreateTableString_AniDB_Vote());
  916. commands.AddRange(CreateTableString_TvDB_ImageFanart());
  917. commands.AddRange(CreateTableString_TvDB_ImageWideBanner());
  918. commands.AddRange(CreateTableString_TvDB_ImagePoster());
  919. commands.AddRange(CreateTableString_TvDB_Episode());
  920. commands.AddRange(CreateTableString_TvDB_Series());
  921. commands.AddRange(CreateTableString_AniDB_Anime_DefaultImage());
  922. commands.AddRange(CreateTableString_MovieDB_Movie());
  923. commands.AddRange(CreateTableString_MovieDB_Poster());
  924. commands.AddRange(CreateTableString_MovieDB_Fanart());
  925. commands.AddRange(CreateTableString_JMMUser());
  926. commands.AddRange(CreateTableString_Trakt_Episode());
  927. commands.AddRange(CreateTableString_Trakt_ImagePoster());
  928. commands.AddRange(CreateTableString_Trakt_ImageFanart());
  929. commands.AddRange(CreateTableString_Trakt_Show());
  930. commands.AddRange(CreateTableString_Trakt_Season());
  931. commands.AddRange(CreateTableString_CrossRef_AniDB_Trakt());
  932. commands.AddRange(CreateTableString_AnimeEpisode_User());
  933. commands.AddRange(CreateTableString_AnimeSeries_User());
  934. commands.AddRange(CreateTableString_AnimeGroup_User());
  935. commands.AddRange(CreateTableString_VideoLocal_User());
  936. //commands.AddRange(CreateTableString_CrossRef_AnimeEpisode_Hash());
  937. using (SqlConnection tmpConn = new SqlConnection(string.Format("Server={0};User ID={1};Password={2};database={3}", ServerSettings.DatabaseServer,
  938. ServerSettings.DatabaseUsername, ServerSettings.DatabasePassword, ServerSettings.DatabaseName)))
  939. {
  940. tmpConn.Open();
  941. foreach (string cmdTable in commands)
  942. {
  943. using (SqlCommand command = new SqlCommand(cmdTable, tmpConn))
  944. {
  945. command.ExecuteNonQuery();
  946. }
  947. }
  948. }
  949. Console.WriteLine("Creating version...");
  950. Versions ver1 = new Versions();
  951. ver1.VersionType = Constants.DatabaseTypeKey;
  952. ver1.VersionValue = "1";
  953. VersionsRepository repVer = new VersionsRepository();
  954. repVer.Save(ver1);
  955. }
  956. public static List<string> CreateTableString_Versions()
  957. {
  958. List<string> cmds = new List<string>();
  959. cmds.Add("CREATE TABLE [Versions]( " +
  960. " [VersionsID] [int] IDENTITY(1,1) NOT NULL, " +
  961. " [VersionType] [varchar](100) NOT NULL, " +
  962. " [VersionValue] [varchar](100) NOT NULL, " +
  963. " CONSTRAINT [PK_Versions] PRIMARY KEY CLUSTERED " +
  964. " ( " +
  965. " [VersionsID] ASC " +
  966. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  967. " ) ON [PRIMARY] ");
  968. cmds.Add("CREATE UNIQUE INDEX UIX_Versions_VersionType ON Versions(VersionType)");
  969. return cmds;
  970. }
  971. public static List<string> CreateTableString_AniDB_Anime()
  972. {
  973. List<string> cmds = new List<string>();
  974. cmds.Add("CREATE TABLE AniDB_Anime( " +
  975. " AniDB_AnimeID int IDENTITY(1,1) NOT NULL, " +
  976. " AnimeID int NOT NULL, " +
  977. " EpisodeCount int NOT NULL, " +
  978. " AirDate datetime NULL, " +
  979. " EndDate datetime NULL, " +
  980. " URL varchar(max) NULL, " +
  981. " Picname varchar(max) NULL, " +
  982. " BeginYear int NOT NULL, " +
  983. " EndYear int NOT NULL, " +
  984. " AnimeType int NOT NULL, " +
  985. " MainTitle nvarchar(500) NOT NULL, " +
  986. " AllTitles nvarchar(1500) NOT NULL, " +
  987. " AllCategories nvarchar(MAX) NOT NULL, " +
  988. " AllTags nvarchar(MAX) NOT NULL, " +
  989. " Description varchar(max) NOT NULL, " +
  990. " EpisodeCountNormal int NOT NULL, " +
  991. " EpisodeCountSpecial int NOT NULL, " +
  992. " Rating int NOT NULL, " +
  993. " VoteCount int NOT NULL, " +
  994. " TempRating int NOT NULL, " +
  995. " TempVoteCount int NOT NULL, " +
  996. " AvgReviewRating int NOT NULL, " +
  997. " ReviewCount int NOT NULL, " +
  998. " DateTimeUpdated datetime NOT NULL, " +
  999. " DateTimeDescUpdated datetime NOT NULL, " +
  1000. " ImageEnabled int NOT NULL, " +
  1001. " AwardList varchar(max) NOT NULL, " +
  1002. " Restricted int NOT NULL, " +
  1003. " AnimePlanetID int NULL, " +
  1004. " ANNID int NULL, " +
  1005. " AllCinemaID int NULL, " +
  1006. " AnimeNfo int NULL, " +
  1007. " [LatestEpisodeNumber] [int] NULL, " +
  1008. " CONSTRAINT [PK_AniDB_Anime] PRIMARY KEY CLUSTERED " +
  1009. " ( " +
  1010. " [AniDB_AnimeID] ASC " +
  1011. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1012. " ) ON [PRIMARY] ");
  1013. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Anime_AnimeID ON AniDB_Anime(AnimeID)");
  1014. return cmds;
  1015. }
  1016. public static List<string> CreateTableString_AniDB_Anime_Category()
  1017. {
  1018. List<string> cmds = new List<string>();
  1019. cmds.Add("CREATE TABLE AniDB_Anime_Category ( " +
  1020. " AniDB_Anime_CategoryID int IDENTITY(1,1) NOT NULL, " +
  1021. " AnimeID int NOT NULL, " +
  1022. " CategoryID int NOT NULL, " +
  1023. " Weighting int NOT NULL, " +
  1024. " CONSTRAINT [PK_AniDB_Anime_Category] PRIMARY KEY CLUSTERED " +
  1025. " ( " +
  1026. " AniDB_Anime_CategoryID ASC " +
  1027. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1028. " ) ON [PRIMARY] ");
  1029. cmds.Add("CREATE INDEX IX_AniDB_Anime_Category_AnimeID on AniDB_Anime_Category(AnimeID)");
  1030. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Anime_Category_AnimeID_CategoryID ON AniDB_Anime_Category(AnimeID, CategoryID)");
  1031. return cmds;
  1032. }
  1033. public static List<string> CreateTableString_AniDB_Anime_Character()
  1034. {
  1035. List<string> cmds = new List<string>();
  1036. cmds.Add("CREATE TABLE AniDB_Anime_Character ( " +
  1037. " AniDB_Anime_CharacterID int IDENTITY(1,1) NOT NULL, " +
  1038. " AnimeID int NOT NULL, " +
  1039. " CharID int NOT NULL, " +
  1040. " CharType varchar(100) NOT NULL, " +
  1041. " EpisodeListRaw varchar(max) NULL, " +
  1042. " CONSTRAINT [PK_AniDB_Anime_Character] PRIMARY KEY CLUSTERED " +
  1043. " ( " +
  1044. " AniDB_Anime_CharacterID ASC " +
  1045. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1046. " ) ON [PRIMARY] ");
  1047. cmds.Add("CREATE INDEX IX_AniDB_Anime_Character_AnimeID on AniDB_Anime_Character(AnimeID)");
  1048. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Anime_Character_AnimeID_CharID ON AniDB_Anime_Character(AnimeID, CharID)");
  1049. return cmds;
  1050. }
  1051. public static List<string> CreateTableString_AniDB_Anime_Relation()
  1052. {
  1053. List<string> cmds = new List<string>();
  1054. cmds.Add("CREATE TABLE AniDB_Anime_Relation ( " +
  1055. " AniDB_Anime_RelationID int IDENTITY(1,1) NOT NULL, " +
  1056. " AnimeID int NOT NULL, " +
  1057. " RelatedAnimeID int NOT NULL, " +
  1058. " RelationType varchar(100) NOT NULL, " +
  1059. " CONSTRAINT [PK_AniDB_Anime_Relation] PRIMARY KEY CLUSTERED " +
  1060. " ( " +
  1061. " AniDB_Anime_RelationID ASC " +
  1062. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1063. " ) ON [PRIMARY] ");
  1064. cmds.Add("CREATE INDEX IX_AniDB_Anime_Relation_AnimeID on AniDB_Anime_Relation(AnimeID)");
  1065. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Anime_Relation_AnimeID_RelatedAnimeID ON AniDB_Anime_Relation(AnimeID, RelatedAnimeID)");
  1066. return cmds;
  1067. }
  1068. public static List<string> CreateTableString_AniDB_Anime_Review()
  1069. {
  1070. List<string> cmds = new List<string>();
  1071. cmds.Add("CREATE TABLE AniDB_Anime_Review ( " +
  1072. " AniDB_Anime_ReviewID int IDENTITY(1,1) NOT NULL, " +
  1073. " AnimeID int NOT NULL, " +
  1074. " ReviewID int NOT NULL, " +
  1075. " CONSTRAINT [PK_AniDB_Anime_Review] PRIMARY KEY CLUSTERED " +
  1076. " ( " +
  1077. " AniDB_Anime_ReviewID ASC " +
  1078. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1079. " ) ON [PRIMARY] ");
  1080. cmds.Add("CREATE INDEX IX_AniDB_Anime_Review_AnimeID on AniDB_Anime_Review(AnimeID)");
  1081. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Anime_Review_AnimeID_ReviewID ON AniDB_Anime_Review(AnimeID, ReviewID)");
  1082. return cmds;
  1083. }
  1084. public static List<string> CreateTableString_AniDB_Anime_Similar()
  1085. {
  1086. List<string> cmds = new List<string>();
  1087. cmds.Add("CREATE TABLE AniDB_Anime_Similar ( " +
  1088. " AniDB_Anime_SimilarID int IDENTITY(1,1) NOT NULL, " +
  1089. " AnimeID int NOT NULL, " +
  1090. " SimilarAnimeID int NOT NULL, " +
  1091. " Approval int NOT NULL, " +
  1092. " Total int NOT NULL, " +
  1093. " CONSTRAINT [PK_AniDB_Anime_Similar] PRIMARY KEY CLUSTERED " +
  1094. " ( " +
  1095. " AniDB_Anime_SimilarID ASC " +
  1096. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1097. " ) ON [PRIMARY] ");
  1098. cmds.Add("CREATE INDEX IX_AniDB_Anime_Similar_AnimeID on AniDB_Anime_Similar(AnimeID)");
  1099. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Anime_Similar_AnimeID_SimilarAnimeID ON AniDB_Anime_Similar(AnimeID, SimilarAnimeID)");
  1100. return cmds;
  1101. }
  1102. public static List<string> CreateTableString_AniDB_Anime_Tag()
  1103. {
  1104. List<string> cmds = new List<string>();
  1105. cmds.Add("CREATE TABLE AniDB_Anime_Tag ( " +
  1106. " AniDB_Anime_TagID int IDENTITY(1,1) NOT NULL, " +
  1107. " AnimeID int NOT NULL, " +
  1108. " TagID int NOT NULL, " +
  1109. " Approval int NOT NULL, " +
  1110. " CONSTRAINT [PK_AniDB_Anime_Tag] PRIMARY KEY CLUSTERED " +
  1111. " ( " +
  1112. " AniDB_Anime_TagID ASC " +
  1113. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1114. " ) ON [PRIMARY] ");
  1115. cmds.Add("CREATE INDEX IX_AniDB_Anime_Tag_AnimeID on AniDB_Anime_Tag(AnimeID)");
  1116. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Anime_Tag_AnimeID_TagID ON AniDB_Anime_Tag(AnimeID, TagID)");
  1117. return cmds;
  1118. }
  1119. public static List<string> CreateTableString_AniDB_Anime_Title()
  1120. {
  1121. List<string> cmds = new List<string>();
  1122. cmds.Add("CREATE TABLE [AniDB_Anime_Title]( " +
  1123. " AniDB_Anime_TitleID int IDENTITY(1,1) NOT NULL, " +
  1124. " AnimeID int NOT NULL, " +
  1125. " TitleType varchar(50) NOT NULL, " +
  1126. " Language nvarchar(50) NOT NULL, " +
  1127. " Title nvarchar(500) NOT NULL, " +
  1128. " CONSTRAINT [PK_AniDB_Anime_Title] PRIMARY KEY CLUSTERED " +
  1129. " ( " +
  1130. " AniDB_Anime_TitleID ASC " +
  1131. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1132. " ) ON [PRIMARY] ");
  1133. cmds.Add("CREATE INDEX IX_AniDB_Anime_Title_AnimeID on AniDB_Anime_Title(AnimeID)");
  1134. return cmds;
  1135. }
  1136. public static List<string> CreateTableString_AniDB_Category()
  1137. {
  1138. List<string> cmds = new List<string>();
  1139. cmds.Add("CREATE TABLE AniDB_Category ( " +
  1140. " AniDB_CategoryID int IDENTITY(1,1) NOT NULL, " +
  1141. " CategoryID int NOT NULL, " +
  1142. " ParentID int NOT NULL, " +
  1143. " IsHentai int NOT NULL, " +
  1144. " CategoryName varchar(50) NOT NULL, " +
  1145. " CategoryDescription varchar(max) NOT NULL, " +
  1146. " CONSTRAINT [PK_AniDB_Category] PRIMARY KEY CLUSTERED " +
  1147. " ( " +
  1148. " AniDB_CategoryID ASC " +
  1149. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1150. " ) ON [PRIMARY] ");
  1151. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Category_CategoryID ON AniDB_Category(CategoryID)");
  1152. return cmds;
  1153. }
  1154. public static List<string> CreateTableString_AniDB_Character()
  1155. {
  1156. List<string> cmds = new List<string>();
  1157. cmds.Add("CREATE TABLE AniDB_Character ( " +
  1158. " AniDB_CharacterID int IDENTITY(1,1) NOT NULL, " +
  1159. " CharID int NOT NULL, " +
  1160. " CharName nvarchar(200) NOT NULL, " +
  1161. " PicName varchar(100) NOT NULL, " +
  1162. " CharKanjiName nvarchar(max) NOT NULL, " +
  1163. " CharDescription nvarchar(max) NOT NULL, " +
  1164. " CreatorListRaw varchar(max) NOT NULL, " +
  1165. " CONSTRAINT [PK_AniDB_Character] PRIMARY KEY CLUSTERED " +
  1166. " ( " +
  1167. " AniDB_CharacterID ASC " +
  1168. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1169. " ) ON [PRIMARY] ");
  1170. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Character_CharID ON AniDB_Character(CharID)");
  1171. return cmds;
  1172. }
  1173. public static List<string> CreateTableString_AniDB_Character_Seiyuu()
  1174. {
  1175. List<string> cmds = new List<string>();
  1176. cmds.Add("CREATE TABLE AniDB_Character_Seiyuu ( " +
  1177. " AniDB_Character_SeiyuuID int IDENTITY(1,1) NOT NULL, " +
  1178. " CharID int NOT NULL, " +
  1179. " SeiyuuID int NOT NULL " +
  1180. " CONSTRAINT [PK_AniDB_Character_Seiyuu] PRIMARY KEY CLUSTERED " +
  1181. " ( " +
  1182. " AniDB_Character_SeiyuuID ASC " +
  1183. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1184. " ) ON [PRIMARY] ");
  1185. cmds.Add("CREATE INDEX IX_AniDB_Character_Seiyuu_CharID on AniDB_Character_Seiyuu(CharID)");
  1186. cmds.Add("CREATE INDEX IX_AniDB_Character_Seiyuu_SeiyuuID on AniDB_Character_Seiyuu(SeiyuuID)");
  1187. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Character_Seiyuu_CharID_SeiyuuID ON AniDB_Character_Seiyuu(CharID, SeiyuuID)");
  1188. return cmds;
  1189. }
  1190. public static List<string> CreateTableString_AniDB_Seiyuu()
  1191. {
  1192. List<string> cmds = new List<string>();
  1193. cmds.Add("CREATE TABLE AniDB_Seiyuu ( " +
  1194. " AniDB_SeiyuuID int IDENTITY(1,1) NOT NULL, " +
  1195. " SeiyuuID int NOT NULL, " +
  1196. " SeiyuuName nvarchar(200) NOT NULL, " +
  1197. " PicName varchar(100) NOT NULL, " +
  1198. " CONSTRAINT [PK_AniDB_Seiyuu] PRIMARY KEY CLUSTERED " +
  1199. " ( " +
  1200. " AniDB_SeiyuuID ASC " +
  1201. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1202. " ) ON [PRIMARY] ");
  1203. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Seiyuu_SeiyuuID ON AniDB_Seiyuu(SeiyuuID)");
  1204. return cmds;
  1205. }
  1206. public static List<string> CreateTableString_AniDB_Episode()
  1207. {
  1208. List<string> cmds = new List<string>();
  1209. cmds.Add("CREATE TABLE AniDB_Episode( " +
  1210. " AniDB_EpisodeID int IDENTITY(1,1) NOT NULL, " +
  1211. " EpisodeID int NOT NULL, " +
  1212. " AnimeID int NOT NULL, " +
  1213. " LengthSeconds int NOT NULL, " +
  1214. " Rating varchar(max) NOT NULL, " +
  1215. " Votes varchar(max) NOT NULL, " +
  1216. " EpisodeNumber int NOT NULL, " +
  1217. " EpisodeType int NOT NULL, " +
  1218. " RomajiName varchar(max) NOT NULL, " +
  1219. " EnglishName varchar(max) NOT NULL, " +
  1220. " AirDate int NOT NULL, " +
  1221. " DateTimeUpdated datetime NOT NULL, " +
  1222. " CONSTRAINT [PK_AniDB_Episode] PRIMARY KEY CLUSTERED " +
  1223. " ( " +
  1224. " AniDB_EpisodeID ASC " +
  1225. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1226. " ) ON [PRIMARY] ");
  1227. cmds.Add("CREATE INDEX IX_AniDB_Episode_AnimeID on AniDB_Episode(AnimeID)");
  1228. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Episode_EpisodeID ON AniDB_Episode(EpisodeID)");
  1229. return cmds;
  1230. }
  1231. public static List<string> CreateTableString_AniDB_File()
  1232. {
  1233. List<string> cmds = new List<string>();
  1234. cmds.Add("CREATE TABLE AniDB_File( " +
  1235. " AniDB_FileID int IDENTITY(1,1) NOT NULL, " +
  1236. " FileID int NOT NULL, " +
  1237. " Hash varchar(50) NOT NULL, " +
  1238. " AnimeID int NOT NULL, " +
  1239. " GroupID int NOT NULL, " +
  1240. " File_Source varchar(max) NOT NULL, " +
  1241. " File_AudioCodec varchar(max) NOT NULL, " +
  1242. " File_VideoCodec varchar(max) NOT NULL, " +
  1243. " File_VideoResolution varchar(max) NOT NULL, " +
  1244. " File_FileExtension varchar(max) NOT NULL, " +
  1245. " File_LengthSeconds int NOT NULL, " +
  1246. " File_Description varchar(max) NOT NULL, " +
  1247. " File_ReleaseDate int NOT NULL, " +
  1248. " Anime_GroupName nvarchar(max) NOT NULL, " +
  1249. " Anime_GroupNameShort nvarchar(max) NOT NULL, " +
  1250. " Episode_Rating int NOT NULL, " +
  1251. " Episode_Votes int NOT NULL, " +
  1252. " DateTimeUpdated datetime NOT NULL, " +
  1253. " IsWatched int NOT NULL, " +
  1254. " WatchedDate datetime NULL, " +
  1255. " CRC varchar(max) NOT NULL, " +
  1256. " MD5 varchar(max) NOT NULL, " +
  1257. " SHA1 varchar(max) NOT NULL, " +
  1258. " FileName nvarchar(max) NOT NULL, " +
  1259. " FileSize bigint NOT NULL, " +
  1260. " CONSTRAINT [PK_AniDB_File] PRIMARY KEY CLUSTERED " +
  1261. " ( " +
  1262. " AniDB_FileID ASC " +
  1263. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1264. " ) ON [PRIMARY] ");
  1265. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_File_Hash on AniDB_File(Hash)");
  1266. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_File_FileID ON AniDB_File(FileID)");
  1267. return cmds;
  1268. }
  1269. public static List<string> CreateTableString_AniDB_GroupStatus()
  1270. {
  1271. List<string> cmds = new List<string>();
  1272. cmds.Add("CREATE TABLE AniDB_GroupStatus ( " +
  1273. " AniDB_GroupStatusID int IDENTITY(1,1) NOT NULL, " +
  1274. " AnimeID int NOT NULL, " +
  1275. " GroupID int NOT NULL, " +
  1276. " GroupName nvarchar(200) NOT NULL, " +
  1277. " CompletionState int NOT NULL, " +
  1278. " LastEpisodeNumber int NOT NULL, " +
  1279. " Rating int NOT NULL, " +
  1280. " Votes int NOT NULL, " +
  1281. " EpisodeRange nvarchar(200) NOT NULL, " +
  1282. " CONSTRAINT [PK_AniDB_GroupStatus] PRIMARY KEY CLUSTERED " +
  1283. " ( " +
  1284. " AniDB_GroupStatusID ASC " +
  1285. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1286. " ) ON [PRIMARY] ");
  1287. cmds.Add("CREATE INDEX IX_AniDB_GroupStatus_AnimeID on AniDB_GroupStatus(AnimeID)");
  1288. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_GroupStatus_AnimeID_GroupID ON AniDB_GroupStatus(AnimeID, GroupID)");
  1289. return cmds;
  1290. }
  1291. public static List<string> CreateTableString_AniDB_ReleaseGroup()
  1292. {
  1293. List<string> cmds = new List<string>();
  1294. cmds.Add("CREATE TABLE AniDB_ReleaseGroup ( " +
  1295. " AniDB_ReleaseGroupID int IDENTITY(1,1) NOT NULL, " +
  1296. " GroupID int NOT NULL, " +
  1297. " Rating int NOT NULL, " +
  1298. " Votes int NOT NULL, " +
  1299. " AnimeCount int NOT NULL, " +
  1300. " FileCount int NOT NULL, " +
  1301. " GroupName nvarchar(MAX) NOT NULL, " +
  1302. " GroupNameShort nvarchar(200) NOT NULL, " +
  1303. " IRCChannel nvarchar(200) NOT NULL, " +
  1304. " IRCServer nvarchar(200) NOT NULL, " +
  1305. " URL nvarchar(200) NOT NULL, " +
  1306. " Picname nvarchar(200) NOT NULL, " +
  1307. " CONSTRAINT [PK_AniDB_ReleaseGroup] PRIMARY KEY CLUSTERED " +
  1308. " ( " +
  1309. " AniDB_ReleaseGroupID ASC " +
  1310. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1311. " ) ON [PRIMARY] ");
  1312. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_ReleaseGroup_GroupID ON AniDB_ReleaseGroup(GroupID)");
  1313. return cmds;
  1314. }
  1315. public static List<string> CreateTableString_AniDB_Review()
  1316. {
  1317. List<string> cmds = new List<string>();
  1318. cmds.Add("CREATE TABLE AniDB_Review ( " +
  1319. " AniDB_ReviewID int IDENTITY(1,1) NOT NULL, " +
  1320. " ReviewID int NOT NULL, " +
  1321. " AuthorID int NOT NULL, " +
  1322. " RatingAnimation int NOT NULL, " +
  1323. " RatingSound int NOT NULL, " +
  1324. " RatingStory int NOT NULL, " +
  1325. " RatingCharacter int NOT NULL, " +
  1326. " RatingValue int NOT NULL, " +
  1327. " RatingEnjoyment int NOT NULL, " +
  1328. " ReviewText nvarchar(MAX) NOT NULL, " +
  1329. " CONSTRAINT [PK_AniDB_Review] PRIMARY KEY CLUSTERED " +
  1330. " ( " +
  1331. " AniDB_ReviewID ASC " +
  1332. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1333. " ) ON [PRIMARY] ");
  1334. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Review_ReviewID ON AniDB_Review(ReviewID)");
  1335. return cmds;
  1336. }
  1337. public static List<string> CreateTableString_AniDB_Tag()
  1338. {
  1339. List<string> cmds = new List<string>();
  1340. cmds.Add("CREATE TABLE AniDB_Tag ( " +
  1341. " AniDB_TagID int IDENTITY(1,1) NOT NULL, " +
  1342. " TagID int NOT NULL, " +
  1343. " Spoiler int NOT NULL, " +
  1344. " LocalSpoiler int NOT NULL, " +
  1345. " GlobalSpoiler int NOT NULL, " +
  1346. " TagName nvarchar(150) NOT NULL, " +
  1347. " TagCount int NOT NULL, " +
  1348. " TagDescription nvarchar(max) NOT NULL, " +
  1349. " CONSTRAINT [PK_AniDB_Tag] PRIMARY KEY CLUSTERED " +
  1350. " ( " +
  1351. " AniDB_TagID ASC " +
  1352. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1353. " ) ON [PRIMARY] ");
  1354. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Tag_TagID ON AniDB_Tag(TagID)");
  1355. return cmds;
  1356. }
  1357. public static List<string> CreateTableString_AnimeEpisode()
  1358. {
  1359. List<string> cmds = new List<string>();
  1360. cmds.Add("CREATE TABLE AnimeEpisode( " +
  1361. " AnimeEpisodeID int IDENTITY(1,1) NOT NULL, " +
  1362. " AnimeSeriesID int NOT NULL, " +
  1363. " AniDB_EpisodeID int NOT NULL, " +
  1364. " DateTimeUpdated datetime NOT NULL, " +
  1365. " DateTimeCreated datetime NOT NULL, " +
  1366. " CONSTRAINT [PK_AnimeEpisode] PRIMARY KEY CLUSTERED " +
  1367. " ( " +
  1368. " AnimeEpisodeID ASC " +
  1369. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1370. " ) ON [PRIMARY]");
  1371. cmds.Add("CREATE UNIQUE INDEX UIX_AnimeEpisode_AniDB_EpisodeID ON AnimeEpisode(AniDB_EpisodeID)");
  1372. cmds.Add("CREATE INDEX IX_AnimeEpisode_AnimeSeriesID on AnimeEpisode(AnimeSeriesID)");
  1373. return cmds;
  1374. }
  1375. public static List<string> CreateTableString_AnimeEpisode_User()
  1376. {
  1377. List<string> cmds = new List<string>();
  1378. cmds.Add("CREATE TABLE AnimeEpisode_User( " +
  1379. " AnimeEpisode_UserID int IDENTITY(1,1) NOT NULL, " +
  1380. " JMMUserID int NOT NULL, " +
  1381. " AnimeEpisodeID int NOT NULL, " +
  1382. " AnimeSeriesID int NOT NULL, " + // we only have this column to improve performance
  1383. " WatchedDate datetime NULL, " +
  1384. " PlayedCount int NOT NULL, " +
  1385. " WatchedCount int NOT NULL, " +
  1386. " StoppedCount int NOT NULL, " +
  1387. " CONSTRAINT [PK_AnimeEpisode_User] PRIMARY KEY CLUSTERED " +
  1388. " ( " +
  1389. " AnimeEpisode_UserID ASC " +
  1390. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1391. " ) ON [PRIMARY]");
  1392. cmds.Add("CREATE UNIQUE INDEX UIX_AnimeEpisode_User_User_EpisodeID ON AnimeEpisode_User(JMMUserID, AnimeEpisodeID)");
  1393. cmds.Add("CREATE INDEX IX_AnimeEpisode_User_User_AnimeSeriesID on AnimeEpisode_User(JMMUserID, AnimeSeriesID)");
  1394. return cmds;
  1395. }
  1396. public static List<string> CreateTableString_VideoLocal()
  1397. {
  1398. List<string> cmds = new List<string>();
  1399. cmds.Add("CREATE TABLE VideoLocal( " +
  1400. " VideoLocalID int IDENTITY(1,1) NOT NULL, " +
  1401. " FilePath nvarchar(max) NOT NULL, " +
  1402. " ImportFolderID int NOT NULL, " +
  1403. " Hash varchar(50) NOT NULL, " +
  1404. " CRC32 varchar(50) NULL, " +
  1405. " MD5 varchar(50) NULL, " +
  1406. " SHA1 varchar(50) NULL, " +
  1407. " HashSource int NOT NULL, " +
  1408. " FileSize bigint NOT NULL, " +
  1409. " IsIgnored int NOT NULL, " +
  1410. " DateTimeUpdated datetime NOT NULL, " +
  1411. " CONSTRAINT [PK_VideoLocal] PRIMARY KEY CLUSTERED " +
  1412. " ( " +
  1413. " VideoLocalID ASC " +
  1414. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1415. " ) ON [PRIMARY] ");
  1416. cmds.Add("CREATE UNIQUE INDEX UIX_VideoLocal_Hash on VideoLocal(Hash)");
  1417. return cmds;
  1418. }
  1419. public static List<string> CreateTableString_VideoLocal_User()
  1420. {
  1421. List<string> cmds = new List<string>();
  1422. cmds.Add("CREATE TABLE VideoLocal_User( " +
  1423. " VideoLocal_UserID int IDENTITY(1,1) NOT NULL, " +
  1424. " JMMUserID int NOT NULL, " +
  1425. " VideoLocalID int NOT NULL, " +
  1426. " WatchedDate datetime NOT NULL, " +
  1427. " CONSTRAINT [PK_VideoLocal_User] PRIMARY KEY CLUSTERED " +
  1428. " ( " +
  1429. " VideoLocal_UserID ASC " +
  1430. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1431. " ) ON [PRIMARY] ");
  1432. cmds.Add("CREATE UNIQUE INDEX UIX_VideoLocal_User_User_VideoLocalID ON VideoLocal_User(JMMUserID, VideoLocalID)");
  1433. return cmds;
  1434. }
  1435. public static List<string> CreateTableString_AnimeGroup()
  1436. {
  1437. List<string> cmds = new List<string>();
  1438. cmds.Add("CREATE TABLE AnimeGroup( " +
  1439. " AnimeGroupID int IDENTITY(1,1) NOT NULL, " +
  1440. " AnimeGroupParentID int NULL, " +
  1441. " GroupName nvarchar(max) NOT NULL, " +
  1442. " Description nvarchar(max) NULL, " +
  1443. " IsManuallyNamed int NOT NULL, " +
  1444. " DateTimeUpdated datetime NOT NULL, " +
  1445. " DateTimeCreated datetime NOT NULL, " +
  1446. " SortName varchar(max) NOT NULL, " +
  1447. " MissingEpisodeCount int NOT NULL, " +
  1448. " MissingEpisodeCountGroups int NOT NULL, " +
  1449. " OverrideDescription int NOT NULL, " +
  1450. " EpisodeAddedDate datetime NULL, " +
  1451. " CONSTRAINT [PK_AnimeGroup] PRIMARY KEY CLUSTERED " +
  1452. " ( " +
  1453. " [AnimeGroupID] ASC " +
  1454. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1455. " ) ON [PRIMARY] ");
  1456. return cmds;
  1457. }
  1458. public static List<string> CreateTableString_AnimeGroup_User()
  1459. {
  1460. List<string> cmds = new List<string>();
  1461. cmds.Add("CREATE TABLE AnimeGroup_User( " +
  1462. " AnimeGroup_UserID int IDENTITY(1,1) NOT NULL, " +
  1463. " JMMUserID int NOT NULL, " +
  1464. " AnimeGroupID int NOT NULL, " +
  1465. " IsFave int NOT NULL, " +
  1466. " UnwatchedEpisodeCount int NOT NULL, " +
  1467. " WatchedEpisodeCount int NOT NULL, " +
  1468. " WatchedDate datetime NULL, " +
  1469. " PlayedCount int NOT NULL, " +
  1470. " WatchedCount int NOT NULL, " +
  1471. " StoppedCount int NOT NULL, " +
  1472. " CONSTRAINT [PK_AnimeGroup_User] PRIMARY KEY CLUSTERED " +
  1473. " ( " +
  1474. " AnimeGroup_UserID ASC " +
  1475. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1476. " ) ON [PRIMARY]");
  1477. cmds.Add("CREATE UNIQUE INDEX UIX_AnimeGroup_User_User_GroupID ON AnimeGroup_User(JMMUserID, AnimeGroupID)");
  1478. return cmds;
  1479. }
  1480. public static List<string> CreateTableString_AnimeSeries()
  1481. {
  1482. List<string> cmds = new List<string>();
  1483. cmds.Add("CREATE TABLE AnimeSeries ( " +
  1484. " AnimeSeriesID int IDENTITY(1,1) NOT NULL, " +
  1485. " AnimeGroupID int NOT NULL, " +
  1486. " AniDB_ID int NOT NULL, " +
  1487. " DateTimeUpdated datetime NOT NULL, " +
  1488. " DateTimeCreated datetime NOT NULL, " +
  1489. " DefaultAudioLanguage varchar(max) NULL, " +
  1490. " DefaultSubtitleLanguage varchar(max) NULL, " +
  1491. " MissingEpisodeCount int NOT NULL, " +
  1492. " MissingEpisodeCountGroups int NOT NULL, " +
  1493. " LatestLocalEpisodeNumber int NOT NULL, " +
  1494. " EpisodeAddedDate datetime NULL, " +
  1495. " CONSTRAINT [PK_AnimeSeries] PRIMARY KEY CLUSTERED " +
  1496. " ( " +
  1497. " AnimeSeriesID ASC " +
  1498. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1499. " ) ON [PRIMARY] ");
  1500. cmds.Add("CREATE UNIQUE INDEX UIX_AnimeSeries_AniDB_ID ON AnimeSeries(AniDB_ID)");
  1501. return cmds;
  1502. }
  1503. public static List<string> CreateTableString_AnimeSeries_User()
  1504. {
  1505. List<string> cmds = new List<string>();
  1506. cmds.Add("CREATE TABLE AnimeSeries_User( " +
  1507. " AnimeSeries_UserID int IDENTITY(1,1) NOT NULL, " +
  1508. " JMMUserID int NOT NULL, " +
  1509. " AnimeSeriesID int NOT NULL, " +
  1510. " UnwatchedEpisodeCount int NOT NULL, " +
  1511. " WatchedEpisodeCount int NOT NULL, " +
  1512. " WatchedDate datetime NULL, " +
  1513. " PlayedCount int NOT NULL, " +
  1514. " WatchedCount int NOT NULL, " +
  1515. " StoppedCount int NOT NULL, " +
  1516. " CONSTRAINT [PK_AnimeSeries_User] PRIMARY KEY CLUSTERED " +
  1517. " ( " +
  1518. " AnimeSeries_UserID ASC " +
  1519. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1520. " ) ON [PRIMARY]");
  1521. cmds.Add("CREATE UNIQUE INDEX UIX_AnimeSeries_User_User_SeriesID ON AnimeSeries_User(JMMUserID, AnimeSeriesID)");
  1522. return cmds;
  1523. }
  1524. public static List<string> CreateTableString_CommandRequest()
  1525. {
  1526. List<string> cmds = new List<string>();
  1527. cmds.Add("CREATE TABLE CommandRequest( " +
  1528. " CommandRequestID int IDENTITY(1,1) NOT NULL, " +
  1529. " Priority int NOT NULL, " +
  1530. " CommandType int NOT NULL, " +
  1531. " CommandID nvarchar(max) NOT NULL, " +
  1532. " CommandDetails nvarchar(max) NOT NULL, " +
  1533. " DateTimeUpdated datetime NOT NULL, " +
  1534. " CONSTRAINT [PK_CommandRequest] PRIMARY KEY CLUSTERED " +
  1535. " ( " +
  1536. " CommandRequestID ASC " +
  1537. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1538. " ) ON [PRIMARY] ");
  1539. return cmds;
  1540. }
  1541. public static List<string> CreateTableString_CrossRef_AniDB_TvDB()
  1542. {
  1543. List<string> cmds = new List<string>();
  1544. cmds.Add("CREATE TABLE CrossRef_AniDB_TvDB( " +
  1545. " CrossRef_AniDB_TvDBID int IDENTITY(1,1) NOT NULL, " +
  1546. " AnimeID int NOT NULL, " +
  1547. " TvDBID int NOT NULL, " +
  1548. " TvDBSeasonNumber int NOT NULL, " +
  1549. " CrossRefSource int NOT NULL, " +
  1550. " CONSTRAINT [PK_CrossRef_AniDB_TvDB] PRIMARY KEY CLUSTERED " +
  1551. " ( " +
  1552. " CrossRef_AniDB_TvDBID ASC " +
  1553. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1554. " ) ON [PRIMARY] ");
  1555. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_AniDB_TvDB ON CrossRef_AniDB_TvDB(AnimeID, TvDBID, TvDBSeasonNumber, CrossRefSource)");
  1556. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_AniDB_TvDB_AnimeID ON CrossRef_AniDB_TvDB(AnimeID)");
  1557. return cmds;
  1558. }
  1559. public static List<string> CreateTableString_CrossRef_AniDB_Other()
  1560. {
  1561. List<string> cmds = new List<string>();
  1562. cmds.Add("CREATE TABLE CrossRef_AniDB_Other( " +
  1563. " CrossRef_AniDB_OtherID int IDENTITY(1,1) NOT NULL, " +
  1564. " AnimeID int NOT NULL, " +
  1565. " CrossRefID nvarchar(500) NOT NULL, " +
  1566. " CrossRefSource int NOT NULL, " +
  1567. " CrossRefType int NOT NULL, " +
  1568. " CONSTRAINT [PK_CrossRef_AniDB_Other] PRIMARY KEY CLUSTERED " +
  1569. " ( " +
  1570. " CrossRef_AniDB_OtherID ASC " +
  1571. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1572. " ) ON [PRIMARY] ");
  1573. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_AniDB_Other ON CrossRef_AniDB_Other(AnimeID, CrossRefID, CrossRefSource, CrossRefType)");
  1574. return cmds;
  1575. }
  1576. public static List<string> CreateTableString_CrossRef_File_Episode()
  1577. {
  1578. List<string> cmds = new List<string>();
  1579. cmds.Add("CREATE TABLE CrossRef_File_Episode( " +
  1580. " CrossRef_File_EpisodeID int IDENTITY(1,1) NOT NULL, " +
  1581. " Hash varchar(50) NULL, " +
  1582. " FileName nvarchar(500) NOT NULL, " +
  1583. " FileSize bigint NOT NULL, " +
  1584. " CrossRefSource int NOT NULL, " +
  1585. " AnimeID int NOT NULL, " +
  1586. " EpisodeID int NOT NULL, " +
  1587. " Percentage int NOT NULL, " +
  1588. " EpisodeOrder int NOT NULL, " +
  1589. " CONSTRAINT [PK_CrossRef_File_Episode] PRIMARY KEY CLUSTERED " +
  1590. " ( " +
  1591. " CrossRef_File_EpisodeID ASC " +
  1592. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1593. " ) ON [PRIMARY] ");
  1594. cmds.Add("CREATE UNIQUE INDEX UIX_CrossRef_File_Episode_Hash_EpisodeID ON CrossRef_File_Episode(Hash, EpisodeID)");
  1595. return cmds;
  1596. }
  1597. public static List<string> CreateTableString_CrossRef_Languages_AniDB_File()
  1598. {
  1599. List<string> cmds = new List<string>();
  1600. cmds.Add("CREATE TABLE CrossRef_Languages_AniDB_File( " +
  1601. " CrossRef_Languages_AniDB_FileID int IDENTITY(1,1) NOT NULL, " +
  1602. " FileID int NOT NULL, " +
  1603. " LanguageID int NOT NULL, " +
  1604. " CONSTRAINT [PK_CrossRef_Languages_AniDB_File] PRIMARY KEY CLUSTERED " +
  1605. " ( " +
  1606. " CrossRef_Languages_AniDB_FileID ASC " +
  1607. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1608. " ) ON [PRIMARY] ");;
  1609. return cmds;
  1610. }
  1611. public static List<string> CreateTableString_CrossRef_Subtitles_AniDB_File()
  1612. {
  1613. List<string> cmds = new List<string>();
  1614. cmds.Add("CREATE TABLE CrossRef_Subtitles_AniDB_File( " +
  1615. " CrossRef_Subtitles_AniDB_FileID int IDENTITY(1,1) NOT NULL, " +
  1616. " FileID int NOT NULL, " +
  1617. " LanguageID int NOT NULL, " +
  1618. " CONSTRAINT [PK_CrossRef_Subtitles_AniDB_File] PRIMARY KEY CLUSTERED " +
  1619. " ( " +
  1620. " CrossRef_Subtitles_AniDB_FileID ASC " +
  1621. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1622. " ) ON [PRIMARY] ");
  1623. return cmds;
  1624. }
  1625. public static List<string> CreateTableString_FileNameHash()
  1626. {
  1627. List<string> cmds = new List<string>();
  1628. cmds.Add("CREATE TABLE FileNameHash ( " +
  1629. " FileNameHashID int IDENTITY(1,1) NOT NULL, " +
  1630. " FileName nvarchar(500) NOT NULL, " +
  1631. " FileSize bigint NOT NULL, " +
  1632. " Hash varchar(50) NOT NULL, " +
  1633. " DateTimeUpdated datetime NOT NULL, " +
  1634. " CONSTRAINT [PK_FileNameHash] PRIMARY KEY CLUSTERED " +
  1635. " ( " +
  1636. " FileNameHashID ASC " +
  1637. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1638. " ) ON [PRIMARY] ");
  1639. cmds.Add("CREATE UNIQUE INDEX UIX_FileNameHash ON FileNameHash(FileName, FileSize, Hash)");
  1640. return cmds;
  1641. }
  1642. public static List<string> CreateTableString_Language()
  1643. {
  1644. List<string> cmds = new List<string>();
  1645. cmds.Add("CREATE TABLE Language( " +
  1646. " LanguageID int IDENTITY(1,1) NOT NULL, " +
  1647. " LanguageName varchar(100) NOT NULL, " +
  1648. " CONSTRAINT [PK_Language] PRIMARY KEY CLUSTERED " +
  1649. " ( " +
  1650. " LanguageID ASC " +
  1651. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1652. " ) ON [PRIMARY] ");
  1653. cmds.Add("CREATE UNIQUE INDEX UIX_Language_LanguageName ON Language(LanguageName)");
  1654. return cmds;
  1655. }
  1656. public static List<string> CreateTableString_ImportFolder()
  1657. {
  1658. List<string> cmds = new List<string>();
  1659. cmds.Add("CREATE TABLE ImportFolder( " +
  1660. " ImportFolderID int IDENTITY(1,1) NOT NULL, " +
  1661. " ImportFolderType int NOT NULL, " +
  1662. " ImportFolderName nvarchar(max) NOT NULL, " +
  1663. " ImportFolderLocation nvarchar(max) NOT NULL, " +
  1664. " IsDropSource int NOT NULL, " +
  1665. " IsDropDestination int NOT NULL, " +
  1666. " CONSTRAINT [PK_ImportFolder] PRIMARY KEY CLUSTERED " +
  1667. " ( " +
  1668. " ImportFolderID ASC " +
  1669. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1670. " ) ON [PRIMARY] ");
  1671. return cmds;
  1672. }
  1673. public static List<string> CreateTableString_ScheduledUpdate()
  1674. {
  1675. List<string> cmds = new List<string>();
  1676. cmds.Add("CREATE TABLE ScheduledUpdate( " +
  1677. " ScheduledUpdateID int IDENTITY(1,1) NOT NULL, " +
  1678. " UpdateType int NOT NULL, " +
  1679. " LastUpdate datetime NOT NULL, " +
  1680. " UpdateDetails nvarchar(max) NOT NULL, " +
  1681. " CONSTRAINT [PK_ScheduledUpdate] PRIMARY KEY CLUSTERED " +
  1682. " ( " +
  1683. " ScheduledUpdateID ASC " +
  1684. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1685. " ) ON [PRIMARY] ");
  1686. cmds.Add("CREATE UNIQUE INDEX UIX_ScheduledUpdate_UpdateType ON ScheduledUpdate(UpdateType)");
  1687. return cmds;
  1688. }
  1689. public static List<string> CreateTableString_VideoInfo()
  1690. {
  1691. List<string> cmds = new List<string>();
  1692. cmds.Add("CREATE TABLE VideoInfo ( " +
  1693. " VideoInfoID int IDENTITY(1,1) NOT NULL, " +
  1694. " Hash varchar(50) NOT NULL, " +
  1695. " FileSize bigint NOT NULL, " +
  1696. " FileName nvarchar(max) NOT NULL, " +
  1697. " DateTimeUpdated datetime NOT NULL, " +
  1698. " VideoCodec varchar(max) NOT NULL, " +
  1699. " VideoBitrate varchar(max) NOT NULL, " +
  1700. " VideoFrameRate varchar(max) NOT NULL, " +
  1701. " VideoResolution varchar(max) NOT NULL, " +
  1702. " AudioCodec varchar(max) NOT NULL, " +
  1703. " AudioBitrate varchar(max) NOT NULL, " +
  1704. " Duration bigint NOT NULL, " +
  1705. " CONSTRAINT [PK_VideoInfo] PRIMARY KEY CLUSTERED " +
  1706. " ( " +
  1707. " VideoInfoID ASC " +
  1708. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1709. " ) ON [PRIMARY] ");
  1710. cmds.Add("CREATE UNIQUE INDEX UIX_VideoInfo_Hash on VideoInfo(Hash)");
  1711. return cmds;
  1712. }
  1713. public static List<string> CreateTableString_DuplicateFile()
  1714. {
  1715. List<string> cmds = new List<string>();
  1716. cmds.Add("CREATE TABLE DuplicateFile( " +
  1717. " DuplicateFileID int IDENTITY(1,1) NOT NULL, " +
  1718. " FilePathFile1 nvarchar(max) NOT NULL, " +
  1719. " FilePathFile2 nvarchar(max) NOT NULL, " +
  1720. " ImportFolderIDFile1 int NOT NULL, " +
  1721. " ImportFolderIDFile2 int NOT NULL, " +
  1722. " Hash varchar(50) NOT NULL, " +
  1723. " DateTimeUpdated datetime NOT NULL, " +
  1724. " CONSTRAINT [PK_DuplicateFile] PRIMARY KEY CLUSTERED " +
  1725. " ( " +
  1726. " DuplicateFileID ASC " +
  1727. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1728. " ) ON [PRIMARY] ");
  1729. return cmds;
  1730. }
  1731. public static List<string> CreateTableString_GroupFilter()
  1732. {
  1733. List<string> cmds = new List<string>();
  1734. cmds.Add("CREATE TABLE GroupFilter( " +
  1735. " GroupFilterID int IDENTITY(1,1) NOT NULL, " +
  1736. " GroupFilterName nvarchar(max) NOT NULL, " +
  1737. " ApplyToSeries int NOT NULL, " +
  1738. " BaseCondition int NOT NULL, " +
  1739. " SortingCriteria nvarchar(max), " +
  1740. " CONSTRAINT [PK_GroupFilter] PRIMARY KEY CLUSTERED " +
  1741. " ( " +
  1742. " GroupFilterID ASC " +
  1743. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1744. " ) ON [PRIMARY] ");
  1745. return cmds;
  1746. }
  1747. public static List<string> CreateTableString_GroupFilterCondition()
  1748. {
  1749. List<string> cmds = new List<string>();
  1750. cmds.Add("CREATE TABLE GroupFilterCondition( " +
  1751. " GroupFilterConditionID int IDENTITY(1,1) NOT NULL, " +
  1752. " GroupFilterID int NOT NULL, " +
  1753. " ConditionType int NOT NULL, " +
  1754. " ConditionOperator int NOT NULL, " +
  1755. " ConditionParameter nvarchar(max) NOT NULL, " +
  1756. " CONSTRAINT [PK_GroupFilterCondition] PRIMARY KEY CLUSTERED " +
  1757. " ( " +
  1758. " GroupFilterConditionID ASC " +
  1759. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1760. " ) ON [PRIMARY] ");
  1761. return cmds;
  1762. }
  1763. public static List<string> CreateTableString_AniDB_Vote()
  1764. {
  1765. List<string> cmds = new List<string>();
  1766. cmds.Add("CREATE TABLE AniDB_Vote ( " +
  1767. " AniDB_VoteID int IDENTITY(1,1) NOT NULL, " +
  1768. " EntityID int NOT NULL, " +
  1769. " VoteValue int NOT NULL, " +
  1770. " VoteType int NOT NULL, " +
  1771. " CONSTRAINT [PK_AniDB_Vote] PRIMARY KEY CLUSTERED " +
  1772. " ( " +
  1773. " AniDB_VoteID ASC " +
  1774. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1775. " ) ON [PRIMARY] ");
  1776. return cmds;
  1777. }
  1778. public static List<string> CreateTableString_TvDB_ImageFanart()
  1779. {
  1780. List<string> cmds = new List<string>();
  1781. cmds.Add("CREATE TABLE TvDB_ImageFanart( " +
  1782. " TvDB_ImageFanartID int IDENTITY(1,1) NOT NULL, " +
  1783. " Id int NOT NULL, " +
  1784. " SeriesID int NOT NULL, " +
  1785. " BannerPath nvarchar(MAX), " +
  1786. " BannerType nvarchar(MAX), " +
  1787. " BannerType2 nvarchar(MAX), " +
  1788. " Colors nvarchar(MAX), " +
  1789. " Language nvarchar(MAX), " +
  1790. " ThumbnailPath nvarchar(MAX), " +
  1791. " VignettePath nvarchar(MAX), " +
  1792. " Enabled int NOT NULL, " +
  1793. " Chosen int NOT NULL, " +
  1794. " CONSTRAINT PK_TvDB_ImageFanart PRIMARY KEY CLUSTERED " +
  1795. " ( " +
  1796. " TvDB_ImageFanartID ASC " +
  1797. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1798. " ) ON [PRIMARY] ");
  1799. cmds.Add("CREATE UNIQUE INDEX UIX_TvDB_ImageFanart_Id ON TvDB_ImageFanart(Id)");
  1800. return cmds;
  1801. }
  1802. public static List<string> CreateTableString_TvDB_ImageWideBanner()
  1803. {
  1804. List<string> cmds = new List<string>();
  1805. cmds.Add("CREATE TABLE TvDB_ImageWideBanner( " +
  1806. " TvDB_ImageWideBannerID int IDENTITY(1,1) NOT NULL, " +
  1807. " Id int NOT NULL, " +
  1808. " SeriesID int NOT NULL, " +
  1809. " BannerPath nvarchar(MAX), " +
  1810. " BannerType nvarchar(MAX), " +
  1811. " BannerType2 nvarchar(MAX), " +
  1812. " Language nvarchar(MAX), " +
  1813. " Enabled int NOT NULL, " +
  1814. " SeasonNumber int, " +
  1815. " CONSTRAINT PK_TvDB_ImageWideBanner PRIMARY KEY CLUSTERED " +
  1816. " ( " +
  1817. " TvDB_ImageWideBannerID ASC " +
  1818. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1819. " ) ON [PRIMARY] ");
  1820. cmds.Add("CREATE UNIQUE INDEX UIX_TvDB_ImageWideBanner_Id ON TvDB_ImageWideBanner(Id)");
  1821. return cmds;
  1822. }
  1823. public static List<string> CreateTableString_TvDB_ImagePoster()
  1824. {
  1825. List<string> cmds = new List<string>();
  1826. cmds.Add("CREATE TABLE TvDB_ImagePoster( " +
  1827. " TvDB_ImagePosterID int IDENTITY(1,1) NOT NULL, " +
  1828. " Id int NOT NULL, " +
  1829. " SeriesID int NOT NULL, " +
  1830. " BannerPath nvarchar(MAX), " +
  1831. " BannerType nvarchar(MAX), " +
  1832. " BannerType2 nvarchar(MAX), " +
  1833. " Language nvarchar(MAX), " +
  1834. " Enabled int NOT NULL, " +
  1835. " SeasonNumber int, " +
  1836. " CONSTRAINT PK_TvDB_ImagePoster PRIMARY KEY CLUSTERED " +
  1837. " ( " +
  1838. " TvDB_ImagePosterID ASC " +
  1839. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1840. " ) ON [PRIMARY] ");
  1841. cmds.Add("CREATE UNIQUE INDEX UIX_TvDB_ImagePoster_Id ON TvDB_ImagePoster(Id)");
  1842. return cmds;
  1843. }
  1844. public static List<string> CreateTableString_TvDB_Episode()
  1845. {
  1846. List<string> cmds = new List<string>();
  1847. cmds.Add("CREATE TABLE TvDB_Episode( " +
  1848. " TvDB_EpisodeID int IDENTITY(1,1) NOT NULL, " +
  1849. " Id int NOT NULL, " +
  1850. " SeriesID int NOT NULL, " +
  1851. " SeasonID int NOT NULL, " +
  1852. " SeasonNumber int NOT NULL, " +
  1853. " EpisodeNumber int NOT NULL, " +
  1854. " EpisodeName nvarchar(MAX), " +
  1855. " Overview nvarchar(MAX), " +
  1856. " Filename nvarchar(MAX), " +
  1857. " EpImgFlag int NOT NULL, " +
  1858. " FirstAired nvarchar(MAX), " +
  1859. " AbsoluteNumber int, " +
  1860. " AirsAfterSeason int, " +
  1861. " AirsBeforeEpisode int, " +
  1862. " AirsBeforeSeason int, " +
  1863. " CONSTRAINT PK_TvDB_Episode PRIMARY KEY CLUSTERED " +
  1864. " ( " +
  1865. " TvDB_EpisodeID ASC " +
  1866. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1867. " ) ON [PRIMARY] ");
  1868. cmds.Add("CREATE UNIQUE INDEX UIX_TvDB_Episode_Id ON TvDB_Episode(Id)");
  1869. return cmds;
  1870. }
  1871. public static List<string> CreateTableString_TvDB_Series()
  1872. {
  1873. List<string> cmds = new List<string>();
  1874. cmds.Add("CREATE TABLE TvDB_Series( " +
  1875. " TvDB_SeriesID int IDENTITY(1,1) NOT NULL, " +
  1876. " SeriesID int NOT NULL, " +
  1877. " Overview nvarchar(MAX), " +
  1878. " SeriesName nvarchar(MAX), " +
  1879. " Status varchar(100), " +
  1880. " Banner varchar(100), " +
  1881. " Fanart varchar(100), " +
  1882. " Poster varchar(100), " +
  1883. " Lastupdated varchar(100), " +
  1884. " CONSTRAINT PK_TvDB_Series PRIMARY KEY CLUSTERED " +
  1885. " ( " +
  1886. " TvDB_SeriesID ASC " +
  1887. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1888. " ) ON [PRIMARY] ");
  1889. cmds.Add("CREATE UNIQUE INDEX UIX_TvDB_Series_Id ON TvDB_Series(SeriesID)");
  1890. return cmds;
  1891. }
  1892. public static List<string> CreateTableString_AniDB_Anime_DefaultImage()
  1893. {
  1894. List<string> cmds = new List<string>();
  1895. cmds.Add("CREATE TABLE AniDB_Anime_DefaultImage ( " +
  1896. " AniDB_Anime_DefaultImageID int IDENTITY(1,1) NOT NULL, " +
  1897. " AnimeID int NOT NULL, " +
  1898. " ImageParentID int NOT NULL, " +
  1899. " ImageParentType int NOT NULL, " +
  1900. " ImageType int NOT NULL, " +
  1901. " CONSTRAINT [PK_AniDB_Anime_DefaultImage] PRIMARY KEY CLUSTERED " +
  1902. " ( " +
  1903. " [AniDB_Anime_DefaultImageID] ASC " +
  1904. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1905. " ) ON [PRIMARY] ");
  1906. cmds.Add("CREATE UNIQUE INDEX UIX_AniDB_Anime_DefaultImage_ImageType ON AniDB_Anime_DefaultImage(AnimeID, ImageType)");
  1907. return cmds;
  1908. }
  1909. public static List<string> CreateTableString_MovieDB_Movie()
  1910. {
  1911. List<string> cmds = new List<string>();
  1912. cmds.Add("CREATE TABLE MovieDB_Movie( " +
  1913. " MovieDB_MovieID int IDENTITY(1,1) NOT NULL, " +
  1914. " MovieId int NOT NULL, " +
  1915. " MovieName nvarchar(MAX), " +
  1916. " OriginalName nvarchar(MAX), " +
  1917. " Overview nvarchar(MAX), " +
  1918. " CONSTRAINT PK_MovieDB_Movie PRIMARY KEY CLUSTERED " +
  1919. " ( " +
  1920. " MovieDB_MovieID ASC " +
  1921. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1922. " ) ON [PRIMARY] ");
  1923. cmds.Add("CREATE UNIQUE INDEX UIX_MovieDB_Movie_Id ON MovieDB_Movie(MovieId)");
  1924. return cmds;
  1925. }
  1926. public static List<string> CreateTableString_MovieDB_Poster()
  1927. {
  1928. List<string> cmds = new List<string>();
  1929. cmds.Add("CREATE TABLE MovieDB_Poster( " +
  1930. " MovieDB_PosterID int IDENTITY(1,1) NOT NULL, " +
  1931. " ImageID varchar(100), " +
  1932. " MovieId int NOT NULL, " +
  1933. " ImageType varchar(100), " +
  1934. " ImageSize varchar(100), " +
  1935. " URL nvarchar(MAX), " +
  1936. " ImageWidth int NOT NULL, " +
  1937. " ImageHeight int NOT NULL, " +
  1938. " Enabled int NOT NULL, " +
  1939. " CONSTRAINT PK_MovieDB_Poster PRIMARY KEY CLUSTERED " +
  1940. " ( " +
  1941. " MovieDB_PosterID ASC " +
  1942. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1943. " ) ON [PRIMARY] ");
  1944. return cmds;
  1945. }
  1946. public static List<string> CreateTableString_MovieDB_Fanart()
  1947. {
  1948. List<string> cmds = new List<string>();
  1949. cmds.Add("CREATE TABLE MovieDB_Fanart( " +
  1950. " MovieDB_FanartID int IDENTITY(1,1) NOT NULL, " +
  1951. " ImageID varchar(100), " +
  1952. " MovieId int NOT NULL, " +
  1953. " ImageType varchar(100), " +
  1954. " ImageSize varchar(100), " +
  1955. " URL nvarchar(MAX), " +
  1956. " ImageWidth int NOT NULL, " +
  1957. " ImageHeight int NOT NULL, " +
  1958. " Enabled int NOT NULL, " +
  1959. " CONSTRAINT PK_MovieDB_Fanart PRIMARY KEY CLUSTERED " +
  1960. " ( " +
  1961. " MovieDB_FanartID ASC " +
  1962. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1963. " ) ON [PRIMARY] ");
  1964. return cmds;
  1965. }
  1966. public static List<string> CreateTableString_JMMUser()
  1967. {
  1968. List<string> cmds = new List<string>();
  1969. cmds.Add("CREATE TABLE JMMUser( " +
  1970. " JMMUserID int IDENTITY(1,1) NOT NULL, " +
  1971. " Username nvarchar(100), " +
  1972. " Password nvarchar(100), " +
  1973. " IsAdmin int NOT NULL, " +
  1974. " IsAniDBUser int NOT NULL, " +
  1975. " IsTraktUser int NOT NULL, " +
  1976. " HideCategories nvarchar(MAX), " +
  1977. " CONSTRAINT PK_JMMUser PRIMARY KEY CLUSTERED " +
  1978. " ( " +
  1979. " JMMUserID ASC " +
  1980. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  1981. " ) ON [PRIMARY] ");
  1982. return cmds;
  1983. }
  1984. public static List<string> CreateTableString_Trakt_Episode()
  1985. {
  1986. List<string> cmds = new List<string>();
  1987. cmds.Add("CREATE TABLE Trakt_Episode( " +
  1988. " Trakt_EpisodeID int IDENTITY(1,1) NOT NULL, " +
  1989. " Trakt_ShowID int NOT NULL, " +
  1990. " Season int NOT NULL, " +
  1991. " EpisodeNumber int NOT NULL, " +
  1992. " Title nvarchar(MAX), " +
  1993. " URL nvarchar(500), " +
  1994. " Overview nvarchar(MAX), " +
  1995. " EpisodeImage nvarchar(500), " +
  1996. " CONSTRAINT PK_Trakt_Episode PRIMARY KEY CLUSTERED " +
  1997. " ( " +
  1998. " Trakt_EpisodeID ASC " +
  1999. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  2000. " ) ON [PRIMARY] ");
  2001. return cmds;
  2002. }
  2003. public static List<string> CreateTableString_Trakt_ImagePoster()
  2004. {
  2005. List<string> cmds = new List<string>();
  2006. cmds.Add("CREATE TABLE Trakt_ImagePoster( " +
  2007. " Trakt_ImagePosterID int IDENTITY(1,1) NOT NULL, " +
  2008. " Trakt_ShowID int NOT NULL, " +
  2009. " Season int NOT NULL, " +
  2010. " ImageURL nvarchar(500), " +
  2011. " Enabled int NOT NULL, " +
  2012. " CONSTRAINT PK_Trakt_ImagePoster PRIMARY KEY CLUSTERED " +
  2013. " ( " +
  2014. " Trakt_ImagePosterID ASC " +
  2015. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  2016. " ) ON [PRIMARY] ");
  2017. return cmds;
  2018. }
  2019. public static List<string> CreateTableString_Trakt_ImageFanart()
  2020. {
  2021. List<string> cmds = new List<string>();
  2022. cmds.Add("CREATE TABLE Trakt_ImageFanart( " +
  2023. " Trakt_ImageFanartID int IDENTITY(1,1) NOT NULL, " +
  2024. " Trakt_ShowID int NOT NULL, " +
  2025. " Season int NOT NULL, " +
  2026. " ImageURL nvarchar(500), " +
  2027. " Enabled int NOT NULL, " +
  2028. " CONSTRAINT PK_Trakt_ImageFanart PRIMARY KEY CLUSTERED " +
  2029. " ( " +
  2030. " Trakt_ImageFanartID ASC " +
  2031. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  2032. " ) ON [PRIMARY] ");
  2033. return cmds;
  2034. }
  2035. public static List<string> CreateTableString_Trakt_Show()
  2036. {
  2037. List<string> cmds = new List<string>();
  2038. cmds.Add("CREATE TABLE Trakt_Show( " +
  2039. " Trakt_ShowID int IDENTITY(1,1) NOT NULL, " +
  2040. " TraktID nvarchar(500), " +
  2041. " Title nvarchar(MAX), " +
  2042. " Year nvarchar(500), " +
  2043. " URL nvarchar(500), " +
  2044. " Overview nvarchar(MAX), " +
  2045. " TvDB_ID int NULL, " +
  2046. " CONSTRAINT PK_Trakt_Show PRIMARY KEY CLUSTERED " +
  2047. " ( " +
  2048. " Trakt_ShowID ASC " +
  2049. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  2050. " ) ON [PRIMARY] ");
  2051. return cmds;
  2052. }
  2053. public static List<string> CreateTableString_Trakt_Season()
  2054. {
  2055. List<string> cmds = new List<string>();
  2056. cmds.Add("CREATE TABLE Trakt_Season( " +
  2057. " Trakt_SeasonID int IDENTITY(1,1) NOT NULL, " +
  2058. " Trakt_ShowID int NOT NULL, " +
  2059. " Season int NOT NULL, " +
  2060. " URL nvarchar(500), " +
  2061. " CONSTRAINT PK_Trakt_Season PRIMARY KEY CLUSTERED " +
  2062. " ( " +
  2063. " Trakt_SeasonID ASC " +
  2064. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  2065. " ) ON [PRIMARY] ");
  2066. return cmds;
  2067. }
  2068. public static List<string> CreateTableString_CrossRef_AniDB_Trakt()
  2069. {
  2070. List<string> cmds = new List<string>();
  2071. cmds.Add("CREATE TABLE CrossRef_AniDB_Trakt( " +
  2072. " CrossRef_AniDB_TraktID int IDENTITY(1,1) NOT NULL, " +
  2073. " AnimeID int NOT NULL, " +
  2074. " TraktID nvarchar(500), " +
  2075. " TraktSeasonNumber int NOT NULL, " +
  2076. " CrossRefSource int NOT NULL, " +
  2077. " CONSTRAINT [PK_CrossRef_AniDB_Trakt] PRIMARY KEY CLUSTERED " +
  2078. " ( " +
  2079. " CrossRef_AniDB_TraktID ASC " +
  2080. " )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] " +
  2081. " ) ON [PRIMARY] ");
  2082. return cmds;
  2083. }
  2084. #endregion
  2085. public static string GetDatabasePath(string serverName)
  2086. {
  2087. string dbPath = "";
  2088. // normally installed versions of sql server
  2089. dbPath = GetDatabasePath(serverName, @"SOFTWARE\Microsoft\Microsoft SQL Server");
  2090. if (dbPath.Length > 0) return dbPath;
  2091. // sql server 32bit version installed on 64bit OS
  2092. dbPath = GetDatabasePath(serverName, @"SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server");
  2093. return dbPath;
  2094. }
  2095. public static string GetDatabasePath(string serverName, string registryPoint)
  2096. {
  2097. string instName = GetInstanceNameFromServerName(serverName).Trim().ToUpper();
  2098. //
  2099. using (RegistryKey sqlServerKey = Registry.LocalMachine.OpenSubKey(registryPoint))
  2100. {
  2101. foreach (string subKeyName in sqlServerKey.GetSubKeyNames())
  2102. {
  2103. if (subKeyName.StartsWith("MSSQL"))
  2104. {
  2105. using (RegistryKey instanceKey = sqlServerKey.OpenSubKey(subKeyName))
  2106. {
  2107. object val = instanceKey.GetValue("");
  2108. if (val != null)
  2109. {
  2110. string instanceName = val.ToString().Trim().ToUpper();
  2111. if (instanceName == instName)//say
  2112. {
  2113. string path = instanceKey.OpenSubKey(@"Setup").GetValue("SQLDataRoot").ToString();
  2114. path = Path.Combine(path, "Data");
  2115. return path;
  2116. }
  2117. }
  2118. }
  2119. }
  2120. }
  2121. }
  2122. return "";
  2123. }
  2124. public static string GetInstanceNameFromServerName(string servername)
  2125. {
  2126. if (!servername.Contains('\\')) return "MSSQLSERVER"; //default instance
  2127. int pos = servername.IndexOf('\\');
  2128. string instancename = servername.Substring(pos + 1, servername.Length - pos - 1);
  2129. return instancename;
  2130. }
  2131. }
  2132. public class SQLServerDatabase
  2133. {
  2134. public string MdfFileName { get; set; }
  2135. public string MdfFilePath { get; set; }
  2136. public string MdfFileSize { get; set; }
  2137. public string MdfMaxFileSize { get; set; }
  2138. public string MdfFileGrowth { get; set; }
  2139. public string LdfFileName { get; set; }
  2140. public string LdfFilePath { get; set; }
  2141. public string LdfFileSize { get; set; }
  2142. public string LdfMaxFileSize { get; set; }
  2143. public string LdfFileGrowth { get; set; }
  2144. public string DatabaseName { get; set; }
  2145. }
  2146. }