示例#1
0
        public static IDatabaseSet <T> Set <T>(this IDatabase database, ITransactionSource transaction = null)
        {
#pragma warning disable 612, 618
            return(database.Set <T>(database.Config.Table <T>(), null, transaction));

#pragma warning restore 612, 618
        }
示例#2
0
        private static IDatabaseCommand CreateCommand(IDatabaseComponent database, ITransactionSource transaction)
        {
            var query = database.QueryFactory.Build();

            query.Add.AddColumn(database.Tables.LibraryItem.Column("DirectoryName"));
            query.Add.AddColumn(database.Tables.LibraryItem.Column("FileName"));
            query.Add.AddColumn(database.Tables.LibraryItem.Column("ImportDate"));
            query.Add.AddColumn(database.Tables.LibraryItem.Column("Status"));
            query.Add.AddColumn(database.Tables.LibraryItem.Column("Flags"));
            query.Add.SetTable(database.Tables.LibraryItem);
            query.Output.AddParameter("DirectoryName", DbType.String, 0, 0, 0, ParameterDirection.Input, false, null, DatabaseQueryParameterFlags.None);
            query.Output.AddParameter("FileName", DbType.String, 0, 0, 0, ParameterDirection.Input, false, null, DatabaseQueryParameterFlags.None);
            query.Output.AddParameter("ImportDate", DbType.String, 0, 0, 0, ParameterDirection.Input, false, null, DatabaseQueryParameterFlags.None);
            query.Output.AddParameter("Status", DbType.Byte, 0, 0, 0, ParameterDirection.Input, false, null, DatabaseQueryParameterFlags.None);
            query.Output.AddParameter("Flags", DbType.Byte, 0, 0, 0, ParameterDirection.Input, false, null, DatabaseQueryParameterFlags.None);
            query.Filter.Expressions.Add(
                query.Filter.CreateUnary(
                    QueryOperator.Not,
                    query.Filter.CreateFunction(
                        QueryFunction.Exists,
                        query.Filter.CreateSubQuery(
                            database.QueryFactory.Build().With(subQuery =>
            {
                subQuery.Output.AddOperator(QueryOperator.Star);
                subQuery.Source.AddTable(database.Tables.LibraryItem);
                subQuery.Filter.AddColumn(database.Tables.LibraryItem.Column("FileName"));
            })
                            )
                        )
                    )
                );
            return(database.CreateCommand(query.Build(), DatabaseCommandFlags.NoCache, transaction));
        }
示例#3
0
 protected Transaction(ITransactionSource transactionSource)
 {
     if (transactionSource == null)
     {
         throw new ArgumentNullException("transactionSource");
     }
     this.transactionSource = transactionSource;
 }
示例#4
0
 public override IEnumerable <string> GetTableNames(ITransactionSource transaction = null)
 {
     if (this.TableNames == null)
     {
         var query = this.Database.QueryFactory.Create("SELECT TABLE_NAME FROM information_schema.tables");
         using (var reader = this.Database.ExecuteReader(query, transaction))
         {
             this.TableNames = reader.Select(element => element.Get <string>("TABLE_NAME")).ToArray();
         }
     }
     return(this.TableNames);
 }
示例#5
0
 public override IEnumerable <string> GetTableNames(ITransactionSource transaction = null)
 {
     if (this.TableNames == null)
     {
         var query = this.Database.QueryFactory.Create("SELECT name FROM sqlite_master WHERE type = 'table'");
         using (var reader = this.Database.ExecuteReader(query, transaction))
         {
             this.TableNames = reader.Select(element => element.Get <string>("name")).ToArray();
         }
     }
     return(this.TableNames);
 }
示例#6
0
        private IQueryable <LibraryItem> GetItems(LibraryItemStatus?status, ITransactionSource transaction)
        {
            var queryable = this.Database.AsQueryable <LibraryItem>(transaction);

            if (!status.HasValue)
            {
                return(queryable.Where(libraryItem => libraryItem.MetaDatas.Any()));
            }
            else
            {
                return(queryable.Where(libraryItem => libraryItem.Status == status.Value && libraryItem.MetaDatas.Any()));
            }
        }
 public Task Clear(LibraryItemStatus libraryItemStatus, ITransactionSource transaction)
 {
     return(this.Database.ExecuteAsync(this.Database.Queries.RemoveLibraryVariousArtists, (parameters, phase) =>
     {
         switch (phase)
         {
         case DatabaseParameterPhase.Fetch:
             parameters["name"] = CustomMetaData.VariousArtists;
             parameters["type"] = MetaDataItemType.Tag;
             parameters["status"] = libraryItemStatus;
             break;
         }
     }, transaction));
 }
示例#8
0
        private static IDatabaseCommand CreateCommand(IDatabaseComponent database, ITransactionSource transaction)
        {
            var query = database.QueryFactory.Build();

            query.Add.SetTable(database.Tables.PlaylistItem);
            query.Add.AddColumns(database.Tables.PlaylistItem.Columns.Except(database.Tables.PlaylistItem.PrimaryKeys));
            query.Output.AddSubQuery(database.QueryFactory.Build().With(subQuery =>
            {
                subQuery.Output.AddColumn(database.Tables.LibraryItem.Column("Id"));
                subQuery.Source.AddTable(database.Tables.LibraryItem);
                subQuery.Filter.AddColumn(database.Tables.LibraryItem.Column("FileName"));
            }));
            query.Output.AddParameters(database.Tables.PlaylistItem.Columns.Except(database.Tables.PlaylistItem.PrimaryKeys.Concat(database.Tables.PlaylistItem.Column("LibraryItem_Id"))));
            return(database.CreateCommand(query.Build(), DatabaseCommandFlags.NoCache, transaction));
        }
 public Task Populate(PlaylistItemStatus playlistItemStatus, ITransactionSource transaction)
 {
     return(this.Database.ExecuteAsync(this.Database.Queries.UpdatePlaylistVariousArtists, (parameters, phase) =>
     {
         switch (phase)
         {
         case DatabaseParameterPhase.Fetch:
             parameters["name"] = CustomMetaData.VariousArtists;
             parameters["type"] = MetaDataItemType.Tag;
             parameters["value"] = bool.TrueString;
             parameters["status"] = playlistItemStatus;
             break;
         }
     }, transaction));
 }
        private async Task AddPlaylistItems(IDatabaseQuery query, ITransactionSource transaction)
        {
            var count = await this.Database.ExecuteScalarAsync <int>(query, (parameters, phase) =>
            {
                switch (phase)
                {
                case DatabaseParameterPhase.Fetch:
                    parameters["playlistId"] = this.Playlist.Id;
                    parameters["sequence"]   = this.Sequence;
                    parameters["status"]     = PlaylistItemStatus.Import;
                    break;
                }
            }, transaction).ConfigureAwait(false);

            this.Sequence += count;
            this.Offset   += count;
        }
示例#11
0
        public override IEnumerable <string> GetColumnNames(string tableName, ITransactionSource transaction = null)
        {
            var columnNames = default(string[]);

            if (!this.ColumnNames.TryGetValue(tableName, out columnNames))
            {
                var query = this.Database.QueryFactory.Create(string.Format("SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME = '{0}'", tableName));
                using (var reader = this.Database.ExecuteReader(query, transaction))
                {
                    columnNames = reader.Select(element => element.Get <string>("COLUMN_NAME")).ToArray();
                    if (columnNames.Length == 0)
                    {
                        throw new InvalidOperationException(string.Format("No columns were found for table \"{0}\".", tableName));
                    }
                    if (!this.ColumnNames.TryAdd(tableName, columnNames))
                    {
                        //TODO: Warn?
                    }
                }
            }
            return(columnNames);
        }
示例#12
0
 public static IDatabaseQuerySource Source <T>(this IDatabase database, ITransactionSource transaction = null)
 {
     return(database.Source <T>(null, transaction));
 }
示例#13
0
 public static IDatabaseSet <T> Set <T>(this IDatabase database, ITableConfig table, DatabaseParameterHandler parameters, ITransactionSource transaction = null)
 {
     return(database.Set <T>(database.Source(table, parameters, transaction)));
 }
示例#14
0
 public static IDatabaseSet <T> Set <T>(this IDatabase database, ITableConfig table, ITransactionSource transaction = null)
 {
     return(database.Set <T>(table, null, transaction));
 }
示例#15
0
 public static IDatabaseQuerySource Source(this IDatabase database, IDatabaseQueryComposer composer, DatabaseParameterHandler parameters, ITransactionSource transaction = null)
 {
     return(database.Source(composer, parameters, transaction));
 }
示例#16
0
 public static Task RemovePlaylistItems(IDatabaseComponent database, int playlistId, PlaylistItemStatus status, ITransactionSource transaction)
 {
     return(database.ExecuteAsync(database.Queries.RemovePlaylistItems, (parameters, phase) =>
     {
         switch (phase)
         {
         case DatabaseParameterPhase.Fetch:
             parameters["playlistId"] = playlistId;
             parameters["status"] = status;
             break;
         }
     }, transaction));
 }
示例#17
0
        public static Task UpdatePlaylistItem(IDatabaseComponent database, PlaylistItem playlistItem, ITransactionSource transaction)
        {
            var table   = database.Tables.PlaylistItem;
            var builder = database.QueryFactory.Build();

            builder.Update.SetTable(table);
            builder.Update.AddColumns(table.UpdatableColumns);
            builder.Filter.AddColumns(table.PrimaryKeys);
            var query      = builder.Build();
            var parameters = new ParameterHandlerStrategy(table, playlistItem).Handler;

            return(database.ExecuteAsync(query, parameters, transaction));
        }
示例#18
0
 public static Task RemoveHierarchies(IDatabaseComponent database, LibraryItemStatus?status, ITransactionSource transaction)
 {
     return(RemoveHierarchies(database, null, status, transaction));
 }
示例#19
0
 public static Task <int> ExecuteAsync(this IDatabase database, IQueryGraphBuilder query, DatabaseParameterHandler parameters, ITransactionSource transaction = null)
 {
     return(database.ExecuteAsync(query.Build(), parameters, transaction));
 }
示例#20
0
 public static int Execute(this IDatabase database, IDatabaseQuery query, ITransactionSource transaction = null)
 {
     return(database.Execute(query, null, transaction));
 }
示例#21
0
文件: Transaction.cs 项目: vebin/BD2
 protected Transaction(ITransactionSource transactionSource)
 {
     if (transactionSource == null)
         throw new ArgumentNullException ("transactionSource");
     this.transactionSource = transactionSource;
 }
示例#22
0
 public static Task <int> ExecuteAsync(this IDatabase database, IQueryGraphBuilder query, ITransactionSource transaction = null)
 {
     return(database.ExecuteAsync(query, null, transaction));
 }
示例#23
0
 public static Task <T> ExecuteScalarAsync <T>(this IDatabase database, IDatabaseQuery query, ITransactionSource transaction = null)
 {
     return(database.ExecuteScalarAsync <T>(query, null, transaction));
 }
示例#24
0
 private async Task AddHiearchies(LibraryItemStatus?status, CancellationToken cancellationToken, ITransactionSource transaction)
 {
     using (var libraryHierarchyPopulator = new LibraryHierarchyPopulator(this.Database, this.Visible, transaction))
     {
         libraryHierarchyPopulator.InitializeComponent(this.Core);
         await this.WithSubTask(libraryHierarchyPopulator,
                                () => libraryHierarchyPopulator.Populate(status, cancellationToken)
                                ).ConfigureAwait(false);
     }
 }
示例#25
0
 public static IDatabaseReader ExecuteReader(this IDatabase database, IQueryGraphBuilder query, ITransactionSource transaction = null)
 {
     return(database.ExecuteReader(query, null, transaction));
 }
示例#26
0
 public static Task RemoveHierarchies(IDatabaseComponent database, LibraryHierarchy libraryHierarchy, LibraryItemStatus?status, ITransactionSource transaction)
 {
     return(database.ExecuteAsync(database.Queries.RemoveLibraryHierarchyItems, (parameters, phase) =>
     {
         switch (phase)
         {
         case DatabaseParameterPhase.Fetch:
             if (libraryHierarchy != null)
             {
                 parameters["libraryHierarchyId"] = libraryHierarchy.Id;
             }
             if (status.HasValue)
             {
                 parameters["status"] = status;
             }
             break;
         }
     }, transaction));
 }
示例#27
0
 public static IDatabaseQuerySource Source(this IDatabase database, ITableConfig table, ITransactionSource transaction = null)
 {
     return(database.Source(table, null, transaction));
 }
示例#28
0
        public static async Task UpdatePlaylistItem(IDatabaseComponent database, int playlistItemId, Action <PlaylistItem> action, ITransactionSource transaction)
        {
            var table   = database.Tables.PlaylistItem;
            var builder = database.QueryFactory.Build();

            builder.Output.AddColumns(table.Columns);
            builder.Source.AddTable(table);
            builder.Filter.AddColumns(table.PrimaryKeys);
            var query        = builder.Build();
            var playlistItem = default(PlaylistItem);

            using (var sequence = database.ExecuteAsyncEnumerator <PlaylistItem>(query, (parameters, phase) =>
            {
                switch (phase)
                {
                case DatabaseParameterPhase.Fetch:
                    parameters[table.PrimaryKey] = playlistItemId;
                    break;
                }
            }, transaction))
            {
                if (await sequence.MoveNextAsync().ConfigureAwait(false))
                {
                    playlistItem = sequence.Current;
                }
            }
            action(playlistItem);
            await UpdatePlaylistItem(database, playlistItem, transaction).ConfigureAwait(false);
        }
示例#29
0
 public static IDatabaseQuerySource Source(this IDatabase database, ITableConfig table, DatabaseParameterHandler parameters, ITransactionSource transaction = null)
 {
     return(database.Source(new EntityRelationQueryComposer(database, table), parameters, transaction));
 }
示例#30
0
        public IEnumerable <IColumnConfig> GetColumns(IDatabase database, ITableConfig table, ITransactionSource transaction = null)
        {
            var properties = new EntityPropertyEnumerator(table.TableType);
            var columns    = new List <IColumnConfig>();

            foreach (var property in properties)
            {
                if (!ColumnValidator.Validate(database, property))
                {
                    continue;
                }
                var column = Factories.Column.Create(table, ColumnConfig.By(property));
                if (!ColumnValidator.Validate(database, table, column, transaction))
                {
                    continue;
                }
                columns.Add(column);
            }
            return(columns);
        }
示例#31
0
 public static IDatabaseQuerySource Source(this IDatabase database, IDatabaseQueryComposer composer, ITransactionSource transaction = null)
 {
     return(database.Source(composer, null, transaction));
 }