[Mulgara-svn] r1961 - in trunk: data src/jar/resolver-relational/java/org/mulgara/resolver/relational
pag at mulgara.org
pag at mulgara.org
Fri Jul 2 17:15:21 UTC 2010
Author: pag
Date: 2010-07-02 17:15:20 +0000 (Fri, 02 Jul 2010)
New Revision: 1961
Modified:
trunk/data/ISWC-d2rq.n3
trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/ColumnDesc.java
trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverUnitTest.java
Log:
Got numeric and date columns mapping in and out of the SQL database
Modified: trunk/data/ISWC-d2rq.n3
===================================================================
--- trunk/data/ISWC-d2rq.n3 2010-07-02 05:12:58 UTC (rev 1960)
+++ trunk/data/ISWC-d2rq.n3 2010-07-02 17:15:20 UTC (rev 1961)
@@ -95,7 +95,7 @@
# ConfID int(11) default NULL,
# Name text,
# URI text,
-# Date text,
+# Date date,
# Location text
#) TYPE=MyISAM;
# -----------------------------------------------
Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/ColumnDesc.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/ColumnDesc.java 2010-07-02 05:12:58 UTC (rev 1960)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/ColumnDesc.java 2010-07-02 17:15:20 UTC (rev 1961)
@@ -56,8 +56,10 @@
import org.mulgara.query.rdf.URIReferenceImpl;
import org.mulgara.query.rdf.LiteralImpl;
+import org.mulgara.query.rdf.XSD;
import org.mulgara.query.TuplesException;
import org.mulgara.resolver.relational.d2rq.ClassMapElem;
+import org.mulgara.resolver.relational.d2rq.Constants;
import org.mulgara.resolver.relational.d2rq.DatatypePropertyBridgeElem;
import org.mulgara.resolver.relational.d2rq.ObjectPropertyBridgeElem;
import org.mulgara.resolver.relational.d2rq.TranslationTableElem;
@@ -114,12 +116,12 @@
try {
return new URIReferenceImpl(new URI(value));
} catch (URISyntaxException eu) {
- return new LiteralImpl(value);
+ return createLiteral(value);
} catch (IllegalArgumentException ei) {
- return new LiteralImpl(value);
+ return createLiteral(value);
}
} else if (resourceType == Literal.class) {
- return new LiteralImpl(value);
+ return createLiteral(value);
} else {
throw new TuplesException("Unknown type");
}
@@ -169,4 +171,25 @@
"table=" + table + ", " +
"index=" + index + ")";
}
+
+
+ /**
+ * Creates typed literals. If the column type is a date or numeric column
+ * then literals with xsd:date or xsd:integer are created. Using xsd:integer
+ * is a risk, since it might need to be xsd:decimal.
+ * @param data The string representation of the literal.
+ * @return The new literal.
+ */
+ private Literal createLiteral(String data) {
+ URIReference type = columnTypeMap.get(column);
+ if (type == Constants.numericColumn) {
+ return (data.contains(".")) ? new LiteralImpl(data, XSD.DECIMAL_URI) :
+ new LiteralImpl(data, XSD.INTEGER_URI);
+ }
+
+ if (type == Constants.dateColumn) return new LiteralImpl(data, XSD.DATE_URI);
+
+ return new LiteralImpl(data);
+ }
+
}
Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverUnitTest.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverUnitTest.java 2010-07-02 05:12:58 UTC (rev 1960)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverUnitTest.java 2010-07-02 17:15:20 UTC (rev 1961)
@@ -57,6 +57,7 @@
import org.mulgara.query.*;
import org.mulgara.query.rdf.URIReferenceImpl;
import org.mulgara.query.rdf.LiteralImpl;
+import org.mulgara.query.rdf.XSD;
import org.mulgara.server.Session;
import org.mulgara.util.FileUtil;
import org.mulgara.util.TempDir;
@@ -143,6 +144,7 @@
suite.addTest(new RelationalResolverUnitTest("testBasicClassQuery"));
suite.addTest(new RelationalResolverUnitTest("testBasicPropertyQuery"));
+ suite.addTest(new RelationalResolverUnitTest("testDatePropertyQuery"));
suite.addTest(new RelationalResolverUnitTest("testBoundPropertyQuery"));
suite.addTest(new RelationalResolverUnitTest("testBoundSubjectQuery"));
suite.addTest(new RelationalResolverUnitTest("testConjPropertyQuery"));
@@ -293,12 +295,12 @@
"ConfID integer, " +
"Name varchar(50), " +
"URI varchar(50), " +
- "Date varchar(50), " + // Note this is listed as mysql text type in the ISWC-d2rq.n3 file.
+ "Date date, " +
"Location varchar(50))");
stmt.execute("INSERT INTO Conferences (ConfID, Name, URI, Date, Location) " +
- " VALUES (1, 'Apes and Bears', 'http://www.apes.conf.au/bears', '01-02-2008', 'Brisbane')");
+ " VALUES (1, 'Apes and Bears', 'http://www.apes.conf.au/bears', '2008-02-01', 'Brisbane')");
stmt.execute("INSERT INTO Conferences (ConfID, Name, URI, Date, Location) " +
- " VALUES (2, 'Cats and Donkeys', 'http://www.cats.conf.au/donkeys', '01-02-2008', 'Dublin')");
+ " VALUES (2, 'Cats and Donkeys', 'http://www.cats.conf.au/donkeys', '2008-04-03', 'Dublin')");
stmt.execute("CREATE TABLE Papers (" +
"PaperID integer, " +
@@ -450,6 +452,56 @@
}
+ public void testDatePropertyQuery() throws Exception {
+ Session session = database.newSession();
+ try {
+ List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("title"), new Variable("date") });
+ List<Order> orderList = Arrays.asList(new Order[] {
+ new Order(new Variable("title"), true),
+ new Order(new Variable("date"), true)
+ });
+
+ Answer answer = session.query(new Query(
+ selectList, // SELECT
+ new GraphResource(systemModelURI), // FROM
+ new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] {
+ new ConstraintImpl(new Variable("conf"),
+ new URIReferenceImpl(RDF.TYPE),
+ new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Conference")),
+ new URIReferenceImpl(testModelURI)),
+ new ConstraintImpl(new Variable("conf"),
+ new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#eventTitle")),
+ new Variable("title"),
+ new URIReferenceImpl(testModelURI)),
+ new ConstraintImpl(new Variable("conf"),
+ new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#date")),
+ new Variable("date"),
+ new URIReferenceImpl(testModelURI))
+ })),
+ null, // HAVING
+ orderList, // ORDER BY
+ null, // LIMIT
+ 0, // OFFSET
+ true, // DISTINCT
+ new UnconstrainedAnswer() // GIVEN
+ ));
+
+ answer.beforeFirst();
+ assertTrue(answer.next());
+ assertEquals(new LiteralImpl("Apes and Bears"), answer.getObject(0));
+ assertEquals(new LiteralImpl("2008-02-01", XSD.DATE_URI), answer.getObject(1));
+ assertTrue(answer.next());
+ assertEquals(new LiteralImpl("Cats and Donkeys"), answer.getObject(0));
+ assertEquals(new LiteralImpl("2008-04-03", XSD.DATE_URI), answer.getObject(1));
+ assertFalse(answer.next());
+ answer.close();
+
+ } finally {
+ session.close();
+ }
+ }
+
+
public void testBoundPropertyQuery() throws Exception {
Session session = database.newSession();
try {
More information about the Mulgara-svn
mailing list