示例#1
0
        /// <summary>
        /// Initialize a new instance of SelectStage class
        /// </summary>
        /// <param name="Arguments"></param>
        /// <param name="Map"></param>
        public SelectStage(SelectArgument Argument, IModelMap Map)
        {
            this.Argument = Argument;
            this.Map      = Map;

            KeyPairs        = new Dictionary <string, object>();
            UseSimplerMatch = false;
        }
示例#2
0
        public void NotInArray()
        {
            RequiredDataContainer ModelData = SelectDataProvider.GetData();

            string HandcraftedQuery = Utils.ReadQueryFromFile("HandcraftedQueries/selectNotInArray.js");

            Assert.IsNotNull(HandcraftedQuery);

            MapRule PersonRule = ModelData.ERMongoMapping.Rules.First(R => R.Source.Name == "Person");
            string  AgeMap     = PersonRule.Rules.First(R => R.Key == "age").Value;

            LogicalExpression left = new LogicalExpression($"${AgeMap}", LogicalOperator.NOT_IN,
                                                           new JSArray(new List <object>()
            {
                26, 27, 28, 29
            }));

            SelectArgument Arg      = new SelectArgument(left);
            SelectStage    SelectOp = new SelectStage(Arg, ModelData.ERMongoMapping);

            List <AlgebraOperator> OperatorsToExecute = new List <AlgebraOperator>()
            {
                SelectOp
            };
            FromArgument StartArg = new FromArgument(new QueryableEntity(ModelData.EntityRelationshipModel.FindByName("Person")),
                                                     ModelData.ERMongoMapping);
            QueryGenerator QueryGen = new QueryGenerator(StartArg, OperatorsToExecute);

            string GeneratedQuery = QueryGen.Run();

            Assert.IsNotNull(GeneratedQuery);

            QueryRunner Runner = new QueryRunner("mongodb://localhost:27017", "select");

            string HandcraftedResult = Runner.GetJSON(HandcraftedQuery);
            string GeneratedResult   = Runner.GetJSON(GeneratedQuery);

            // Check if either result is null
            Assert.IsNotNull(HandcraftedResult);
            Assert.IsNotNull(GeneratedResult);

            // Check if both results are equal
            Assert.IsTrue(JToken.DeepEquals(JToken.Parse(HandcraftedResult), JToken.Parse(GeneratedResult)));
        }
示例#3
0
        public static void Main()
        {
            DataContainer data = CreateDataContainer();

            QueryableEntity Person = new QueryableEntity(data.EntityRelationshipModel.FindByName("Person"));
            QueryableEntity Car    = new QueryableEntity(data.EntityRelationshipModel.FindByName("Car"));
            Relationship    Drives = (Relationship)data.EntityRelationshipModel.FindByName("Drives");
            ModelMapping    Map    = data.ERMongoMapping;

            QueryableEntity Garage = new QueryableEntity(data.EntityRelationshipModel.FindByName("Garage"));

            RelationshipJoinOperator RJoinDrives = new RelationshipJoinOperator(
                Person,
                Drives,
                new List <QueryableEntity>()
            {
                Car
            },
                Map);

            CartesianProductOperator CartesianOp = new CartesianProductOperator(
                Person,
                Garage,
                Map);

            ProjectArgument ProjectArg1 = new ProjectArgument(Person.GetAttribute("name"), Person, new BooleanExpr(true));
            ProjectArgument ProjectArg2 = new ProjectArgument(Person.GetAttribute("surname"), Person, new BooleanExpr(true));
            ProjectArgument ProjectArg3 = new ProjectArgument(Car.GetAttribute("reg_no"), Car, new BooleanExpr(true));

            ProjectStage ProjectOp = new ProjectStage(new ProjectArgument[] { ProjectArg1, ProjectArg2, ProjectArg3 }, RJoinDrives.ComputeVirtualMap());

            MapRule        PersonRule = Map.FindMainRule(Person.Element);
            SelectArgument SelectArg  = new SelectArgument(new EqExpr($"${PersonRule.GetRuleValueForAttribute( Person.GetAttribute( "surname" ) )}", "Smith"));
            SelectStage    SelectOp   = new SelectStage(SelectArg, Map);

            //List<MongoDBOperator> Operations = RJoinDrives.Run().Commands;

            //foreach ( MongoDBOperator Op in Operations )
            //{
            //    Console.WriteLine( Op.GetType().Name );
            //    Console.WriteLine( Op.ToString() );
            //    Console.WriteLine( Op.ToJavaScript() );

            //    if ( Op is LookupOperator )
            //    {
            //        LookupOperator OpAsLookup = (LookupOperator)Op;
            //        foreach ( MongoDBOperator PipelineOp in OpAsLookup.Pipeline )
            //        {
            //            Console.WriteLine( PipelineOp.GetType().Name );
            //            Console.WriteLine( PipelineOp.ToString() );
            //            Console.WriteLine( PipelineOp.ToJavaScript() );
            //        }
            //    }
            //}

            QueryGenerator QueryGen = new QueryGenerator(new FromArgument(Person, Map), new List <AlgebraOperator>()
            {
                SelectOp
            });
            string Query = QueryGen.Run();

            Console.WriteLine($"Query: {Environment.NewLine}{Query}");

            Console.Read();
        }