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