aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Persistence
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-05-23 00:51:57 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-05-23 00:51:57 -0400
commit6a2fef8b262689bb7b2ef56e22b89521bd3f427f (patch)
tree6fc7491ed9f2c7b7a6e4166ec9061b067ceb8fd3 /MediaBrowser.Server.Implementations/Persistence
parentaf7b6e6fce61aef55d43d15081fda0c5f49be113 (diff)
parent8dcee1f356c2a568df4f3d51889c01fc42fa507a (diff)
Merge branch 'dev' into beta
Diffstat (limited to 'MediaBrowser.Server.Implementations/Persistence')
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs109
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs248
2 files changed, 25 insertions, 332 deletions
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index 7f45e6184..7e2cc2da3 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -87,7 +87,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
private IDbCommand _updateInheritedRatingCommand;
private IDbCommand _updateInheritedTagsCommand;
- public const int LatestSchemaVersion = 79;
+ public const int LatestSchemaVersion = 80;
/// <summary>
/// Initializes a new instance of the <see cref="SqliteItemRepository"/> class.
@@ -239,6 +239,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
_connection.AddColumn(Logger, "TypedBaseItems", "DateLastMediaAdded", "DATETIME");
_connection.AddColumn(Logger, "TypedBaseItems", "Album", "Text");
_connection.AddColumn(Logger, "TypedBaseItems", "IsVirtualItem", "BIT");
+ _connection.AddColumn(Logger, "TypedBaseItems", "SeriesName", "Text");
_connection.AddColumn(Logger, "UserDataKeys", "Priority", "INT");
@@ -254,53 +255,9 @@ namespace MediaBrowser.Server.Implementations.Persistence
new MediaStreamColumns(_connection, Logger).AddColumns();
- var mediaStreamsDbFile = Path.Combine(_config.ApplicationPaths.DataPath, "mediainfo.db");
- if (File.Exists(mediaStreamsDbFile))
- {
- MigrateMediaStreams(mediaStreamsDbFile);
- }
-
DataExtensions.Attach(_connection, Path.Combine(_config.ApplicationPaths.DataPath, "userdata_v2.db"), "UserDataDb");
}
- private void MigrateMediaStreams(string file)
- {
- try
- {
- var backupFile = file + ".bak";
- File.Copy(file, backupFile, true);
- DataExtensions.Attach(_connection, backupFile, "MediaInfoOld");
-
- var columns = string.Join(",", _mediaStreamSaveColumns);
-
- string[] queries = {
- "REPLACE INTO mediastreams("+columns+") SELECT "+columns+" FROM MediaInfoOld.mediastreams;"
- };
-
- _connection.RunQueries(queries, Logger);
- }
- catch (Exception ex)
- {
- Logger.ErrorException("Error migrating media info database", ex);
- }
- finally
- {
- TryDeleteFile(file);
- }
- }
-
- private void TryDeleteFile(string file)
- {
- try
- {
- File.Delete(file);
- }
- catch (Exception ex)
- {
- Logger.ErrorException("Error deleting file {0}", ex, file);
- }
- }
-
private readonly string[] _retriveItemColumns =
{
"type",
@@ -477,7 +434,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
"PrimaryVersionId",
"DateLastMediaAdded",
"Album",
- "IsVirtualItem"
+ "IsVirtualItem",
+ "SeriesName"
};
_saveItemCommand = _connection.CreateCommand();
_saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
@@ -879,6 +837,16 @@ namespace MediaBrowser.Server.Implementations.Persistence
_saveItemCommand.GetParameter(index++).Value = null;
}
+ var hasSeries = item as IHasSeries;
+ if (hasSeries != null)
+ {
+ _saveItemCommand.GetParameter(index++).Value = hasSeries.SeriesName;
+ }
+ else
+ {
+ _saveItemCommand.GetParameter(index++).Value = null;
+ }
+
_saveItemCommand.Transaction = transaction;
_saveItemCommand.ExecuteNonQuery();
@@ -1548,11 +1516,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
private bool EnableJoinUserData(InternalItemsQuery query)
{
- if (_config.Configuration.SchemaVersion < 76)
- {
- return false;
- }
-
if (query.User == null)
{
return false;
@@ -1667,7 +1630,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
cmd.CommandText += whereText;
- if (EnableGroupByPresentationUniqueKey(query) && _config.Configuration.SchemaVersion >= 66)
+ if (EnableGroupByPresentationUniqueKey(query))
{
cmd.CommandText += " Group by PresentationUniqueKey";
}
@@ -1755,7 +1718,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
cmd.CommandText += whereText;
- if (EnableGroupByPresentationUniqueKey(query) && _config.Configuration.SchemaVersion >= 66)
+ if (EnableGroupByPresentationUniqueKey(query))
{
cmd.CommandText += " Group by PresentationUniqueKey";
}
@@ -1774,7 +1737,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
}
- if (EnableGroupByPresentationUniqueKey(query) && _config.Configuration.SchemaVersion >= 66)
+ if (EnableGroupByPresentationUniqueKey(query))
{
cmd.CommandText += "; select count (distinct PresentationUniqueKey) from TypedBaseItems";
}
@@ -1924,7 +1887,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
cmd.CommandText += whereText;
- if (EnableGroupByPresentationUniqueKey(query) && _config.Configuration.SchemaVersion >= 66)
+ if (EnableGroupByPresentationUniqueKey(query))
{
cmd.CommandText += " Group by PresentationUniqueKey";
}
@@ -1984,7 +1947,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
cmd.CommandText += whereText;
- if (EnableGroupByPresentationUniqueKey(query) && _config.Configuration.SchemaVersion >= 66)
+ if (EnableGroupByPresentationUniqueKey(query))
{
cmd.CommandText += " Group by PresentationUniqueKey";
}
@@ -2067,7 +2030,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
cmd.CommandText += whereText;
- if (EnableGroupByPresentationUniqueKey(query) && _config.Configuration.SchemaVersion >= 66)
+ if (EnableGroupByPresentationUniqueKey(query))
{
cmd.CommandText += " Group by PresentationUniqueKey";
}
@@ -2086,7 +2049,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
}
- if (EnableGroupByPresentationUniqueKey(query) && _config.Configuration.SchemaVersion >= 66)
+ if (EnableGroupByPresentationUniqueKey(query))
{
cmd.CommandText += "; select count (distinct PresentationUniqueKey) from TypedBaseItems";
}
@@ -2363,41 +2326,19 @@ namespace MediaBrowser.Server.Implementations.Persistence
if (!string.IsNullOrWhiteSpace(query.SlugName))
{
- if (_config.Configuration.SchemaVersion >= 70)
- {
- whereClauses.Add("SlugName=@SlugName");
- }
- else
- {
- whereClauses.Add("Name=@SlugName");
- }
+ whereClauses.Add("SlugName=@SlugName");
cmd.Parameters.Add(cmd, "@SlugName", DbType.String).Value = query.SlugName;
}
if (!string.IsNullOrWhiteSpace(query.Name))
{
- if (_config.Configuration.SchemaVersion >= 66)
- {
- whereClauses.Add("CleanName=@Name");
- cmd.Parameters.Add(cmd, "@Name", DbType.String).Value = query.Name.RemoveDiacritics();
- }
- else
- {
- whereClauses.Add("Name=@Name");
- cmd.Parameters.Add(cmd, "@Name", DbType.String).Value = query.Name;
- }
+ whereClauses.Add("CleanName=@Name");
+ cmd.Parameters.Add(cmd, "@Name", DbType.String).Value = query.Name.RemoveDiacritics();
}
if (!string.IsNullOrWhiteSpace(query.NameContains))
{
- if (_config.Configuration.SchemaVersion >= 66)
- {
- whereClauses.Add("CleanName like @NameContains");
- }
- else
- {
- whereClauses.Add("Name like @NameContains");
- }
+ whereClauses.Add("CleanName like @NameContains");
cmd.Parameters.Add(cmd, "@NameContains", DbType.String).Value = "%" + query.NameContains.RemoveDiacritics() + "%";
}
if (!string.IsNullOrWhiteSpace(query.NameStartsWith))
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs
deleted file mode 100644
index 40d5c9586..000000000
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs
+++ /dev/null
@@ -1,248 +0,0 @@
-using MediaBrowser.Common.Configuration;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Logging;
-using System;
-using System.Data;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Server.Implementations.Persistence
-{
- public class SqliteProviderInfoRepository : BaseSqliteRepository, IProviderRepository
- {
- private IDbConnection _connection;
-
- private IDbCommand _saveStatusCommand;
- private readonly IApplicationPaths _appPaths;
-
- public SqliteProviderInfoRepository(ILogManager logManager, IApplicationPaths appPaths) : base(logManager)
- {
- _appPaths = appPaths;
- }
-
- /// <summary>
- /// Gets the name of the repository
- /// </summary>
- /// <value>The name.</value>
- public string Name
- {
- get
- {
- return "SQLite";
- }
- }
-
- /// <summary>
- /// Opens the connection to the database
- /// </summary>
- /// <returns>Task.</returns>
- public async Task Initialize(IDbConnector dbConnector)
- {
- var dbFile = Path.Combine(_appPaths.DataPath, "refreshinfo.db");
-
- _connection = await dbConnector.Connect(dbFile).ConfigureAwait(false);
-
- string[] queries = {
-
- "create table if not exists MetadataStatus (ItemId GUID PRIMARY KEY, DateLastMetadataRefresh datetime, DateLastImagesRefresh datetime, ItemDateModified DateTimeNull)",
- "create index if not exists idx_MetadataStatus on MetadataStatus(ItemId)",
-
- //pragmas
- "pragma temp_store = memory",
-
- "pragma shrink_memory"
- };
-
- _connection.RunQueries(queries, Logger);
-
- AddItemDateModifiedCommand();
-
- PrepareStatements();
- }
-
- private static readonly string[] StatusColumns =
- {
- "ItemId",
- "DateLastMetadataRefresh",
- "DateLastImagesRefresh",
- "ItemDateModified"
- };
-
- private void AddItemDateModifiedCommand()
- {
- using (var cmd = _connection.CreateCommand())
- {
- cmd.CommandText = "PRAGMA table_info(MetadataStatus)";
-
- using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
- {
- while (reader.Read())
- {
- if (!reader.IsDBNull(1))
- {
- var name = reader.GetString(1);
-
- if (string.Equals(name, "ItemDateModified", StringComparison.OrdinalIgnoreCase))
- {
- return;
- }
- }
- }
- }
- }
-
- var builder = new StringBuilder();
-
- builder.AppendLine("alter table MetadataStatus");
- builder.AppendLine("add column ItemDateModified DateTime NULL");
-
- _connection.RunQueries(new[] { builder.ToString() }, Logger);
- }
-
- /// <summary>
- /// Prepares the statements.
- /// </summary>
- private void PrepareStatements()
- {
- _saveStatusCommand = _connection.CreateCommand();
-
- _saveStatusCommand.CommandText = string.Format("replace into MetadataStatus ({0}) values ({1})",
- string.Join(",", StatusColumns),
- string.Join(",", StatusColumns.Select(i => "@" + i).ToArray()));
-
- foreach (var col in StatusColumns)
- {
- _saveStatusCommand.Parameters.Add(_saveStatusCommand, "@" + col);
- }
- }
-
- public MetadataStatus GetMetadataStatus(Guid itemId)
- {
- if (itemId == Guid.Empty)
- {
- throw new ArgumentNullException("itemId");
- }
-
- using (var cmd = _connection.CreateCommand())
- {
- var cmdText = "select " + string.Join(",", StatusColumns) + " from MetadataStatus where";
-
- cmdText += " ItemId=@ItemId";
- cmd.Parameters.Add(cmd, "@ItemId", DbType.Guid).Value = itemId;
-
- cmd.CommandText = cmdText;
-
- using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow))
- {
- while (reader.Read())
- {
- return GetStatus(reader);
- }
-
- return null;
- }
- }
- }
-
- private MetadataStatus GetStatus(IDataReader reader)
- {
- var result = new MetadataStatus
- {
- ItemId = reader.GetGuid(0)
- };
-
- if (!reader.IsDBNull(1))
- {
- result.DateLastMetadataRefresh = reader.GetDateTime(1).ToUniversalTime();
- }
-
- if (!reader.IsDBNull(2))
- {
- result.DateLastImagesRefresh = reader.GetDateTime(2).ToUniversalTime();
- }
-
- if (!reader.IsDBNull(3))
- {
- result.ItemDateModified = reader.GetDateTime(3).ToUniversalTime();
- }
-
- return result;
- }
-
- public async Task SaveMetadataStatus(MetadataStatus status, CancellationToken cancellationToken)
- {
- if (status == null)
- {
- throw new ArgumentNullException("status");
- }
-
- cancellationToken.ThrowIfCancellationRequested();
-
- await WriteLock.WaitAsync(cancellationToken).ConfigureAwait(false);
-
- IDbTransaction transaction = null;
-
- try
- {
- transaction = _connection.BeginTransaction();
-
- _saveStatusCommand.GetParameter(0).Value = status.ItemId;
- _saveStatusCommand.GetParameter(1).Value = status.DateLastMetadataRefresh;
- _saveStatusCommand.GetParameter(2).Value = status.DateLastImagesRefresh;
- _saveStatusCommand.GetParameter(3).Value = status.ItemDateModified;
-
- _saveStatusCommand.Transaction = transaction;
-
- _saveStatusCommand.ExecuteNonQuery();
-
- transaction.Commit();
- }
- catch (OperationCanceledException)
- {
- if (transaction != null)
- {
- transaction.Rollback();
- }
-
- throw;
- }
- catch (Exception e)
- {
- Logger.ErrorException("Failed to save provider info:", e);
-
- if (transaction != null)
- {
- transaction.Rollback();
- }
-
- throw;
- }
- finally
- {
- if (transaction != null)
- {
- transaction.Dispose();
- }
-
- WriteLock.Release();
- }
- }
-
- protected override void CloseConnection()
- {
- if (_connection != null)
- {
- if (_connection.IsOpen())
- {
- _connection.Close();
- }
-
- _connection.Dispose();
- _connection = null;
- }
- }
- }
-}