Esempio n. 1
0
        public void GetOutputStructure_WrongComponentTwoDatasetsJoinExpr_DurationScalarStructure(bool isMemership, TestExprType type)
        {
            foreach (string name in DatasetClauseOperator.ClauseNames.Where(name => !name.In("Pivot", "Unpivot", "Subspace")))
            {
                IExpression joinExpr            = ModelResolvers.JoinExprResolver(TestExprFactory.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));
                IExpression ds1Expr             = TestExprFactory.GetExpression("get", ExpressionFactoryNameTarget.OperatorSymbol);
                IExpression ds2Expr             = TestExprFactory.GetExpression("get", ExpressionFactoryNameTarget.OperatorSymbol);
                IExpression clauseExpr          = TestExprFactory.GetExpression(name, ExpressionFactoryNameTarget.ResultName);
                IExpression periodIndicatorExpr = TestExprFactory.GetExpression("period_indicator", ExpressionFactoryNameTarget.OperatorSymbol);
                IExpression paramExpr           = TestExprFactory.GetExpression(type);
                if (isMemership)
                {
                    paramExpr.OperatorDefinition = ModelResolvers.OperatorResolver("#");
                }

                joinExpr.AddOperand("ds", ModelResolvers.ExprResolver());
                joinExpr.Operands["ds"].AddOperand("ds_1", ds1Expr);
                joinExpr.Operands["ds"].AddOperand("ds_2", ds2Expr);
                joinExpr.AddOperand(name, clauseExpr);
                clauseExpr.AddOperand("ds_1", periodIndicatorExpr);
                periodIndicatorExpr.AddOperand("ds_1", paramExpr);

                ds1Expr.Structure = ModelResolvers.DsResolver();
                ds1Expr.Structure.Identifiers.Add(new StructureComponent(BasicDataType.Integer, "Id1"));
                ds1Expr.Structure.Identifiers.Add(new StructureComponent((BasicDataType)type, "Id2"));
                ds1Expr.Structure.Measures.Add(new StructureComponent(BasicDataType.String, "Me1"));
                ds2Expr.Structure = ds1Expr.Structure.GetCopy();

                Assert.ThrowsAny <VtlOperatorError>(() => { periodIndicatorExpr.OperatorDefinition.GetOutputStructure(periodIndicatorExpr); });
            }
        }
Esempio n. 2
0
        public void GetOutputStructure_CorrectNoParamOneDatasetJoinExpr_DurationScalarStructure()
        {
            foreach (string name in DatasetClauseOperator.ClauseNames.Where(name => !name.In("Pivot", "Unpivot", "Subspace")))
            {
                IExpression joinExpr            = ModelResolvers.JoinExprResolver(TestExprFactory.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));
                IExpression datasetExpr         = TestExprFactory.GetExpression("get", ExpressionFactoryNameTarget.OperatorSymbol);
                IExpression clauseExpr          = TestExprFactory.GetExpression(name, ExpressionFactoryNameTarget.ResultName);
                IExpression periodIndicatorExpr = TestExprFactory.GetExpression("period_indicator", ExpressionFactoryNameTarget.OperatorSymbol);

                joinExpr.AddOperand("ds", ModelResolvers.ExprResolver());
                joinExpr.Operands["ds"].AddOperand("ds_1", datasetExpr);
                joinExpr.AddOperand(name, clauseExpr);
                clauseExpr.AddOperand("ds_1", periodIndicatorExpr);

                datasetExpr.Structure = ModelResolvers.DsResolver();
                datasetExpr.Structure.Identifiers.Add(new StructureComponent(BasicDataType.Integer, "Id1"));
                datasetExpr.Structure.Identifiers.Add(new StructureComponent(BasicDataType.TimePeriod, "Id2"));
                datasetExpr.Structure.Measures.Add(new StructureComponent(BasicDataType.String, "Me1"));

                IDataStructure expectedStructure = ModelResolvers.DsResolver("duration_var", ComponentType.Measure, BasicDataType.Duration);

                IDataStructure dataStructure = periodIndicatorExpr.OperatorDefinition.GetOutputStructure(periodIndicatorExpr);

                Assert.True(expectedStructure.EqualsObj(dataStructure));
            }
        }
Esempio n. 3
0
        public void CurrentJoinExpr_JoinExprAncestor_CorrectExpression()
        {
            IJoinExpression joinExpr = ModelResolvers.JoinExprResolver(TestExprFactory.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));
            Expression      expr     = new Expression(joinExpr);

            Assert.Equal(joinExpr, expr.CurrentJoinExpr);
        }
        public void Constructor_JoinExpr_JoinExpr()
        {
            IExpression           expr    = TestExprFactory.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol);
            IExpression           refExpr = ModelResolvers.ExprResolver();
            ITransformationSchema schema  = ModelResolvers.SchemaResolver();

            refExpr.AddOperand("ds", expr);
            expr.ContainingSchema    = schema;
            expr.ReferenceExpression = refExpr;

            IJoinExpression joinExpr2 = ModelResolvers.JoinExprResolver(expr);

            joinExpr2.BasicStructure = ModelResolvers.DsResolver();

            JoinExpression joinExpr = new JoinExpression(joinExpr2);

            Assert.Equal(expr.ParentExpression, joinExpr.ParentExpression);
            Assert.Equal(expr.ContainingSchema, joinExpr.ContainingSchema);
            Assert.Equal(expr.ExpressionText, joinExpr.ExpressionText);
            Assert.Equal(expr.LineNumber, joinExpr.LineNumber);
            Assert.Equal(expr.OperandsCollection, joinExpr.OperandsCollection);
            Assert.Equal(expr.OperatorDefinition, joinExpr.OperatorDefinition);
            Assert.Equal(expr.ParamSignature, joinExpr.ParamSignature);
            Assert.Equal(expr.ReferenceExpression, joinExpr.ReferenceExpression);
            Assert.Equal(expr.ResultName, joinExpr.ResultName);
            Assert.Equal(expr.Structure, joinExpr.Structure);
            Assert.Equal(joinExpr2.BasicStructure, joinExpr.BasicStructure);
        }
        public void GetOutputStructure_GroupNScalarsExpr_DataStructure()
        {
            IJoinExpression joinExpr = ModelResolvers.JoinExprResolver(this._exprFac.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));

            for (int i = 3; i <= 5; i++) // very expensive
            {
                TestExprType[][] combinations = Enum.GetValues(typeof(TestExprType)).Cast <TestExprType>().Where(type => (int)type <= 8).GetCombinations(i);

                foreach (TestExprType[] combination in combinations)
                {
                    IExpression compCreateExpr = this._exprFac.GetExpression("group", ExpressionFactoryNameTarget.OperatorSymbol);
                    joinExpr.AddOperand("ds_1", compCreateExpr);

                    IDataStructure expectedStructure = ModelResolvers.DsResolver();
                    for (int k = 2; k <= i; k++)
                    {
                        IExpression idExpr = ModelResolvers.ExprResolver();
                        idExpr.ExpressionText = $"Id{k}";
                        idExpr.Structure      = ModelResolvers.DsResolver($"Id{k}", ComponentType.Identifier, (BasicDataType)combination[k - 1]);
                        compCreateExpr.AddOperand($"ds_{k}", idExpr);

                        expectedStructure.AddStructure(compCreateExpr.Operands[$"ds_{k}"].Structure);
                    }

                    IDataStructure dataStructure = compCreateExpr.OperatorDefinition.GetOutputStructure(compCreateExpr);

                    Assert.True(expectedStructure.EqualsObj(dataStructure));
                }
            }
        }
        public void GetOutputStructure_NScalarsExpr_DataStructure(string opSymbol)
        {
            IJoinExpression joinExpr = ModelResolvers.JoinExprResolver(this._exprFac.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));

            for (int i = 3; i <= 5; i++) // very expensive
            {
                TestExprType[][] combinations = Enum.GetValues(typeof(TestExprType)).Cast <TestExprType>().Where(type => (int)type <= 8).GetCombinations(i);

                foreach (TestExprType[] combination in combinations)
                {
                    IExpression compCreateExpr = TestExprFactory.GetExpression(combination);
                    compCreateExpr.OperatorDefinition = this._exprFac.OperatorResolver(opSymbol);
                    joinExpr.AddOperand("ds_1", compCreateExpr);

                    IDataStructure expectedStructure = compCreateExpr.Operands["ds_1"].Structure.GetCopy();
                    for (int k = 2; k <= i; k++)
                    {
                        expectedStructure.AddStructure(compCreateExpr.Operands[$"ds_{k}"].Structure);
                    }

                    IDataStructure dataStructure = compCreateExpr.OperatorDefinition.GetOutputStructure(compCreateExpr);

                    Assert.True(expectedStructure.EqualsObj(dataStructure));
                }
            }
        }
        public void GetOutputStructure_Group2ScalarsExpr_DataStructure(params TestExprType[] types)
        {
            IExpression compCreateExpr = this._exprFac.GetExpression("group", ExpressionFactoryNameTarget.OperatorSymbol);
            IExpression idExpr1        = ModelResolvers.ExprResolver();
            IExpression idExpr2        = ModelResolvers.ExprResolver();

            idExpr1.ExpressionText = "Id1";
            idExpr2.ExpressionText = "Id2";
            idExpr1.Structure      = ModelResolvers.DsResolver("Id1", ComponentType.Identifier, (BasicDataType)types[0]);
            idExpr2.Structure      = ModelResolvers.DsResolver("Id2", ComponentType.Identifier, (BasicDataType)types[1]);
            compCreateExpr.AddOperand("ds_1", idExpr1);
            compCreateExpr.AddOperand("ds_2", idExpr2);

            IJoinExpression joinExpr = ModelResolvers.JoinExprResolver(this._exprFac.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));

            joinExpr.AddOperand("ds_1", compCreateExpr);

            IDataStructure expectedStructure = compCreateExpr.Operands["ds_1"].Structure.GetCopy();

            expectedStructure.Identifiers.Add(compCreateExpr.Operands["ds_2"].Structure.GetCopy().Identifiers[0]);

            IDataStructure dataStructure = compCreateExpr.OperatorDefinition.GetOutputStructure(compCreateExpr);

            Assert.True(expectedStructure.EqualsObj(dataStructure));
        }
        public void Build_Expr_Expr()
        {
            UsingBranch usingBranch = new UsingBranch(this._exprFac);

            IExpression     expr     = TestExprFactory.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol);
            IJoinExpression joinExpr = ModelResolvers.JoinExprResolver(expr);

            IExpression ds1Expr = TestExprFactory.GetExpression("get", ExpressionFactoryNameTarget.OperatorSymbol);

            ds1Expr.Structure = ModelResolvers.DsResolver();
            ds1Expr.Structure.Identifiers.Add(new StructureComponent(BasicDataType.Integer, "Id1"));
            ds1Expr.Structure.Identifiers.Add(new StructureComponent(BasicDataType.Boolean, "Id2"));

            IExpression ds2Expr = TestExprFactory.GetExpression("get", ExpressionFactoryNameTarget.OperatorSymbol);

            ds2Expr.Structure = ModelResolvers.DsResolver();
            ds2Expr.Structure.Identifiers.Add(new StructureComponent(BasicDataType.Integer, "Id1"));
            ds2Expr.Structure.Identifiers.Add(new StructureComponent(BasicDataType.Boolean, "Id2"));
            ds2Expr.Structure.Identifiers.Add(new StructureComponent(BasicDataType.String, "Id3"));

            IExpression dsBranch = ModelResolvers.ExprResolver();

            dsBranch.AddOperand("ds_1", ds1Expr);
            dsBranch.AddOperand("ds_2", ds2Expr);

            joinExpr.AddOperand("ds", dsBranch);

            IExpression expected = TestExprFactory.GetExpression("Using", ExpressionFactoryNameTarget.ResultName);

            expected.ParamSignature = "using";
            expected.ExpressionText = "using Id1, Id2";

            IExpression expected_1 = ModelResolvers.ExprResolver();
            IExpression expected_2 = ModelResolvers.ExprResolver();

            expected_1.ExpressionText = "Id1";
            expected_2.ExpressionText = "Id2";

            expected.AddOperand("Id1", expected_1);
            expected.AddOperand("Id2", expected_2);

            IExpression result = usingBranch.Build(joinExpr);

            Assert.Equal(expected.OperandsCollection.Count, result.OperandsCollection.Count);
            Assert.Equal(expected.Operands["Id1"].ExpressionText, result.Operands["Id1"].ExpressionText);
            Assert.Equal(expected.Operands["Id2"].ExpressionText, result.Operands["Id2"].ExpressionText);
            Assert.Equal(expected.ExpressionText, result.ExpressionText);
        }
        public void GetOutputStructure_2ScalarsExpr_DataStructure(string opSymbol, params TestExprType[] types)
        {
            IExpression compCreateExpr = TestExprFactory.GetExpression(types);

            compCreateExpr.OperatorDefinition = this._exprFac.OperatorResolver(opSymbol);
            compCreateExpr.Operands["ds_2"].Structure.Measures[0].ComponentName += "2";

            IJoinExpression joinExpr = ModelResolvers.JoinExprResolver(this._exprFac.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));

            joinExpr.AddOperand("ds_1", compCreateExpr);

            IDataStructure expectedStructure = compCreateExpr.Operands["ds_1"].Structure.GetCopy();

            expectedStructure.Measures.Add(compCreateExpr.Operands["ds_2"].Structure.GetCopy().Measures[0]);

            IDataStructure dataStructure = compCreateExpr.OperatorDefinition.GetOutputStructure(compCreateExpr);

            Assert.True(expectedStructure.EqualsObj(dataStructure));
        }
Esempio n. 10
0
        public void GetOutputStructure_WrongNoParamOneDatasetJoinExpr_ThrowsException(BasicDataType type)
        {
            foreach (string name in DatasetClauseOperator.ClauseNames.Where(name => !name.In("Pivot", "Unpivot", "Subspace")))
            {
                IExpression joinExpr            = ModelResolvers.JoinExprResolver(TestExprFactory.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));
                IExpression datasetExpr         = TestExprFactory.GetExpression("get", ExpressionFactoryNameTarget.OperatorSymbol);
                IExpression clauseExpr          = TestExprFactory.GetExpression(name, ExpressionFactoryNameTarget.ResultName);
                IExpression periodIndicatorExpr = TestExprFactory.GetExpression("period_indicator", ExpressionFactoryNameTarget.OperatorSymbol);

                joinExpr.AddOperand("ds", ModelResolvers.ExprResolver());
                joinExpr.Operands["ds"].AddOperand("ds_1", datasetExpr);
                joinExpr.AddOperand(name, clauseExpr);
                clauseExpr.AddOperand("ds_1", periodIndicatorExpr);

                datasetExpr.Structure = ModelResolvers.DsResolver();
                datasetExpr.Structure.Identifiers.Add(new StructureComponent(BasicDataType.Integer, "Id1"));
                datasetExpr.Structure.Identifiers.Add(new StructureComponent(type, "Id2"));
                datasetExpr.Structure.Measures.Add(new StructureComponent(BasicDataType.String, "Me1"));

                Assert.ThrowsAny <VtlOperatorError>(() => { periodIndicatorExpr.OperatorDefinition.GetOutputStructure(periodIndicatorExpr); });
            }
        }
        public void GetOutputStructure_GroupNoId_ThrowsException()
        {
            TestExprType[][] wrongCombs = Enum.GetValues(typeof(TestExprType)).Cast <TestExprType>().Where(type => (int)type <= 8).GetCombinations(2);

            IJoinExpression joinExpr = ModelResolvers.JoinExprResolver(this._exprFac.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));

            foreach (TestExprType[] wrongComb in wrongCombs)
            {
                IExpression compCreateExpr = this._exprFac.GetExpression("group", ExpressionFactoryNameTarget.OperatorSymbol);
                IExpression idExpr1        = ModelResolvers.ExprResolver();
                IExpression idExpr2        = ModelResolvers.ExprResolver();

                idExpr1.ExpressionText = "Id1";
                idExpr2.ExpressionText = "Id2";
                idExpr1.Structure      = ModelResolvers.DsResolver("Id1", ComponentType.Identifier, (BasicDataType)wrongComb[0]);
                idExpr2.Structure      = ModelResolvers.DsResolver("Id2", ComponentType.Measure, (BasicDataType)wrongComb[1]);
                compCreateExpr.AddOperand("ds_1", idExpr1);
                compCreateExpr.AddOperand("ds_2", idExpr2);
                joinExpr.AddOperand("ds_1", compCreateExpr);

                // Debug condition example: wrongComb[0] == TestExprType.Integer && wrongComb[1] == TestExprType.Integer
                Assert.ThrowsAny <VtlOperatorError>(() => { compCreateExpr.OperatorDefinition.GetOutputStructure(compCreateExpr); });
            }
        }