コード例 #1
0
        public void EqualsWithDependencies()
        {
            var filter = new Extent(M.Person.ObjectType)
            {
                Predicate = new Equals {
                    Dependencies = new[] { "useFirstname" }, PropertyType = M.Person.FirstName, Value = "John"
                },
            };

            var arguments   = new Dictionary <string, string> {
            };
            var queryExtent = filter.Build(this.Session, arguments);

            var extent = this.Session.Extent(M.Person.ObjectType);

            Assert.Equal(extent.ToArray(), queryExtent.ToArray());

            arguments.Add("useFirstname", "x");
            queryExtent = filter.Build(this.Session, arguments);

            extent = this.Session.Extent(M.Person.ObjectType);
            extent.Filter.AddEquals(M.Person.FirstName, "John");

            Assert.Equal(extent.ToArray(), queryExtent.ToArray());
        }
コード例 #2
0
        public void AndNestedContainsWithoutParameters()
        {
            var filter = new Extent(M.Organisation.ObjectType)
            {
                Predicate = new And
                {
                    Operands = new IPredicate[]
                    {
                        new ContainedIn
                        {
                            PropertyType = M.Organisation.Employees,
                            Extent       = new Extent(M.Person.ObjectType)
                            {
                                Predicate = new Contains
                                {
                                    PropertyType = M.Person.Gender,
                                    Parameter    = "gender",
                                },
                            },
                        },
                    },
                },
            };

            var arguments   = new Dictionary <string, string>();
            var queryExtent = filter.Build(this.Session, arguments);

            var extent = this.Session.Extent(M.Organisation.ObjectType);

            Assert.Equal(extent.ToArray(), queryExtent.ToArray());
        }
コード例 #3
0
        public void NestedWithParameters()
        {
            var filter = new Extent(M.Organisation.ObjectType)
            {
                Predicate = new ContainedIn
                {
                    PropertyType = M.Organisation.Employees,
                    Extent       = new Extent(M.Person.ObjectType)
                    {
                        Predicate = new Equals
                        {
                            PropertyType = M.Person.Gender,
                            Parameter    = "gender",
                        },
                    },
                },
            };

            var male = new Genders(this.Session).Male;

            var arguments = new Dictionary <string, string> {
                { "gender", male.Id.ToString() }
            };
            var queryExtent = filter.Build(this.Session, arguments);

            var employees = this.Session.Extent(M.Person.ObjectType);

            employees.Filter.AddEquals(M.Person.Gender, male);
            var extent = this.Session.Extent(M.Organisation.ObjectType);

            extent.Filter.AddContainedIn(M.Organisation.Employees, employees);

            Assert.Equal(extent.ToArray(), queryExtent.ToArray());
        }
コード例 #4
0
        public void EqualsWithoutParameters()
        {
            var filter = new Extent(M.Person.ObjectType)
            {
                Predicate = new Equals {
                    PropertyType = M.Person.FirstName, Parameter = "firstName"
                },
            };

            var queryExtent = filter.Build(this.Session);

            var extent = this.Session.Extent(M.Person.ObjectType);

            Assert.Equal(extent.ToArray(), queryExtent.ToArray());
        }
コード例 #5
0
        public void AndWithoutParameters()
        {
            // select from Person where FirstName='John' and LastName='Doe'
            var filter = new Extent(M.Person.ObjectType)
            {
                Predicate = new And
                {
                    Operands = new IPredicate[]
                    {
                        new Equals
                        {
                            PropertyType = M.Person.FirstName,
                            Parameter    = "firstName",
                        },
                        new Equals
                        {
                            PropertyType = M.Person.LastName,
                            Parameter    = "lastName"
                        },
                    },
                },
            };
            {
                var arguments = new Dictionary <string, string>
                {
                    { "firstName", "John" },
                };
                var queryExtent = filter.Build(this.Session, arguments);

                var extent = this.Session.Extent(M.Person.ObjectType);
                extent.Filter.AddEquals(M.Person.FirstName, "John");

                Assert.Equal(extent.ToArray(), queryExtent.ToArray());
            }

            {
                var queryExtent = filter.Build(this.Session);

                var extent = this.Session.Extent(M.Person.ObjectType);

                Assert.Equal(extent.ToArray(), queryExtent.ToArray());
            }
        }
コード例 #6
0
        public void EqualsWithParameters()
        {
            var filter = new Extent(M.Person.ObjectType)
            {
                Predicate = new Equals {
                    PropertyType = M.Person.FirstName, Parameter = "firstName"
                },
            };

            var arguments = new Dictionary <string, string> {
                { "firstName", "John" }
            };
            var queryExtent = filter.Build(this.Session, arguments);

            var extent = this.Session.Extent(M.Person.ObjectType);

            extent.Filter.AddEquals(M.Person.FirstName, "John");

            Assert.Equal(extent.ToArray(), queryExtent.ToArray());
        }
コード例 #7
0
        /// <summary>
        /// Loads an <see cref="Allors.Extent"/> based on this <see cref="Extent"/>.
        /// </summary>
        /// <param name="@this"></param>
        /// <param name="session">
        /// The database to resolve information from.
        /// </param>
        /// <returns>
        /// The loaded <see cref="Extent"/>.
        /// </returns>
        public static IExtent Load(this Extent @this, ISession session)
        {
            IExtent[] Operands() => @this.Operands.Select(v => v.Load(session)).ToArray();

            IExtent extent;

            switch (@this.Kind)
            {
            case ExtentKind.Extent:
                if ([email protected])
                {
                    return(null);
                }

                var objectType = (IComposite)session.Database.ObjectFactory.MetaPopulation.Find(@this.ObjectType.Value);
                extent = new Allors.Data.Extent(objectType)
                {
                    Predicate = @this.Predicate?.Load(session),
                };

                break;

            case ExtentKind.Union:
                extent = new Union(Operands());
                break;

            case ExtentKind.Except:
                extent = new Except(Operands());
                break;

            case ExtentKind.Intersect:
                extent = new Intersect(Operands());
                break;

            default:
                throw new Exception("Unknown extent kind " + @this.Kind);
            }

            extent.Sorting = @this.Sorting?.Select(v => v.Load(session)).ToArray();
            return(extent);
        }