任何方式使用@Formula或@CustomTransformer注释中的方言中定义的自定义函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了任何方式使用@Formula或@CustomTransformer注释中的方言中定义的自定义函数相关的知识,希望对你有一定的参考价值。
我必须支持Redshift和Clickhouse。我有两个方言扩展:
public class RedshiftDialect extends PostgreSQL94Dialect {
public RedshiftDialect() {
super();
registerFunction("to_date",
new SQLFunctionTemplate(
StandardBasicTypes.DATE,
"to_date(to_char(?1, 'YYYY-MM-DD'), 'YYYY-MM-DD')"));
}
}
public class ClickHouseDialect extends Dialect {
private static final LimitHandler LIMIT_HANDLER =
new AbstractLimitHandler() {
@Override
public String processSql(String sql, RowSelection selection) {
final boolean hasOffset = LimitHelper.hasFirstRow(selection);
return sql + (hasOffset ? " limit ? offset ?" : " limit ?");
}
@Override
public boolean supportsLimit() {
return true;
}
@Override
public boolean bindLimitParametersInReverseOrder() {
return true;
}
};
public ClickHouseDialect() {
super();
registerColumnType(Types.VARCHAR, "Nullable(String)");
registerColumnType(Types.BIGINT, "Nullable(Int64)");
registerColumnType(Types.DATE, "Nullable(Date)");
registerColumnType(Types.TIMESTAMP, "Nullable(DateTime)");
registerColumnType(Types.FLOAT, "Nullable(Float64)");
registerFunction("to_date",
new StandardSQLFunction(
"toDate",
StandardBasicTypes.DATE));
}
@Override
public LimitHandler getLimitHandler() {
return LIMIT_HANDLER;
}
}
public class RedshiftDialect extends PostgreSQL94Dialect {
public RedshiftDialect() {
super();
registerFunction("to_date",
new SQLFunctionTemplate(
StandardBasicTypes.DATE,
"to_date(to_char(?1, 'YYYY-MM-DD'), 'YYYY-MM-DD')"));
}
}
这是我的实体映射:
@Immutable
@Entity(name = "ReportEntry")
@Table(name = "reporting")
public class ReportEntry implements Serializable {
...
@Dimension
@Formula("to_date(date)")
@Column(nullable = false)
private Instant date;
...
}
我希望每当我在我的hql中提到date属性时,评估的to_date(date)表达式取决于当前的方言,但不幸的是@Formula annotation只接受本机sql表达式。任何想法如何使用自定义函数与公式?
预先感谢
答案
您可能更好地实现自定义类型。
(您可能会发现教程是实现自己类型的更好资源)。
以上是关于任何方式使用@Formula或@CustomTransformer注释中的方言中定义的自定义函数的主要内容,如果未能解决你的问题,请参考以下文章
「BZOJ 4451」「CERC 2015」Frightful Formula
如何使用 statsmodels.formula.api (python) 预测新值
python使用matplotlib可视化线图(line plot)可视化函数曲线并在标题title中显示函数的公式formula(add function formula into title)