Проблема
В настоящее время мой собственный диалект генерирует запросы со следующим (неправильным) синтаксисом:
Код: Выделить всё
SELECT
...
FROM
...
WHERE
...
ORDER BY
...
OFFSET ... ROWS FETCH FIRST ... ROWS ONLY
Код: Выделить всё
SELECT
...
FROM
...
WHERE
...
ORDER BY
...
LIMIT ...
OFFSET ...
Вот пользовательский ImpalaDialect, который я создал на данный момент:
Код: Выделить всё
package br.tc.tcesc.sigma.apisigma.config;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.pagination.LimitHandler;
import org.hibernate.query.spi.Limit;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ImpalaDialect extends Dialect {
public ImpalaDialect() {
super();
// Additional configurations, if necessary.
}
@Override
public LimitHandler getLimitHandler() {
return new LimitHandler() {
@Override
public String processSql(String sql, Limit limit) {
StringBuilder modifiedSql = new StringBuilder(sql);
// Add LIMIT
if (limit.getMaxRows() != null) {
modifiedSql.append(" limit ").append(limit.getMaxRows());
}
// Add OFFSET
if (limit.getFirstRow() != null) {
modifiedSql.append(" offset ").append(limit.getFirstRow());
}
return modifiedSql.toString();
}
@Override
public boolean supportsLimit() {
return true;
}
@Override
public boolean supportsOffset() {
return true;
}
@Override
public boolean supportsLimitOffset() {
return true;
}
@Override
public void setMaxRows(Limit limit, PreparedStatement statement) throws SQLException {
// We don't configure maxRows directly; we use LIMIT in the SQL.
}
@Override
public int bindLimitParametersAtEndOfQuery(Limit limit, PreparedStatement statement, int index) throws SQLException {
// We don't use parameters at the end of the query.
return index;
}
@Override
public int bindLimitParametersAtStartOfQuery(Limit limit, PreparedStatement statement, int index) throws SQLException {
// We don't use parameters at the start of the query.
return index;
}
};
}
}
Чего мне не хватает в моей реализации, чтобы Hibernate генерировал правильный синтаксис SQL с помощью LIMIT... OFFSET... вместо OFFSET ... СТРОКИ FETCH FIRST... ТОЛЬКО СТРОКИ?
Будем очень признательны за любую помощь или рекомендации по правильной настройке пользовательского диалекта для Impala.
Подробнее здесь: https://stackoverflow.com/questions/792 ... -impala-hi