/// <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; }
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))); }
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(); }