We considered the following six-atoms query (below in SPARQL syntax), on the LUBM^\exists 15M dataset:
SELECT DISTINCT ?U ?I ?N ?E ?T
WHERE { ?X <http://www.w3.org/1999/02/22-
The SQL syntax of the query as translated by DB2 RDF store into SQL is:
SELECT DISTINCT ?U ?I ?N ?E ?T
WHERE
{ ?X <http://www.w3.org/1999/02/22-
?U <http://swat.cse.lehigh.edu/
?X <http://swat.cse.lehigh.edu/
?X <http://swat.cse.lehigh.edu/
?X <http://swat.cse.lehigh.edu/
?X <http://swat.cse.lehigh.edu/
}
| Cache hit : false | 67 | 113 | 0 | 4888 |
WITH Q1 AS (SELECT entry AS entry, T.gid AS gid,
CASE WHEN T.prop1 = ‘http://www.w3.org/1999/02/22-
ELSE NULL END AS val0
FROM lubm15m_RPH AS T
WHERE T.entry = ‘http://swat.cse.lehigh.edu/
(( T.PROP1= ‘http://www.w3.org/1999/02/22-
QS1 AS ( SELECT COALESCE(S0.elem,T.val0) AS X
FROM Q1 AS T
LEFT OUTER JOIN lubm15m_RS AS S0 ON T.val0=S0.list_id AND T.val0 LIKE ‘lid:%’),
Q2 AS (SELECT DISTINCT QS1.X AS X, T.gid AS gid,
CASE WHEN T.prop0 = ‘http://swat.cse.lehigh.edu/
WHEN T.prop4 = ‘http://swat.cse.lehigh.edu/
WHEN T.prop1 = ‘http://swat.cse.lehigh.edu/
ELSE NULL END AS val0
FROM QS1,lubm15m_RPH AS T
WHERE QS1.X=T.entry AND T.gid = ‘DEF’ AND
(( T.PROP0= ‘http://swat.cse.lehigh.edu/
T.PROP4= ‘http://swat.cse.lehigh.edu/
T.PROP1= ‘http://swat.cse.lehigh.edu/
QS2 AS ( SELECT DISTINCT T.X AS X,COALESCE(S0.elem,T.val0) AS U
FROM Q2 AS T
LEFT OUTER JOIN lubm15m_RS AS S0 ON T.val0=S0.list_id AND T.val0 LIKE ‘lid:%’),
Q3 AS (SELECT DISTINCT QS2.X AS X, T.gid AS gid,
CASE WHEN T.prop8 = ‘http://swat.cse.lehigh.edu/
ELSE NULL END AS val0,
CASE WHEN T.prop8 = ‘http://swat.cse.lehigh.edu/
ELSE NULL END AS typ0,
CASE WHEN T.prop7 = ‘http://swat.cse.lehigh.edu/
ELSE NULL END AS val1,
CASE WHEN T.prop7 = ‘http://swat.cse.lehigh.edu/
ELSE NULL END AS typ1,
CASE WHEN T.prop10 = ‘http://swat.cse.lehigh.edu/
ELSE NULL END AS val2,
CASE WHEN T.prop10 = ‘http://swat.cse.lehigh.edu/
ELSE NULL END AS typ2,
CASE WHEN T.prop4 = ‘http://swat.cse.lehigh.edu/
ELSE NULL END AS val3,
CASE WHEN T.prop4 = ‘http://swat.cse.lehigh.edu/
ELSE NULL END AS typ3,QS2.U AS U
FROM QS2,lubm15m_DPH AS T
WHERE QS2.X=T.entry AND T.gid = ‘DEF’ AND
(( T.PROP8= ‘http://swat.cse.lehigh.edu/
( T.PROP7= ‘http://swat.cse.lehigh.edu/
( T.PROP10= ‘http://swat.cse.lehigh.edu/
( T.PROP4= ‘http://swat.cse.lehigh.edu/
QS3 AS ( SELECT DISTINCT T.X AS X,COALESCE(S0.elem,T.val0) AS T,COALESCE(S0.typ,T.typ0) AS T_typ,
COALESCE(S1.elem,T.val1) AS E,COALESCE(S1.typ,T.typ1) AS E_typ,
COALESCE(S2.elem,T.val2) AS N,COALESCE(S2.typ,T.typ2) AS N_typ,
COALESCE(S3.elem,T.val3) AS I,COALESCE(S3.typ,T.typ3) AS I_typ,T.U AS U
FROM Q3 AS T
LEFT OUTER JOIN lubm15m_DS AS S0 ON T.val0=S0.list_id AND T.val0 LIKE ‘lid:%’
LEFT OUTER JOIN lubm15m_DS AS S1 ON T.val1=S1.list_id AND T.val1 LIKE ‘lid:%’
LEFT OUTER JOIN lubm15m_DS AS S2 ON T.val2=S2.list_id AND T.val2 LIKE ‘lid:%’
LEFT OUTER JOIN lubm15m_DS AS S3 ON T.val3=S3.list_id AND T.val3 LIKE ‘lid:%’)
SELECT DISTINCT I AS I,I_typ AS I_typ,N AS N,N_typ AS N_typ,U AS U,T AS T,T_typ AS T_typ,E AS E,E_typ AS E_typ FROM QS3
The syntax of the UCQ reformulation can be found here: https://team.inria.fr/cedar/ucq-reformulation-of-sparql-query-on-the-db2-rdf-store/