예제 #1
0
        /// <summary>
        /// Calculates the Numeric Value of this Expression as evaluated for a given Binding
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <param name="bindingID">Binding ID</param>
        /// <returns></returns>
        public override IValuedNode Evaluate(SparqlEvaluationContext context, int bindingID)
        {
            IValuedNode a = this._leftExpr.Evaluate(context, bindingID);
            IValuedNode b = this._rightExpr.Evaluate(context, bindingID);

            IValuedNode[]   inputs = new IValuedNode[] { a, b };
            ISparqlOperator op     = null;

            if (SparqlOperators.TryGetOperator(SparqlOperatorType.Add, out op, inputs))
            {
                return(op.Apply(inputs));
            }
            else
            {
                throw new RdfQueryException("Cannot apply addition to the given inputs");
            }

            // if (a == null || b == null) throw new RdfQueryException("Cannot apply addition when one/both arguments are null");

            // SparqlNumericType type = (SparqlNumericType)Math.Max((int)a.NumericType, (int)b.NumericType);

            // switch (type)
            // {
            //    case SparqlNumericType.Integer:
            //        return new LongNode(null, a.AsInteger() + b.AsInteger());
            //    case SparqlNumericType.Decimal:
            //        return new DecimalNode(null, a.AsDecimal() + b.AsDecimal());
            //    case SparqlNumericType.Float:
            //        return new FloatNode(null, a.AsFloat() + b.AsFloat());
            //    case SparqlNumericType.Double:
            //        return new DoubleNode(null, a.AsDouble() + b.AsDouble());
            //    default:
            //        throw new RdfQueryException("Cannot evalute an Arithmetic Expression when the Numeric Type of the expression cannot be determined");
            // }
        }
예제 #2
0
        private void TestLookup(SparqlOperatorType opType, Type returnedOpInstanceType, IEnumerable <IValuedNode> ns, bool opExists)
        {
            ISparqlOperator op = null;

            if (SparqlOperators.TryGetOperator(opType, out op, ns.ToArray()))
            {
                Assert.True(opExists, "Operator returned when no operator was expected for the given inputs");
                Assert.Equal(returnedOpInstanceType, op.GetType());
            }
            else
            {
                Assert.False(opExists, "No Operator returned when an operator was expected for the given inputs");
            }
        }
예제 #3
0
 public void SparqlOperatorRegistration3()
 {
     try
     {
         MockSparqlOperator op = new MockSparqlOperator();
         SparqlOperators.AddOperator(op);
         Assert.IsTrue(SparqlOperators.IsRegistered(op));
         SparqlOperators.Reset();
         Assert.IsFalse(SparqlOperators.IsRegistered(op));
     }
     finally
     {
         SparqlOperators.Reset();
     }
 }
예제 #4
0
 public void SparqlOperatorRegistration2()
 {
     try
     {
         MockSparqlOperator op = new MockSparqlOperator();
         SparqlOperators.AddOperator(op);
         Assert.True(SparqlOperators.IsRegistered(op));
         SparqlOperators.RemoveOperatorByType(new MockSparqlOperator());
         Assert.False(SparqlOperators.IsRegistered(op));
     }
     finally
     {
         SparqlOperators.Reset();
     }
 }
예제 #5
0
        /// <summary>
        /// Calculates the Numeric Value of this Expression as evaluated for a given Binding
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <param name="bindingID">Binding ID</param>
        /// <returns></returns>
        public override IValuedNode Evaluate(SparqlEvaluationContext context, int bindingID)
        {
            IValuedNode a = this._leftExpr.Evaluate(context, bindingID);
            IValuedNode b = this._rightExpr.Evaluate(context, bindingID);

            IValuedNode[]   inputs = new IValuedNode[] { a, b };
            ISparqlOperator op     = null;

            if (SparqlOperators.TryGetOperator(SparqlOperatorType.Divide, out op, inputs))
            {
                return(op.Apply(inputs));
            }
            else
            {
                throw new RdfQueryException("Cannot apply division to the given inputs");
            }
        }
예제 #6
0
        public void ConfigurationAutoOperators2()
        {
            try
            {
                String data = @"@prefix dnr: <http://www.dotnetrdf.org/configuration#> .
_:a a dnr:SparqlOperator ;
dnr:type ""VDS.RDF.Query.Operators.DateTime.DateTimeAddition"" ;
dnr:enabled false .";

                Graph g = new Graph();
                g.LoadFromString(data);

                ConfigurationLoader.AutoConfigureSparqlOperators(g);

                Assert.IsFalse(SparqlOperators.IsRegistered(new DateTimeAddition()));
            }
            finally
            {
                SparqlOperators.Reset();
            }
        }
예제 #7
0
        public void ConfigurationAutoOperators1()
        {
            try
            {
                String data = @"@prefix dnr: <http://www.dotnetrdf.org/configuration#> .
_:a a dnr:SparqlOperator ;
dnr:type """ + typeof(MockSparqlOperator).AssemblyQualifiedName + @""" .";

                Graph g = new Graph();
                g.LoadFromString(data);

                ConfigurationLoader.AutoConfigureSparqlOperators(g);

                ISparqlOperator op;
                SparqlOperators.TryGetOperator(SparqlOperatorType.Add, out op, null);

                Assert.AreEqual(typeof(MockSparqlOperator), op.GetType());
                SparqlOperators.RemoveOperator(op);
            }
            finally
            {
                SparqlOperators.Reset();
            }
        }