You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by en...@apache.org on 2014/04/11 19:17:16 UTC

git commit: CLEREZZA-908 and CLEREZZA-909 Implemented the workaround of shadowing the rdf:XMLLiteral in the storage

Repository: clerezza
Updated Branches:
  refs/heads/master 1360c9f6f -> ad8b28e7d


CLEREZZA-908 and CLEREZZA-909 Implemented the workaround of shadowing the rdf:XMLLiteral in the storage


Project: http://git-wip-us.apache.org/repos/asf/clerezza/repo
Commit: http://git-wip-us.apache.org/repos/asf/clerezza/commit/ad8b28e7
Tree: http://git-wip-us.apache.org/repos/asf/clerezza/tree/ad8b28e7
Diff: http://git-wip-us.apache.org/repos/asf/clerezza/diff/ad8b28e7

Branch: refs/heads/master
Commit: ad8b28e7d0106b0bc03efa2a522ad27ead9ecd42
Parents: 1360c9f
Author: enridaga <en...@apache.org>
Authored: Fri Apr 11 18:17:14 2014 +0100
Committer: enridaga <en...@apache.org>
Committed: Fri Apr 11 18:17:14 2014 +0100

----------------------------------------------------------------------
 .../rdf/virtuoso/storage/VirtuosoMGraph.java    | 19 ++++-------
 .../rdf/virtuoso/storage/access/DataAccess.java | 33 ++++++++++++++++++--
 .../rdf/virtuoso/storage/ConnectionTest.java    |  2 --
 .../rdf/virtuoso/storage/RdfIOTest.java         |  3 +-
 .../virtuoso/storage/VirtuosoMGraphTest.java    |  9 +++---
 5 files changed, 42 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/clerezza/blob/ad8b28e7/rdf.virtuoso.storage/src/main/java/org/apache/clerezza/rdf/virtuoso/storage/VirtuosoMGraph.java
----------------------------------------------------------------------
diff --git a/rdf.virtuoso.storage/src/main/java/org/apache/clerezza/rdf/virtuoso/storage/VirtuosoMGraph.java b/rdf.virtuoso.storage/src/main/java/org/apache/clerezza/rdf/virtuoso/storage/VirtuosoMGraph.java
index e4dc6d6..68a646f 100644
--- a/rdf.virtuoso.storage/src/main/java/org/apache/clerezza/rdf/virtuoso/storage/VirtuosoMGraph.java
+++ b/rdf.virtuoso.storage/src/main/java/org/apache/clerezza/rdf/virtuoso/storage/VirtuosoMGraph.java
@@ -24,7 +24,6 @@ import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import org.apache.clerezza.rdf.core.Graph;
-import org.apache.clerezza.rdf.core.Literal;
 import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.NonLiteral;
 import org.apache.clerezza.rdf.core.Resource;
@@ -135,19 +134,13 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 
 	protected boolean performAdd(Triple triple) {
 		logger.debug("performAdd(Triple {})", triple);
-
-		// If the object is a very long literal we use plan B
-		// Reason:
-		// Virtuoso Error:
-		// SR449: Key is too long, index RDF_QUAD, ruling part is 1901 bytes
-		// that exceeds 1900 byte limit
-		// We use alternative method for literals
 		writeLock.lock();
-		if (triple.getObject() instanceof Literal) {
-			getDataAccess().performAddPlanB(getName(), triple);
-		}else{
-			getDataAccess().insertQuad(getName(), triple);
-		}
+		// XXX This is disabled because of CLEREZZA-908
+//		if (triple.getObject() instanceof Literal && false) {
+//			getDataAccess().performAddPlanB(getName(), triple);
+//		}else{
+		getDataAccess().insertQuad(getName(), triple);
+//		}
 		writeLock.unlock();
 		return true;
 	}

http://git-wip-us.apache.org/repos/asf/clerezza/blob/ad8b28e7/rdf.virtuoso.storage/src/main/java/org/apache/clerezza/rdf/virtuoso/storage/access/DataAccess.java
----------------------------------------------------------------------
diff --git a/rdf.virtuoso.storage/src/main/java/org/apache/clerezza/rdf/virtuoso/storage/access/DataAccess.java b/rdf.virtuoso.storage/src/main/java/org/apache/clerezza/rdf/virtuoso/storage/access/DataAccess.java
index ab0c32a..f077d64 100644
--- a/rdf.virtuoso.storage/src/main/java/org/apache/clerezza/rdf/virtuoso/storage/access/DataAccess.java
+++ b/rdf.virtuoso.storage/src/main/java/org/apache/clerezza/rdf/virtuoso/storage/access/DataAccess.java
@@ -103,6 +103,10 @@ public class DataAccess {
 			SELECT_TRIPLES_NULL_P_NULL, SELECT_TRIPLES_S_P_NULL,
 			SELECT_TRIPLES_NULL_P_O, SELECT_TRIPLES_S_NULL_O };
 
+	// rdf:XMLLiteral needs to be shadowed in the storage because of a BUG in virtuoso
+	private final static UriRef XMLLiteral = new UriRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral");
+	private final static UriRef XMLLiteralShadowed = new UriRef("urn:x-clerezza:rdf#XMLLiteral");
+	
 	/**
 	 * Bidirectional map for managing the conversion from virtuoso blank nodes
 	 * (strings) to clerezza blank nodes and vice versa.
@@ -192,7 +196,14 @@ public class DataAccess {
 			TypedLiteral tl = ((TypedLiteral) object);
 			st.setInt(i, 4);
 			st.setString(i + 1, tl.getLexicalForm());
-			st.setString(i + 2, tl.getDataType().getUnicodeString());
+			
+			// XXX Shadow rdf:XMLLiteral datatype
+			// See CLEREZZA-XXX
+			UriRef dt = tl.getDataType();
+			if(dt.equals(XMLLiteral)){
+				dt = XMLLiteralShadowed;
+			}
+			st.setString(i + 2, dt.getUnicodeString());
 		} else if (object instanceof PlainLiteral) {
 			PlainLiteral pl = (PlainLiteral) object;
 			if (pl.getLanguage() != null) {
@@ -614,8 +625,10 @@ public class DataAccess {
 	/**
 	 * The following private methods are used to support the triple addition
 	 * plan B
+	 * 
+	 * XXX This is deprecated. Discussion at CLEREZZA-908
 	 */
-	
+	@Deprecated
 	public boolean performAddPlanB(String graph, Triple triple) {
 
 		StringBuilder b = new StringBuilder();
@@ -848,7 +861,14 @@ public class DataAccess {
 							lang);
 					return new PlainLiteralImpl(value, language);
 				} else {
-					return new TypedLiteralImpl(value, new UriRef(type));
+					// XXX Shadowing XMLLiteral
+					UriRef dt;
+					if(type.equals(XMLLiteralShadowed.getUnicodeString())){
+						dt = XMLLiteral;
+					} else {
+						dt = new UriRef(type);
+					}
+					return new TypedLiteralImpl(value, dt);
 				}
 			} else if (rb.rb_box instanceof VirtuosoExtendedString) {
 				VirtuosoExtendedString vs = (VirtuosoExtendedString) rb.rb_box;
@@ -911,6 +931,13 @@ public class DataAccess {
 			qb.append(">");
 			qb.append("\n");
 		}
+		// XXX Shadowing XMLLiteral
+		// This is not very accurate, but we can't go too much further on this, since it is an hack to
+		// bypass a virtuoso bug
+		// See CLEREZZA-908
+		if(query.contains(XMLLiteral.getUnicodeString())){
+			query.replace(XMLLiteral.getUnicodeString(), XMLLiteralShadowed.getUnicodeString());
+		}
 		qb.append(query);
 		Object returnThis = null;
 		try {

http://git-wip-us.apache.org/repos/asf/clerezza/blob/ad8b28e7/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/ConnectionTest.java
----------------------------------------------------------------------
diff --git a/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/ConnectionTest.java b/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/ConnectionTest.java
index 2fc6e3f..5425290 100644
--- a/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/ConnectionTest.java
+++ b/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/ConnectionTest.java
@@ -26,8 +26,6 @@ import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.util.Map.Entry;
-import java.util.Properties;
 
 import org.junit.BeforeClass;
 import org.junit.Test;

http://git-wip-us.apache.org/repos/asf/clerezza/blob/ad8b28e7/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/RdfIOTest.java
----------------------------------------------------------------------
diff --git a/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/RdfIOTest.java b/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/RdfIOTest.java
index 7221c9b..8637393 100644
--- a/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/RdfIOTest.java
+++ b/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/RdfIOTest.java
@@ -121,7 +121,6 @@ public class RdfIOTest {
 
 	@Test
 	public void longString() throws ClassNotFoundException, SQLException, InterruptedException {
-		log.info("Test a long xsd:string");
 		StringBuilder longStr = new StringBuilder();
 		int c = 250000;
 		while (c > 0) {
@@ -129,6 +128,7 @@ public class RdfIOTest {
 			c--;
 		}
 		int size = longStr.length();
+		log.info("Test a long xsd:string: {} chars",size);
 		TypedLiteral object = new TypedLiteralImpl(longStr.toString(),
 				new UriRef(XSD + "string"));
 		UriRef subject = new UriRef("urn:io-test:reto");
@@ -347,6 +347,5 @@ public class RdfIOTest {
 		TypedLiteral l = (TypedLiteral) read.getObject();
 		Assert.assertEquals(l.getLexicalForm(), s);
 		Assert.assertEquals(l.getDataType(), new UriRef(XSD + "string"));
-
 	}
 }

http://git-wip-us.apache.org/repos/asf/clerezza/blob/ad8b28e7/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/VirtuosoMGraphTest.java
----------------------------------------------------------------------
diff --git a/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/VirtuosoMGraphTest.java b/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/VirtuosoMGraphTest.java
index 0d7b1ec..8705fd9 100644
--- a/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/VirtuosoMGraphTest.java
+++ b/rdf.virtuoso.storage/src/test/java/org/apache/clerezza/rdf/virtuoso/storage/VirtuosoMGraphTest.java
@@ -43,7 +43,6 @@ import org.apache.clerezza.rdf.virtuoso.storage.access.DataAccess;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -141,7 +140,7 @@ public class VirtuosoMGraphTest {
 		assertTrue(mgraph.filter(enridaga, predicate, objectTyped).next().equals(triple));
 	}
 
-	@Ignore
+//	@Ignore
 	@Test
 	public void testAddSingleXMLLiteral() {
 		log.info("testAddSingleXMLLiteral()");
@@ -171,7 +170,9 @@ public class VirtuosoMGraphTest {
 		log.info(" > o: {} ", rt.getObject());
 		log.info(" > tl?: {} ", rt.getObject() instanceof TypedLiteral);
 		assertTrue(mgraph.filter(enridaga, predicate, objectXml).hasNext());
-		assertTrue(mgraph.filter(enridaga, predicate, objectXml).next().equals(triple));
+		Triple tr = mgraph.filter(enridaga, predicate, objectXml).next();
+		log.info("!! {} {} {} !!", new Object[]{tr.getSubject(), tr.getPredicate(), tr.getObject()});
+		assertTrue(tr.equals(triple));
 	}
 
 
@@ -339,7 +340,7 @@ public class VirtuosoMGraphTest {
 		assertTrue(found);
 	}
 
-	@Ignore
+//	@Ignore
 	@Test
 	public void testFilterObjectXml() {
 		log.info("testFilterObjectXml(); Test filter(null,null,o)");