Exemple #1
0
        private IEnumerable <object[]> CodePortionTriples(List <TripleStrOV> buff)
        {
            var dic = _ng.coding_table.InsertPortion(buff.SelectMany(t =>
            {
                ObjectVariants ov = t.Object;
                //if (ov == null)
                //{
                //    Console.WriteLine(t.Subject);
                //    return Enumerable.Empty<string>();
                //}
                //else
                if (ov.Variant == ObjectVariantEnum.Iri)
                {
                    return(new string[] { t.Subject, t.Predicate, ((OV_iri)ov).Name });
                }
                else
                {
                    return(new string[] { t.Subject, t.Predicate });
                }
            }));

            return(buff.Where(t => t.Object != null).Select(t =>
            {
                ObjectVariants ov = t.Object;
                if (ov.Variant == ObjectVariantEnum.Iri)
                {
                    ov = new OV_iriint(dic[((OV_iri)ov).Name], _ng.coding_table.GetString);
                }
                return new object[] { dic[t.Subject], dic[t.Predicate], ov.ToWritable() };
            }));
        }
        public void Build(IGenerator <List <TripleStrOV> > generator)
        {
            table.Clear();
            table.Fill(new object[0]);

            ng.Build();
            generator.Start(list =>
            {
                IEnumerable <string> ids = list.SelectMany(tri =>
                {
                    IEnumerable <string> iris = new string[] { tri.Subject, tri.Predicate };
                    if (tri.Object.Variant == ObjectVariantEnum.Iri)
                    {
                        iris = iris.Concat(new string[] { ((OV_iri)tri.Object).UriString });
                    }
                    if (tri.Object.Variant == ObjectVariantEnum.OtherIntType)
                    {
                        iris = iris.Concat(new string[] { ((OV_typed)tri.Object).DataType });
                    }
                    return(iris);
                });
                var dictionary = ng.coding_table.InsertPortion(ids);
                foreach (var tri in list)
                {
                    int isubj         = dictionary[tri.Subject];
                    int ipred         = dictionary[tri.Predicate];
                    ObjectVariants ov = tri.Object;
                    if (ov.Variant == ObjectVariantEnum.Iri)
                    {
                        int iobj = dictionary[((OV_iri)ov).UriString];
                        ov       = new OV_iriint(iobj, ng.coding_table.GetStringByCode);
                    }
                    table.TableCell.Root.AppendElement(new object[] { false, new object[] { isubj, ipred, ov.ToWritable() } });
                }
            });

            ng.coding_table.BuildScale();
            table.TableCell.Flush();
            spo_ind.IndexArray.Build();
            po_ind.IndexArray.Build();
            so_ind.IndexArray.Build();
            sp_ind.IndexArray.Build();
            s_ind.IndexArray.Build();
            p_ind.IndexArray.Build();
            o_ind.IndexArray.Build();
            spo_ind.Build();
            po_ind.Build();
            so_ind.Build();
            sp_ind.Build();
            s_ind.Build();
            p_ind.Build();
            o_ind.Build();
        }
        public SparqlEqualsExpression(SparqlExpression l, SparqlExpression r, NodeGenerator ng)
        {
            var lc = l.Const;
            var rc = r.Const;

            switch (NullablePairExt.Get(lc, rc))
            {
            case NP.bothNull:
                Operator       = result => l.TypedOperator(result).Equals(r.TypedOperator(result));
                AggregateLevel = SetAggregateLevel(l.AggregateLevel, r.AggregateLevel);
                break;

            case NP.leftNull:
                if (rc.Variant == ObjectVariantEnum.Iri)
                {
                    OV_iriint rcCoded = null;
                    Operator = result =>
                    {
                        var lVal = l.TypedOperator(result);
                        if (lVal.Variant == ObjectVariantEnum.Iri)
                        {
                            return(lVal.Equals(rc));
                        }
                        if (lVal.Variant == ObjectVariantEnum.IriInt)
                        {
                            if (rcCoded == null)
                            {
                                rcCoded = (OV_iriint)ng.GetUri((string)rc.Content);
                            }
                            return(((OV_iriint)lVal).code == rcCoded.code);
                        }
                        else
                        {
                            throw new AggregateException();
                        }
                    };
                }
                else
                {
                    Operator = result => l.TypedOperator(result).Equals(rc);
                }
                AggregateLevel = l.AggregateLevel;
                break;

            case NP.rigthNull:
                if (lc.Variant == ObjectVariantEnum.Iri)
                {
                    OV_iriint lcCoded = null;
                    Operator = result =>
                    {
                        var rVal = r.TypedOperator(result);
                        if (rVal.Variant == ObjectVariantEnum.Iri)
                        {
                            return(rVal.Equals(lc));
                        }
                        if (rVal.Variant == ObjectVariantEnum.IriInt)
                        {
                            if (lcCoded == null)
                            {
                                lcCoded = (OV_iriint)ng.GetUri((string)lc.Content);
                            }
                            return(((OV_iriint)rVal).code == lcCoded.code);
                        }
                        else
                        {
                            throw new AggregateException();
                        }
                    };
                }
                else
                {
                    Operator = result => lc.Equals(r.TypedOperator(result));
                }
                AggregateLevel = r.AggregateLevel;
                break;

            case NP.bothNotNull:
                Const = new OV_bool(lc.Equals(rc));
                break;
            }
            TypedOperator = result => new OV_bool(Operator(result));
        }