Example #1
0
        public void SingleStatementPlusUnmatchableOptionalStatementWithVariable()
        {
            MemoryTripleStore statements = new MemoryTripleStore();

            statements.Add(new Statement(new UriRef("ex:s"), new UriRef("ex:p"), new UriRef("ex:o")));

            SimpleQueryBuilder builder = new SimpleQueryBuilder();

            builder.AddPattern(new Pattern(new Variable("v"), new UriRef("ex:p"), new UriRef("ex:o")));
            builder.AddOptional(new Pattern(new Variable("v"), new UriRef("ex:p2"), new Variable("o")));
            Query query = builder.GetQuery();

            QuerySqlMapper mapper = new QuerySqlMapper(query, statements);

            string expected =
                "SELECT rn_v.resourceHash rh_v, rn_v.nodeHash nh_v, rn_v.nodeType nt_v, u_v.uri val_v, NULL sub_v, NULL rh_o, NULL nh_o, NULL nt_o, NULL val_o, NULL sub_o " +
                "FROM Statements s1 JOIN ResourceNodes rn_v ON rn_v.resourceHash=s1.subjectHash AND rn_v.graphId=s1.graphId " +
                "LEFT OUTER JOIN UriRefs u_v ON rn_v.nodeHash=u_v.hash AND rn_v.nodeType='u' " +
                "WHERE s1.predicateHash=" + statements.GetResourceDenotedBy(new UriRef("ex:p")).GetHashCode() +
                " AND s1.objectHash=" + statements.GetResourceDenotedBy(new UriRef("ex:o")).GetHashCode() +
                " AND s1.graphId=" + statements.GetHashCode();


            Assert.AreEqual(expected, mapper.Sql);
        }
Example #2
0
        public void SingleStatementPlusMultipleOptionalStatementsInOneGroup()
        {
            MemoryTripleStore statements = new MemoryTripleStore();

            statements.Add(new Statement(new UriRef("ex:s"), new UriRef("ex:p"), new UriRef("ex:o")));
            statements.Add(new Statement(new UriRef("ex:s"), new UriRef("ex:p2"), new UriRef("ex:o2")));

            SimpleQueryBuilder builder = new SimpleQueryBuilder();

            builder.AddPattern(new Pattern(new Variable("v"), new UriRef("ex:p"), new UriRef("ex:o")));
            builder.AddOptional(new Pattern(new Variable("v"), new Variable("p"), new UriRef("ex:o2")));
            builder.AddOptional(new Pattern(new Variable("v"), new Variable("p"), new UriRef("ex:o")));
            Query query = builder.GetQuery();

            QuerySqlMapper mapper = new QuerySqlMapper(query, statements);

            string expected =
                "SELECT rn_v.resourceHash rh_v, rn_v.nodeHash nh_v, rn_v.nodeType nt_v, u_v.uri val_v, NULL sub_v, rn_p.resourceHash rh_p, rn_p.nodeHash nh_p, rn_p.nodeType nt_p, u_p.uri val_p, NULL sub_p " +
                "FROM Statements s1 " +
                "LEFT OUTER JOIN Statements s2" +
                " ON s2.subjectHash=s1.subjectHash" +
                " AND s2.objectHash=" + statements.GetResourceDenotedBy(new UriRef("ex:o2")).GetHashCode() +
                " AND s2.graphId=" + statements.GetHashCode() +
                " JOIN Statements s3" +
                " ON s3.subjectHash=s2.subjectHash" +
                " AND s3.predicateHash=s2.predicateHash" +
                " AND s3.objectHash=" + statements.GetResourceDenotedBy(new UriRef("ex:o")).GetHashCode() +
                " AND s3.graphId=" + statements.GetHashCode() +
                " JOIN ResourceNodes rn_v ON rn_v.resourceHash=s1.subjectHash AND rn_v.graphId=s1.graphId " +
                "LEFT OUTER JOIN UriRefs u_v ON rn_v.nodeHash=u_v.hash AND rn_v.nodeType='u' " +
                "JOIN ResourceNodes rn_p ON rn_p.resourceHash=s2.predicateHash AND rn_p.graphId=s2.graphId " +
                "LEFT OUTER JOIN UriRefs u_p ON rn_p.nodeHash=u_p.hash AND rn_p.nodeType='u' " +
                "WHERE s1.predicateHash=" + statements.GetResourceDenotedBy(new UriRef("ex:p")).GetHashCode() +
                " AND s1.objectHash=" + statements.GetResourceDenotedBy(new UriRef("ex:o")).GetHashCode() +
                " AND s1.graphId=" + statements.GetHashCode();


            Assert.AreEqual(expected, mapper.Sql);
        }