예제 #1
0
파일: GEngine.cs 프로젝트: prosardar/BAD
        // Direction = V
        // Direction = H
        public bool AddMove(int Index, int Position, Direction Direction, out string clo)
        {
            clo = "non";
            //closeLine(Index, Position, v, Ori).
            VariableTerm aClo = new VariableTerm();

            FPEngine.SetPredicate(new Close_Line_4(new IntegerTerm(Index), new IntegerTerm(Position), new IntegerTerm((int)Direction), aClo, new ReturnCs(FPEngine)));

            if (FPEngine.Call())
            {
                clo = (string)aClo.ToCsObject();
                FPEngine.Success();
            }

            Term[] argss = { new IntegerTerm(Index), new IntegerTerm(Position), new IntegerTerm((int)Direction) };

            StructureTerm newLine = new StructureTerm(SymbolTerm.MakeSymbol("line", 3), argss);

            FPEngine.SetPredicate(new Assert_1(newLine, new ReturnCs(FPEngine)));

            if (FPEngine.Call())
            {
                FPEngine.Success();
                return true;
            }
            else
                return false;
        }
예제 #2
0
파일: Argument.cs 프로젝트: windlex/Uniera
 public SpSplitArgument(IOperandTerm s1, IOperandTerm s2, VariableToken varId, VariableTerm num)
 {
     TargetStr = s1;
     Split     = s2;
     Var       = varId;
     Num       = num;
 }
예제 #3
0
 public SpForNextArgment(VariableTerm var, IOperandTerm start, IOperandTerm end, IOperandTerm step)
 {
     Cnt   = var;
     Start = start;
     End   = end;
     Step  = step;
 }
예제 #4
0
파일: Argument.cs 프로젝트: windlex/Uniera
 public SpArraySortArgument(VariableTerm var, SortOrder order, IOperandTerm num1, IOperandTerm num2)
 {
     VarToken = var;
     Order    = order;
     Num1     = num1;
     Num2     = num2;
 }
예제 #5
0
파일: Argument.cs 프로젝트: windlex/Uniera
 public SpVarSetArgument(VariableTerm var, IOperandTerm termSrc, IOperandTerm start, IOperandTerm end)
 {
     VariableDest = var;
     Term         = termSrc;
     Start        = start;
     End          = end;
 }
예제 #6
0
파일: Argument.cs 프로젝트: windlex/Uniera
 public SpForNextArgment(VariableTerm var, IOperandTerm start, IOperandTerm end, IOperandTerm step)
 {
     this.Cnt   = var;
     this.Start = start;
     this.End   = end;
     this.Step  = step;
 }
예제 #7
0
        static FunctionMethodTerm CallnameTarget      = null; // "$$$"
        public static void Initialize()
        {
            formatCurlyBrace = new FormatCurlyBrace();
            formatPercent    = new FormatPercent();
            formatYenAt      = new FormatYenAt();
            VariableToken nameID     = GlobalStatic.VariableData.GetSystemVariableToken("NAME");
            VariableToken callnameID = GlobalStatic.VariableData.GetSystemVariableToken("CALLNAME");

            IOperandTerm[] zeroArg = new IOperandTerm[] { new SingleTerm(0) };
            VariableTerm   target  = new VariableTerm(GlobalStatic.VariableData.GetSystemVariableToken("TARGET"), zeroArg);
            VariableTerm   master  = new VariableTerm(GlobalStatic.VariableData.GetSystemVariableToken("MASTER"), zeroArg);
            VariableTerm   player  = new VariableTerm(GlobalStatic.VariableData.GetSystemVariableToken("PLAYER"), zeroArg);
            VariableTerm   assi    = new VariableTerm(GlobalStatic.VariableData.GetSystemVariableToken("ASSI"), zeroArg);

            VariableTerm nametarget     = new VariableTerm(nameID, new IOperandTerm[] { target });
            VariableTerm callnamemaster = new VariableTerm(callnameID, new IOperandTerm[] { master });
            VariableTerm callnameplayer = new VariableTerm(callnameID, new IOperandTerm[] { player });
            VariableTerm nameassi       = new VariableTerm(nameID, new IOperandTerm[] { assi });
            VariableTerm callnametarget = new VariableTerm(callnameID, new IOperandTerm[] { target });

            NameTarget     = new FunctionMethodTerm(formatPercent, new IOperandTerm[] { nametarget, null, null });
            CallnameMaster = new FunctionMethodTerm(formatPercent, new IOperandTerm[] { callnamemaster, null, null });
            CallnamePlayer = new FunctionMethodTerm(formatPercent, new IOperandTerm[] { callnameplayer, null, null });
            NameAssi       = new FunctionMethodTerm(formatPercent, new IOperandTerm[] { nameassi, null, null });
            CallnameTarget = new FunctionMethodTerm(formatPercent, new IOperandTerm[] { callnametarget, null, null });
        }
예제 #8
0
 public void SetTransporter(ExpressionMediator exm)
 {
     for (int i = 0; i < Arguments.Length; i++)
     {
         if (Arguments[i] == null)
         {
             continue;
         }
         if (isRef[i])
         {
             VariableTerm vTerm = (VariableTerm)Arguments[i];
             if (vTerm.Identifier.IsCharacterData)
             {
                 Int64 charaNo = vTerm.GetElementInt(0, exm);
                 if ((charaNo < 0) || (charaNo >= GlobalStatic.VariableData.CharacterList.Count))
                 {
                     throw new CodeEE("キャラクタ配列変数" + vTerm.Identifier.Name + "の第1引数(" + charaNo.ToString() + ")はキャラ登録番号の範囲外です");
                 }
                 TransporterRef[i] = (Array)vTerm.Identifier.GetArrayChara((int)charaNo);
             }
             else
             {
                 TransporterRef[i] = (Array)vTerm.Identifier.GetArray();
             }
         }
         else if (Arguments[i].GetOperandType() == typeof(Int64))
         {
             TransporterInt[i] = Arguments[i].GetIntValue(exm);
         }
         else
         {
             TransporterStr[i] = Arguments[i].GetStrValue(exm);
         }
     }
 }
예제 #9
0
 ///////////////////////////////////////////////////////////
 public MapLookupTerm(VariableTerm map, ExpressionList indices)
 {
     Debug.Assert(map != null);
     Debug.Assert(indices != null);
     this.function = MapLookup.getMapLookup();
     this.map      = map;
     this.indices  = indices;
 }
예제 #10
0
파일: Argument.cs 프로젝트: windlex/Uniera
 public SpArrayShiftArgument(VariableTerm var, IOperandTerm num1, IOperandTerm num2, IOperandTerm num3, IOperandTerm num4)
 {
     VarToken = var;
     Num1     = num1;
     Num2     = num2;
     Num3     = num3;
     Num4     = num4;
 }
        public AggregateExpression Count(VariableTerm variable)
        {
            var aggregate = _distinctAggregate
                ? (ISparqlAggregate) new CountDistinctAggregate(variable)
                : new CountAggregate(variable);

            return(new AggregateExpression(aggregate));
        }
예제 #12
0
        /* FIN ATRIBUTOS */

        /* METODO QUE CREA UN LABERINTO DESDE PROLOG E INICIALIZA EL ATRIBUTO REPRESENTACIONLABERINTO Y LABERINTO
         * LA CANTIDAD DE TROFEOS ESTA DADA POR EL NIVEL DE DIFICULTAD ENTRE 0 Y 10, NADA DE TROFEOS O LLENO.
         */
        public void crearLaberinto(int dimensionX, int dimensionY, int nivelDificultad)
        {
            Term nil = SymbolTerm.MakeSymbol("0");
            bool resultado;
            //laberinto(L,DimX,DimY,Dificultad,MinimosCaminosSalida(noImplementado))
            Predicate    predicate;
            VariableTerm laberintoCompleto;
            Laberinto_5  lab;

            /* INSTANCIAS */
            VariableTerm laberinto  = new VariableTerm();
            VariableTerm trofeos    = new VariableTerm();
            VariableTerm inicio     = new VariableTerm();
            VariableTerm final      = new VariableTerm();
            IntegerTerm  dimX       = new IntegerTerm(dimensionX);
            IntegerTerm  dimY       = new IntegerTerm(dimensionY);
            IntegerTerm  dificultad = new IntegerTerm(nivelDificultad);

            if (pInterface == null)
            {
                pInterface = new PrologInterface();
            }
            /* FIN */

            //MIENTRAS NO GENERE UN RESULTADO INTENTARA CREAR UN LABERINTO
            do
            {
                /* === INSTANCIAS Y EJECUCION PARA LA CREACION DEL LABERINTO MEDIANTE PROLOG === */
                laberintoCompleto = new VariableTerm();
                lab       = new Laberinto_5(laberintoCompleto, dimX, dimY, dificultad, nil, new ReturnCs(pInterface));
                predicate = lab;
                pInterface.SetPredicate(predicate);
                resultado = pInterface.Call();
                /* === FINALIZA INSTANCIAS Y EJECUCIONES === */
                if (resultado)
                {
                    /* === ASIGNACION DE ATRIBUTOS DE CLASE === */
                    predicate = new Get_Lab_2(laberintoCompleto, laberinto, new ReturnCs(pInterface));
                    pInterface.SetPredicate(predicate);
                    pInterface.Call();
                    predicate = new Get_Trof_2(laberintoCompleto, trofeos, new ReturnCs(pInterface));
                    pInterface.SetPredicate(predicate);
                    pInterface.Call();
                    predicate = new Get_Inicio_2(laberintoCompleto, inicio, new ReturnCs(pInterface));
                    pInterface.SetPredicate(predicate);
                    pInterface.Call();
                    predicate = new Get_Final_2(laberintoCompleto, final, new ReturnCs(pInterface));
                    pInterface.SetPredicate(predicate);
                    pInterface.Call();
                    /* === FIN ASIGNACION === */

                    RepresentacionLaberinto = laberintoCompleto.Dereference();
                    Console.WriteLine(RepresentacionLaberinto.ToString());
                    Laberinto = new Laberinto((ListTerm)laberinto.Dereference(), (ListTerm)trofeos.Dereference(), ((IntegerTerm)inicio.Dereference()).IntValue(), ((IntegerTerm)final.Dereference()).IntValue(), dimensionX, dimensionY);
                }
            } while (!resultado);
        }
예제 #13
0
        public void SparqlExpressionsXPathReplaceNullInCanParallelise2()
        {
            // when
            var             find    = new VariableTerm("find");
            var             replace = new ConstantTerm(new StringNode(null, "replacement"));
            ReplaceFunction func    = new ReplaceFunction(new VariableTerm("term"), find, replace);

            // then
            var canParallelise = func.CanParallelise;
        }
예제 #14
0
        public void CanBuildSelectSumWithHaving()
        {
            // given
            var o = new VariableTerm("o");

            // when
            var query = QueryBuilder.Select(ex => ex.Sum(o)).As("sum")
                        .Where(BuildSPOPattern)
                        .Having(ex => ex.Variable("sum") > 10)
                        .BuildQuery();

            // then
            Assert.Equal("?sum > 10", query.Having.Expression.ToString().Trim());
        }
예제 #15
0
        public void SparqlCountDistinctHasDistinctModifier()
        {
            // given
            var term      = new VariableTerm("var");
            var aggregate = new CountDistinctAggregate(term);

            // when
            var arguments = aggregate.Arguments.ToArray();

            // then
            Assert.Equal(2, arguments.Length);
            Assert.True(arguments[0] is DistinctModifier);
            Assert.Same(term, arguments[1]);
        }
예제 #16
0
        public static IOperandTerm ReduceUnaryTerm(OperatorCode op, IOperandTerm o1)
        {
            OperatorMethod method = null;

            if (op == OperatorCode.Increment || op == OperatorCode.Decrement)
            {
                VariableTerm var = o1 as VariableTerm;
                if (var == null)
                {
                    throw new CodeEE("変数以外をインクリメントすることはできません");
                }
                if (var.Identifier.IsConst)
                {
                    throw new CodeEE("変更できない変数をインクリメントすることはできません");
                }
            }
            if (o1.GetOperandType() == typeof(Int64))
            {
                if (op == OperatorCode.Plus)
                {
                    return(o1);
                }
                OperatorMethod operator_method = null;
                if (unaryDic.TryGetValue(op, out operator_method))
                {
                    method = operator_method;
                }
            }
            if (method != null)
            {
                return(new FunctionMethodTerm(method, new IOperandTerm[] { o1 }));
            }
            string errMes = "";

            if (o1.GetOperandType() == typeof(Int64))
            {
                errMes += "数値型";
            }
            else if (o1.GetOperandType() == typeof(string))
            {
                errMes += "文字列型";
            }
            else
            {
                errMes += "不定型";
            }
            errMes += "に単項演算子\'" + OperatorManager.ToOperatorString(op) + "\'は適用できません";
            throw new CodeEE(errMes);
        }
예제 #17
0
        public void CanBuildSelectSumWithGrouping()
        {
            // given
            var o = new VariableTerm("o");

            // when
            var query = QueryBuilder.Select(ex => ex.Sum(o)).As("sum")
                        .Where(BuildSPOPattern)
                        .GroupBy("s")
                        .BuildQuery();

            // then
            Assert.Equal("sum", query.Variables.Single().Name);
            Assert.Equal("s", query.GroupBy.Variables.Single());
        }
        public AggregateExpression GroupConcat(VariableTerm variable, string separator = " ")
        {
            GroupConcatAggregate aggregate;

            if (separator != " ")
            {
                aggregate = new GroupConcatAggregate(variable, Constant(separator).Expression, _distinctAggregate);
            }
            else
            {
                aggregate = new GroupConcatAggregate(variable, _distinctAggregate);
            }

            return(new AggregateExpression(aggregate));
        }
예제 #19
0
        /// <summary>
        /// Counts the results.
        /// </summary>
        /// <param name="context">Evaluation Context.</param>
        /// <param name="bindingIDs">Binding IDs over which the Aggregate applies.</param>
        /// <returns></returns>
        public override IValuedNode Apply(SparqlEvaluationContext context, IEnumerable <int> bindingIDs)
        {
            int c;
            HashSet <IValuedNode> values = new HashSet <IValuedNode>();

            if (_varname != null)
            {
                // Ensure the COUNTed variable is in the Variables of the Results
                if (!context.Binder.Variables.Contains(_varname))
                {
                    throw new RdfQueryException("Cannot use the Variable " + _expr.ToString() + " in a COUNT Aggregate since the Variable does not occur in a Graph Pattern");
                }

                // Just Count the number of results where the variable is bound
                VariableTerm varExpr = (VariableTerm)_expr;

                foreach (int id in bindingIDs)
                {
                    IValuedNode temp = varExpr.Evaluate(context, id);
                    if (temp != null)
                    {
                        values.Add(temp);
                    }
                }
                c = values.Count;
            }
            else
            {
                // Count the distinct non-null results
                foreach (int id in bindingIDs)
                {
                    try
                    {
                        IValuedNode temp = _expr.Evaluate(context, id);
                        if (temp != null)
                        {
                            values.Add(temp);
                        }
                    }
                    catch
                    {
                        // Ignore errors
                    }
                }
                c = values.Count;
            }
            return(new LongNode(null, c));
        }
예제 #20
0
        /// <summary>
        /// Checks the equality of objects.
        /// </summary>
        /// <param name="obj">Object to be checked.</param>
        /// <returns>True if the objects are equal, false otherwise.</returns>
        public override bool Equals(object obj)
        {
            if (obj == this)
            {
                return(true);
            }

            VariableTerm other = obj as VariableTerm;

            if (other == null)
            {
                return(false);
            }

            return(NameId == other.NameId);
        }
예제 #21
0
        /// <summary>
        /// Counts the results
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <param name="bindingIDs">Binding IDs over which the Aggregate applies</param>
        /// <returns></returns>
        public override IValuedNode Apply(SparqlEvaluationContext context, IEnumerable <int> bindingIDs)
        {
            int c = 0;

            if (this._varname != null)
            {
                //Ensure the COUNTed variable is in the Variables of the Results
                if (!context.Binder.Variables.Contains(this._varname))
                {
                    throw new RdfQueryException("Cannot use the Variable " + this._expr.ToString() + " in a COUNT Aggregate since the Variable does not occur in a Graph Pattern");
                }

                //Just Count the number of results where the variable is bound
                VariableTerm varExpr = (VariableTerm)this._expr;
                foreach (int id in bindingIDs)
                {
                    if (varExpr.Evaluate(context, id) != null)
                    {
                        c++;
                    }
                }
            }
            else
            {
                //Count the number of results where the result in not null/error
                foreach (int id in bindingIDs)
                {
                    try
                    {
                        if (this._expr.Evaluate(context, id) != null)
                        {
                            c++;
                        }
                    }
                    catch
                    {
                        //Ignore errors
                    }
                }
            }

            return(new LongNode(null, c));
        }
예제 #22
0
        public void SparqlVarNames()
        {
            var names = new List <string>
            {
                "?var",
                "$var",
                "var"
            };

            foreach (var name in names)
            {
                var var = new SparqlVariable(name);
                Assert.Equal("var", var.Name);

                var varPat = new VariablePattern(name);
                Assert.Equal("var", varPat.VariableName);

                var varTerm = new VariableTerm(name);
                Assert.Equal("var", varTerm.Variables.First());
            }
        }
예제 #23
0
        public void SparqlVarNames()
        {
            List <String> names = new List <String>
            {
                "?var",
                "$var",
                "var"
            };

            foreach (String name in names)
            {
                SparqlVariable var = new SparqlVariable(name);
                Assert.AreEqual("var", var.Name);

                VariablePattern varPat = new VariablePattern(name);
                Assert.AreEqual("var", varPat.VariableName);

                VariableTerm varTerm = new VariableTerm(name);
                Assert.AreEqual("var", varTerm.Variables.First());
            }
        }
예제 #24
0
        /// <summary>
        /// Counts the results
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <param name="bindingIDs">Binding IDs over which the Aggregate applies</param>
        /// <returns></returns>
        public override IValuedNode Apply(SparqlEvaluationContext context, IEnumerable <int> bindingIDs)
        {
            int c = 0;

            if (this._varname != null)
            {
                //Just Count the number of results where the variable is bound
                VariableTerm varExpr = (VariableTerm)this._expr;
                foreach (int id in bindingIDs)
                {
                    if (varExpr.Evaluate(context, id) != null)
                    {
                        c++;
                    }
                }
            }
            else
            {
                //Count the number of results where the result in not null/error
                foreach (int id in bindingIDs)
                {
                    try
                    {
                        if (this._expr.Evaluate(context, id) != null)
                        {
                            c++;
                        }
                    }
                    catch
                    {
                        //Ignore errors
                    }
                }
            }

            return(new LongNode(null, c));
        }
예제 #25
0
파일: GEngine.cs 프로젝트: prosardar/BAD
        public void Clear()
        {
            VariableTerm Index = new VariableTerm();
            VariableTerm Position = new VariableTerm();
            VariableTerm Direction = new VariableTerm();
            Term[] argss = { Index, Position, Direction };

            StructureTerm newLine = new StructureTerm(SymbolTerm.MakeSymbol("line", 3), argss);

            FPEngine.SetPredicate(new Retractall_1(newLine, new ReturnCs(FPEngine)));

            if (FPEngine.Call())
            {
                FPEngine.Success();
            }
        }
예제 #26
0
 /// <summary>
 /// Creates a new COUNT Aggregate
 /// </summary>
 /// <param name="expr">Variable Expression</param>
 public CountAggregate(VariableTerm expr)
     : base(expr)
 {
     this._varname = expr.ToString().Substring(1);
 }
예제 #27
0
 /// <summary>
 /// Creates a new NMAX Aggregate
 /// </summary>
 /// <param name="expr">Variable Expression</param>
 /// <param name="distinct">Whether a DISTINCT modifier applies</param>
 public NumericMaxAggregate(VariableTerm expr, bool distinct)
     : base(expr, distinct)
 {
     _varname = expr.ToString().Substring(1);
 }
예제 #28
0
 /// <summary>
 /// Creates a new NMAX Aggregate
 /// </summary>
 /// <param name="expr">Variable Expression</param>
 public NumericMaxAggregate(VariableTerm expr)
     : this(expr, false)
 {
 }
예제 #29
0
파일: GEngine.cs 프로젝트: prosardar/BAD
        public string go(bool FirstRed, GameLevel RedPlayer, GameLevel YellowPlayer)
        {
            List<int> Indexes = GenerateArray(7);
            List<int> Positions = GenerateArray(6);

            #region Create Terms Indexes and Positions
            ListTerm lindexes = new ListTerm(new IntegerTerm(Indexes[0]),
            new ListTerm(new IntegerTerm(Indexes[1]),
                new ListTerm(new IntegerTerm(Indexes[2]),
                    new ListTerm(new IntegerTerm(Indexes[3]),
                        new ListTerm(new IntegerTerm(Indexes[4]),
                            new ListTerm(new IntegerTerm(Indexes[5]),
                                new ListTerm(new IntegerTerm(Indexes[6]), SymbolTerm.MakeSymbol("[]"))))))));

            ListTerm lpositions = new ListTerm(new IntegerTerm(Positions[0]),
            new ListTerm(new IntegerTerm(Positions[1]),
                new ListTerm(new IntegerTerm(Positions[2]),
                    new ListTerm(new IntegerTerm(Positions[3]),
                        new ListTerm(new IntegerTerm(Positions[4]),
                            new ListTerm(new IntegerTerm(Positions[5]), SymbolTerm.MakeSymbol("[]")))))));
            #endregion

            FPEngine.SetPredicate(new Deldb_0(new ReturnCs(FPEngine)));

            if (!FPEngine.Call())
            {
                aReturnString = "false";
                return aReturnString;
            }

            FPEngine.Success();
            StructureTerm a;
            Term[] args = { lpositions };
            a = new StructureTerm(SymbolTerm.MakeSymbol("availablePositions", 1), args);

            FPEngine.SetPredicate(new Assert_1(a, new ReturnCs(FPEngine)));

            if (FPEngine.Call())
            {
                FPEngine.Success();

                Term[] argss = { lindexes };
                a = new StructureTerm(SymbolTerm.MakeSymbol("availableIndexs", 1), argss);

                FPEngine.SetPredicate(new Assert_1(a, new ReturnCs(FPEngine)));

                if (FPEngine.Call())
                {
                    FPEngine.Success();
                    S();

                    VariableTerm Index = new VariableTerm();
                    VariableTerm Position = new VariableTerm();
                    VariableTerm Dir = new VariableTerm();
                    VariableTerm Team = new VariableTerm();
                    VariableTerm Orientation = new VariableTerm();
                    String aDirection;

                    if (FirstRed)
                        switch (RedPlayer)
                        {
                            case GameLevel.Easy:
                                FPEngine.SetPredicate(new Go_5(Index, Position, Dir, Team, Orientation, new ReturnCs(FPEngine)));
                                break;
                            case GameLevel.Normal:
                                FPEngine.SetPredicate(new GoSmart_5(Index, Position, Dir, Team, Orientation, new ReturnCs(FPEngine)));
                                break;
                            case GameLevel.Hard:
                                break;
                        }
                    else
                        switch (YellowPlayer)
                        {
                            case GameLevel.Easy:
                                FPEngine.SetPredicate(new Go_5(Index, Position, Dir, Team, Orientation, new ReturnCs(FPEngine)));
                                break;
                            case GameLevel.Normal:
                                FPEngine.SetPredicate(new GoSmart_5(Index, Position, Dir, Team, Orientation, new ReturnCs(FPEngine)));
                                break;
                            case GameLevel.Hard:
                                break;
                        }

                    if (!FPEngine.Call())
                    {
                        aReturnString = "false";

                        return aReturnString;
                    }

                    this.aIndex = (int)Index.ToCsObject();
                    this.aPosition = (int)Position.ToCsObject();

                    this.aDirection = (Direction)Dir.ToCsObject();
                    string or = (string)Orientation.ToCsObject();
                    if (or == "left")
                        this.Ori = Ori.left;
                    else if (or == "leftright")
                        this.Ori = Ori.leftright;
                    else if (or == "rightleft")
                        this.Ori = Ori.rightleft;
                    else if (or == "right")
                        this.Ori = Ori.right;
                    else if (or == "up")
                        this.Ori = Ori.up;
                    else if (or == "updown")
                        this.Ori = Ori.updown;
                    else if (or == "downup")
                        this.Ori = Ori.downup;
                    else if (or == "down")
                        this.Ori = Ori.down;
                    else if (or == "non")
                        this.Ori = Ori.non;

                    FPEngine.Success();
                    aReturnString = (string)Team.ToCsObject();
                    return aReturnString;
                }
            }
            aReturnString = "false";
            return aReturnString;
        }
예제 #30
0
파일: GEngine.cs 프로젝트: prosardar/BAD
        private void S()
        {
            VariableTerm l1 = new VariableTerm();
            VariableTerm l2 = new VariableTerm();
            VariableTerm l3 = new VariableTerm();

            FPEngine.SetPredicate(new Available_Indexs_1(l1, new ReturnCs(FPEngine)));

            if (FPEngine.Call())
            {
                object m = 0;
                FPEngine.Success();
            }
            int l = 0;
        }
예제 #31
0
        private static ISparqlExpression BuildFunctionExpression(SingleValueFunctionCallNode functionOperator)
        {
            var funcName = functionOperator.Name;

            string[] funcNames = { "contains",  "endswith", "startswith", "length",  "tolower", "toupper",
                                   "substring", "replace",  "concat",     "indexof", "trim",    "year",   "day","month", "hour", "minute",
                                   "second",    "now",      "ceiling",    "floor",   "round",   };

            if (!funcNames.Contains(funcName))
            {
                throw new NotImplementedException($"Function {funcName} not implemented.");
            }

            if (funcName == "now") // NOW() in sparql does not work, will generate this now in .net instead.
            {
                ISparqlExpression exp = new NowFunction();
                return((new UnaryExpressionFilter(exp)).Expression);
            }

            var parameter = functionOperator.Parameters.ElementAt(0);
            ISparqlExpression valueTerm = null;

            if (parameter.GetType() == typeof(SingleValuePropertyAccessNode))
            {
                valueTerm = new VariableTerm($"?{(parameter as SingleValuePropertyAccessNode).Property.Name}");
            }
            else if (parameter.GetType() == typeof(SingleValueFunctionCallNode))
            {
                valueTerm = BuildFunctionExpression(parameter as SingleValueFunctionCallNode);
            }

            if (funcName == "length")
            {
                return((new UnaryExpressionFilter(new StrLenFunction(valueTerm))).Expression);
            }
            else if (funcName == "tolower")
            {
                return((new UnaryExpressionFilter(new LCaseFunction(valueTerm))).Expression);
            }
            else if (funcName == "toupper")
            {
                return((new UnaryExpressionFilter(new UCaseFunction(valueTerm))).Expression);
            }
            else if (funcName == "year")
            {
                return((new UnaryExpressionFilter(new YearFunction(valueTerm))).Expression);
            }
            else if (funcName == "day")
            {
                return((new UnaryExpressionFilter(new DayFunction(valueTerm))).Expression);
            }
            else if (funcName == "month")
            {
                return((new UnaryExpressionFilter(new MonthFunction(valueTerm))).Expression);
            }
            else if (funcName == "hour")
            {
                return((new UnaryExpressionFilter(new HoursFunction(valueTerm))).Expression);
            }
            else if (funcName == "minute")
            {
                return((new UnaryExpressionFilter(new MinutesFunction(valueTerm))).Expression);
            }
            else if (funcName == "second")
            {
                return((new UnaryExpressionFilter(new SecondsFunction(valueTerm))).Expression);
            }
            else if (funcName == "ceiling")
            {
                return((new UnaryExpressionFilter(new CeilFunction(valueTerm))).Expression);
            }
            else if (funcName == "floor")
            {
                return((new UnaryExpressionFilter(new FloorFunction(valueTerm))).Expression);
            }
            else if (funcName == "round")
            {
                return((new UnaryExpressionFilter(new RoundFunction(valueTerm))).Expression);
            }
            else
            {
                var          constant     = functionOperator.Parameters.ElementAt(1) as ConstantNode;
                ConstantTerm constantTerm = new ConstantTerm(CreateLiteralNode(constant));
                if (funcName == "contains")
                {
                    return((new UnaryExpressionFilter(new ContainsFunction(valueTerm, constantTerm))).Expression);
                }
                else if (funcName == "endswith")
                {
                    return((new UnaryExpressionFilter(new StrEndsFunction(valueTerm, constantTerm))).Expression);
                }
                else if (funcName == "startswith")
                {
                    return((new UnaryExpressionFilter(new StrStartsFunction(valueTerm, constantTerm))).Expression);
                }
                else if (funcName == "concat")
                {
                    return((new UnaryExpressionFilter(new ConcatFunction(new List <ISparqlExpression> {
                        valueTerm, constantTerm
                    }))).Expression);
                }
                else if (funcName == "indexof")
                {
                    throw new NotImplementedException("Sparql does not have counterpart of indexof function.");
                }
                else if (funcName == "trim")
                {
                    throw new NotImplementedException("Sparql needs regex to do trim.");
                }
                else if (funcName == "substring")
                {
                    if (functionOperator.Parameters.Count() > 2)
                    {
                        var          constant2     = functionOperator.Parameters.ElementAt(2) as ConstantNode;
                        ConstantTerm constantTerm2 = new ConstantTerm(CreateLiteralNode(constant2));
                        return((new UnaryExpressionFilter(new SubStrFunction(valueTerm, constantTerm, constantTerm2))).Expression);
                    }
                    else
                    {
                        return((new UnaryExpressionFilter(new SubStrFunction(valueTerm, constantTerm))).Expression);
                    }
                }
                else if (funcName == "replace")
                {
                    var          constant2     = functionOperator.Parameters.ElementAt(2) as ConstantNode;
                    ConstantTerm constantTerm2 = new ConstantTerm(CreateLiteralNode(constant2));
                    return((new UnaryExpressionFilter(new ReplaceFunction(valueTerm, constantTerm, constantTerm2))).Expression);
                }
            }
            return(null);
        }
        public AggregateExpression Min(VariableTerm variable)
        {
            var aggregate = new MinAggregate(variable, _distinctAggregate);

            return(new AggregateExpression(aggregate));
        }
        public AggregateExpression Avg(VariableTerm variable)
        {
            var aggregate = new AverageAggregate(variable, _distinctAggregate);

            return(new AggregateExpression(aggregate));
        }
        public AggregateExpression Sum(VariableTerm variable)
        {
            var sumAggregate = new SumAggregate(variable, _distinctAggregate);

            return(new AggregateExpression(sumAggregate));
        }