Exemple #1
0
        public void TableValuedPerformanceTest()
        {
            var songs = Database.MListQuery((AlbumEntity a) => a.Songs).Select(a => a.Element);

            var t1 = PerfCounter.Ticks;

            var fast = (from s1 in songs
                        from s2 in songs
                        from s3 in songs
                        from s4 in songs
                        select MinimumExtensions.MinimumTableValued(
                            MinimumExtensions.MinimumTableValued(s1.Seconds, s2.Seconds).Select(a => a.MinValue).First(),
                            MinimumExtensions.MinimumTableValued(s3.Seconds, s4.Seconds).Select(a => a.MinValue).First()
                            ).Select(a => a.MinValue).First()).ToList();

            var t2 = PerfCounter.Ticks;

            var fast2 = (from s1 in songs
                         from s2 in songs
                         from s3 in songs
                         from s4 in songs
                         let x = MinimumExtensions.MinimumTableValued(s1.Seconds, s2.Seconds).Select(a => a.MinValue).First()
                                 let y = MinimumExtensions.MinimumTableValued(s3.Seconds, s4.Seconds).Select(a => a.MinValue).First()
                                         select MinimumExtensions.MinimumTableValued(x, y).Select(a => a.MinValue).First()).ToList();

            var t3 = PerfCounter.Ticks;

            var slow = (from s1 in songs
                        from s2 in songs
                        from s3 in songs
                        from s4 in songs
                        let x = MinimumExtensions.MinimumScalar(s1.Seconds, s2.Seconds)
                                let y = MinimumExtensions.MinimumScalar(s3.Seconds, s4.Seconds)
                                        select MinimumExtensions.MinimumScalar(x, y)).ToList();

            var t4 = PerfCounter.Ticks;

            if (!Schema.Current.Settings.IsPostgres)
            {
                Debug.WriteLine("MinimumTableValued: {0} ms", PerfCounter.ToMilliseconds(t1, t2));
                Debug.WriteLine("MinimumTableValued let: {0} ms", PerfCounter.ToMilliseconds(t2, t3));
                Debug.WriteLine("MinimumScalar: {0} ms", PerfCounter.ToMilliseconds(t3, t4));
            }
        }
        public void TableValuedPerformanceTest()
        {
            var songs = Database.MListQuery((AlbumEntity a) => a.Songs).Select(a => a.Element);

            var t1 = PerfCounter.Ticks;

            var fast = (from s1 in songs
                        from s2 in songs
                        from s3 in songs
                        from s4 in songs
                        select MinimumExtensions.MinimumTableValued(
                            MinimumExtensions.MinimumTableValued(s1.Seconds, s2.Seconds).Select(a => a.MinValue).First(),
                            MinimumExtensions.MinimumTableValued(s3.Seconds, s4.Seconds).Select(a => a.MinValue).First()
                            ).Select(a => a.MinValue).First()).ToList();

            var t2 = PerfCounter.Ticks;

            var fast2 = (from s1 in songs
                         from s2 in songs
                         from s3 in songs
                         from s4 in songs
                         let x = MinimumExtensions.MinimumTableValued(s1.Seconds, s2.Seconds).Select(a => a.MinValue).First()
                                 let y = MinimumExtensions.MinimumTableValued(s3.Seconds, s4.Seconds).Select(a => a.MinValue).First()
                                         select MinimumExtensions.MinimumTableValued(x, y).Select(a => a.MinValue).First()).ToList();

            var t3 = PerfCounter.Ticks;

            var slow = (from s1 in songs
                        from s2 in songs
                        from s3 in songs
                        from s4 in songs
                        let x = MinimumExtensions.MinimumScalar(s1.Seconds, s2.Seconds)
                                let y = MinimumExtensions.MinimumScalar(s3.Seconds, s4.Seconds)
                                        select MinimumExtensions.MinimumScalar(x, y)).ToList();

            var t4 = PerfCounter.Ticks;

            Assert.IsTrue(PerfCounter.ToMilliseconds(t1, t2) < PerfCounter.ToMilliseconds(t3, t4));
            Assert.IsTrue(PerfCounter.ToMilliseconds(t2, t3) < PerfCounter.ToMilliseconds(t3, t4));
        }
 public void SimplifyMinimumTableValued()
 {
     var result = (from b in Database.Query <BandEntity>()
                   let min = MinimumExtensions.MinimumTableValued((int)b.Id, (int)b.Id).FirstOrDefault().MinValue
                             select b.Name).ToList();
 }
 public void TableValuedFunction()
 {
     var list = Database.Query <AlbumEntity>()
                .Where(a => MinimumExtensions.MinimumTableValued((int)a.Id * 2, (int)a.Id).Select(m => m.MinValue).First() > 2).Select(a => a.Id).ToList();
 }
Exemple #5
0
    public static void Start(SchemaBuilder sb)
    {
        if (sb.NotDefined(MethodInfo.GetCurrentMethod()))
        {
            sb.Include <AlbumEntity>()
            .WithExpressionFrom((IAuthorEntity au) => au.Albums())
            .WithQuery(() => a => new
            {
                Entity = a,
                a.Id,
                a.Name,
                a.Author,
                a.Label,
                a.Year
            });
            AlbumGraph.Register();


            sb.Include <NoteWithDateEntity>()
            .WithSave(NoteWithDateOperation.Save)
            .WithQuery(() => a => new
            {
                Entity = a,
                a.Id,
                a.Text,
                a.Target,
                a.CreationTime,
            });

            sb.Include <ConfigEntity>()
            .WithSave(ConfigOperation.Save);

            MinimumExtensions.IncludeFunction(sb.Schema.Assets);
            sb.Include <ArtistEntity>()
            .WithSave(ArtistOperation.Save)
            .WithVirtualMList(a => a.Nominations, n => (Lite <ArtistEntity>)n.Author)
            .WithQuery(() => a => new
            {
                Entity = a,
                a.Id,
                a.Name,
                a.IsMale,
                a.Sex,
                a.Dead,
                a.LastAward,
            });

            new Graph <ArtistEntity> .Execute(ArtistOperation.AssignPersonalAward)
            {
                CanExecute = a => a.LastAward != null ? "Artist already has an award" : null,
                Execute    = (a, para) => a.LastAward = new PersonalAwardEntity()
                {
                    Category = "Best Artist", Year = DateTime.Now.Year, Result = AwardResult.Won
                }.Execute(AwardOperation.Save)
            }

            .Register();

            sb.Include <BandEntity>()
            .WithQuery(() => a => new
            {
                Entity = a,
                a.Id,
                a.Name,
                a.LastAward,
            });

            new Graph <BandEntity> .Execute(BandOperation.Save)
            {
                CanBeNew      = true,
                CanBeModified = true,
                Execute       = (b, _) =>
                {
                    using (OperationLogic.AllowSave <ArtistEntity>())
                    {
                        b.Save();
                    }
                }
            }

            .Register();

            sb.Include <LabelEntity>()
            .WithSave(LabelOperation.Save)
            .WithQuery(() => a => new
            {
                Entity = a,
                a.Id,
                a.Name,
            });


            sb.Include <FolderEntity>()
            .WithQuery(() => e => new
            {
                Entity = e,
                e.Id,
                e.Name
            });

            RegisterAwards(sb);

            QueryLogic.Queries.Register(typeof(IAuthorEntity), () => DynamicQueryCore.Manual(async(request, description, cancellationToken) =>
            {
                var one = await(from a in Database.Query <ArtistEntity>()
                                select new
                {
                    Entity = (IAuthorEntity)a,
                    a.Id,
                    Type = "Artist",
                    a.Name,
                    Lonely = a.Lonely(),
                    a.LastAward
                })
                          .ToDQueryable(description)
                          .AllQueryOperationsAsync(request, cancellationToken);

                var two = await(from a in Database.Query <BandEntity>()
                                select new
                {
                    Entity = (IAuthorEntity)a,
                    a.Id,
                    Type = "Band",
                    a.Name,
                    Lonely = a.Lonely(),
                    a.LastAward
                })
                          .ToDQueryable(description)
                          .AllQueryOperationsAsync(request, cancellationToken);

                return(one.Concat(two).OrderBy(request.Orders).TryPaginate(request.Pagination));
            })
                                        .Column(a => a.LastAward, cl => cl.Implementations = Implementations.ByAll)
                                        .ColumnProperyRoutes(a => a.Id, PropertyRoute.Construct((ArtistEntity a) => a.Id), PropertyRoute.Construct((BandEntity a) => a.Id)),
                                        entityImplementations: Implementations.By(typeof(ArtistEntity), typeof(BandEntity)));

            Validator.PropertyValidator((NoteWithDateEntity n) => n.Text)
            .IsApplicableValidator <NotNullValidatorAttribute>(n => Corruption.Strict);
        }
    }