[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