org.sagacity.sqltoy.dialect.utils.H2DialectUtils Maven / Gradle / Ivy
/**
*
*/
package org.sagacity.sqltoy.dialect.utils;
import org.sagacity.sqltoy.config.model.FieldMeta;
import org.sagacity.sqltoy.config.model.PKStrategy;
import org.sagacity.sqltoy.utils.StringUtil;
/**
* @project sagacity-sqltoy
* @description 提供h2数据库相关的特殊逻辑处理封装
* @author zhongxuchen
* @version v1.0, Date:2023年6月8日
* @modify 2023年6月8日,修改说明
*/
public class H2DialectUtils {
/**
* @TODO 定义当使用sequence或identity时,是否允许自定义值(即不通过sequence或identity产生,而是由外部直接赋值)
* @param pkStrategy
* @return
*/
public static boolean isAssignPKValue(PKStrategy pkStrategy) {
if (pkStrategy == null) {
return true;
}
if (pkStrategy.equals(PKStrategy.IDENTITY)) {
return false;
}
return true;
}
/**
* @todo 组织merge into 语句中select 的字段,进行类型转换
* @param sql
* @param columnName
* @param fieldMeta
*/
public static void wrapSelectFields(StringBuilder sql, String columnName, FieldMeta fieldMeta) {
int jdbcType = fieldMeta.getType();
int length = fieldMeta.getLength();
if (jdbcType == java.sql.Types.VARCHAR) {
if (length > 0) {
sql.append("cast(? as varchar(" + length + "))");
} else {
sql.append("cast(? as varchar)");
}
} else if (jdbcType == java.sql.Types.CHAR) {
if (length > 0) {
sql.append("cast(? as char(" + length + "))");
} else {
sql.append("cast(? as char)");
}
} else if (jdbcType == java.sql.Types.DATE) {
sql.append("cast(? as date)");
} else if (jdbcType == java.sql.Types.NUMERIC) {
sql.append("cast(? as DECIMAL)");
} else if (jdbcType == java.sql.Types.DECIMAL) {
sql.append("cast(? as DECIMAL)");
} else if (jdbcType == java.sql.Types.BIGINT) {
sql.append("cast(? as bigint)");
} else if (jdbcType == java.sql.Types.INTEGER || jdbcType == java.sql.Types.TINYINT) {
sql.append("cast(? as INT)");
} else if (jdbcType == java.sql.Types.TIMESTAMP) {
sql.append("cast(? as timestamp)");
} else if (jdbcType == java.sql.Types.DOUBLE) {
sql.append("cast(? as double)");
} else if (jdbcType == java.sql.Types.FLOAT) {
sql.append("cast(? as DOUBLE)");
} else if (jdbcType == java.sql.Types.TIME) {
sql.append("cast(? as time)");
} else if (jdbcType == java.sql.Types.CLOB) {
sql.append("cast(? as CLOB)");
} else if (jdbcType == java.sql.Types.BOOLEAN) {
sql.append("cast(? as BOOLEAN)");
} else if (jdbcType == java.sql.Types.BINARY) {
sql.append("cast(? as BINARY)");
} else if (jdbcType == java.sql.Types.BLOB) {
sql.append("cast(? as BLOB)");
} else {
// 数组、json等特殊类型
if (StringUtil.isNotBlank(fieldMeta.getNativeType())) {
sql.append("cast(? as " + fieldMeta.getNativeType() + ")");
} else {
sql.append("?");
}
}
sql.append(" as ");
sql.append(columnName);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy