/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2008.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.sail.rdbms.mysql;
import java.sql.SQLException;
import java.sql.Types;
import org.openrdf.sail.rdbms.schema.ValueTable;
import org.openrdf.sail.rdbms.schema.ValueTableFactory;
/**
*
* @author James Leigh
*/
public class MySqlValueTable extends ValueTable {
private static final String FEILD_COLLATE = " CHARACTER SET utf8 COLLATE utf8_bin";
@Override
public String sql(int type, int length) {
if (type == ValueTableFactory.POINT_TYPE)
return "POINT";
String declare = super.sql(type, length);
if (type == Types.VARCHAR) {
return declare + FEILD_COLLATE;
}
else if (type == Types.LONGVARCHAR) {
return "LONGTEXT" + FEILD_COLLATE;
}
else {
return declare;
}
}
@Override
public void initialize() throws SQLException {
super.initialize();
/* For POINT type, insert using MySQL WKT functions */
if (getSqlType() == ValueTableFactory.POINT_TYPE) {
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ").append(getInsertTable().getName());
sb.append(" (id, value) VALUES (?, PointFromText(CONCAT('POINT(', ?, ')')))");
setINSERT(sb.toString());
/* No need to change INSERT_SELECT, as it will is constructed using the POINT datatype and will also use this INSERT statement */
}
}
}