MysqlDialect.java
package hu.ddsi.java.database.JavaSQLImp.dialects;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import eu.javaexperience.database.JDBC;
import eu.javaexperience.exceptions.UnimplementedCaseException;
import hu.ddsi.java.database.FieldData;
import hu.ddsi.java.database.JavaSQLImp.SqlDialect;
public class MysqlDialect implements SqlDialect
{
@Override
public boolean probeDialect(Connection conn)
{
try
{
{
String versionString = JDBC.getString(conn, "SELECT @@VERSION");
versionString = versionString.toLowerCase();
if(versionString.contains("mysql") || versionString.contains("mariadb"))
{
return true;
}
}
{
String versionCommentString = JDBC.getString(conn, "SELECT @@version_comment");
versionCommentString = versionCommentString.toLowerCase();
if(versionCommentString.contains("debian") || versionCommentString.contains("mysql") || versionCommentString.contains("mariadb"))
{
return true;
}
}
}
catch(Exception e)
{
return false;
}
return false;
}
@Override
public String getSqlType(FieldData fd)
{
switch (fd.getDataType())
{
case Serialized:
case Array:
return "VARCHAR("+fd.getMaxSize()+")";
case Boolean:
return "BOOLEAN";
case Byte:
return "BINARY(1)";
case Char:
return "CHARACTER(1)";
case Long:
case Date:
case GenericDataId:
return "BIGINT";
case DontStore:
return null;
case Double:
return "DOUBLE PRECISION";
case Integer:
case Enum:
return "INTEGER";
case Float:
return "FLOAT";
case Short:
return "SMALLINT";
case String:
return "VARCHAR("+fd.getMaxSize()+") CHARACTER SET utf8";
}
return null;
}
@Override
public String getFieldQuoteString()
{
return "`";
}
@Override
public String getStringQuote()
{
return "\"";
}
@Override
public String getCreatePrimitiveKey(Class type, boolean notNull, boolean unique, boolean primary, boolean indexed)
{
StringBuilder sb = new StringBuilder();
if(Integer.class == type)
{
sb.append("INTEGER");
}
else if(Long.class == type)
{
sb.append("BIGINT");
}
else
{
throw new UnimplementedCaseException(type.toString());
}
if(notNull)
{
sb.append(" NOT NULL");
}
if(unique)
{
sb.append(" UNIQUE");
}
if(primary)
{
sb.append(" PRIMARY KEY");
}
return sb.toString();
}
@Override
public String getOtherTableCreateOptions()
{
return "\nDEFAULT CHARACTER SET = utf8\nCOLLATE = utf8_bin;";
}
@Override
public void getTableFields(Connection connection, Collection<String> dbf, String table) throws SQLException
{
try(Statement st = connection.createStatement())
{
try(ResultSet rs = st.executeQuery("SHOW COLUMNS FROM "+getFieldQuoteString()+table+getFieldQuoteString()))
{
while(rs.next())
{
dbf.add(rs.getString(1));
}
}
}
}
@Override
public String escapeString(String value)
{
if(null == value)
{
return "null";
}
return value.replace("\\", "\\\\").replace("\"", "\\\"");
}
}