*
* @throws SQLException
*/
@Test
public void testStoreDoubleLiteral() throws SQLException {
KiWiConnection connection = persistence.getConnection();
try {
KiWiUriResource uri = new KiWiUriResource(Namespaces.NS_XSD + "double");
Random rnd = new Random();
double value = rnd.nextDouble();
// add a new URI to the triple store and check if it exists afterwards, before and after commit
KiWiDoubleLiteral literal = new KiWiDoubleLiteral(value, uri);
connection.storeNode(literal);
// check if it then has a database ID
Assert.assertTrue(literal.getId() >= 0);
KiWiNode testLiteral1 = connection.loadNodeById(literal.getId());
// needs to be equal, and should also be the identical object!
Assert.assertEquals(literal,testLiteral1);
Assert.assertEquals(uri,((KiWiLiteral)testLiteral1).getType());
//Assert.assertTrue(literal == testLiteral1);
connection.commit();
KiWiNode testLiteral2 = connection.loadNodeById(literal.getId());
// needs to be equal, and should also be the identical object!
Assert.assertEquals(literal,testLiteral2);
Assert.assertEquals(uri,((KiWiLiteral)testLiteral2).getType());
//Assert.assertTrue(literal == testLiteral2);
KiWiNode testLiteral3 = connection.loadLiteral(literal.stringValue(),null,uri);
// needs to be equal, and should also be the identical object!
Assert.assertEquals(literal,testLiteral3);
Assert.assertEquals(uri,((KiWiLiteral)testLiteral3).getType());
//Assert.assertTrue(literal == testLiteral3);
// load by integer value
KiWiNode testLiteral6 = connection.loadLiteral(value);
// needs to be equal, and should also be the identical object!
Assert.assertEquals(literal,testLiteral6);
Assert.assertEquals(uri,((KiWiLiteral)testLiteral6).getType());
//Assert.assertTrue(literal == testLiteral6);
connection.commit();
// clear cache and test again
persistence.clearCache();
KiWiNode testLiteral4 = connection.loadNodeById(literal.getId());
// needs to be equal, but now it should not be the same object!
Assert.assertEquals(literal,testLiteral4);
Assert.assertEquals(uri,((KiWiLiteral)testLiteral4).getType());
//Assert.assertTrue(literal != testLiteral4);
KiWiNode testLiteral5 = connection.loadLiteral(literal.stringValue(),null,uri);
// needs to be equal, but now it should not be the same object!
Assert.assertEquals(literal,testLiteral5);
Assert.assertEquals(uri,((KiWiLiteral)testLiteral5).getType());
//Assert.assertTrue(literal != testLiteral5);
// load by integer value
KiWiNode testLiteral7 = connection.loadLiteral(value);
// needs to be equal, and should also be the identical object!
Assert.assertEquals(literal,testLiteral7);
Assert.assertEquals(uri,((KiWiLiteral)testLiteral7).getType());
//Assert.assertTrue(literal != testLiteral7);
connection.commit();
// finally do a test on the nodes table, it should contain exactly one entry
PreparedStatement checkNodeStmt = connection.getJDBCConnection().prepareStatement("SELECT * FROM nodes WHERE ntype='double'");
ResultSet result = checkNodeStmt.executeQuery();
Assert.assertTrue(result.next());
Assert.assertEquals((long) literal.getId(), result.getLong("id"));
Assert.assertEquals(literal.stringValue(),result.getString("svalue"));
Assert.assertEquals(value,result.getDouble("dvalue"),0.01);
Assert.assertEquals("double",result.getString("ntype"));
Assert.assertNull(result.getString("lang"));
Assert.assertEquals((long) uri.getId(), result.getLong("ltype"));
result.close();
connection.commit();
} finally {
connection.close();
}
}