PageRenderTime 48ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/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

Large files files are truncated, but you can click here to view the full 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_Titl…

Large files files are truncated, but you can click here to view the full file