Я пытаюсь расширить jOOQ с помощью полнотекстового поиска PostgreSQL безопасным шрифтом, используя функции расширения Kotlin.
Моя проблема в том, что DSL.function не "знает" "мои пользовательские классы / типы TsQuery и TsVector и создает исключение. Сам класс Function не имеет конструктора publi c.
org.jooq.exception.SQLDialectNotSupportedException: класс типа jooq.fulltext.TsVector не поддерживается в диалекте DEFAULT
class TsQuery
class TsVector
fun Field<String>.toTsVector(searchConfig: String): Field<TsVector> {
return DSL.function(
"to_tsvector",
TsVector::class.java,
DSL.inline(searchConfig),
DSL.coalesce(this, "")
)!!
}
fun String.toTsQuery(searchConfig: String): Field<TsQuery> {
return DSL.function(
"to_tsquery",
TsQuery::class.java,
DSL.inline(searchConfig),
DSL.value(this)
)!!
}
fun Field<TsVector>.tsMatches(query: Field<TsQuery>): Condition {
return DSL.condition(
"{0} @@ {1}",
this,
query
)!!
}
fun Field<TsVector>.tsRank(query: Field<TsQuery>): Field<Double> {
return DSL.function(
"ts_rank",
Double::class.java,
this,
query
)!!
}
Если я заменю TsQuery и TsVector на String, то это сработает, но я потерял набор текста. Я хочу использовать их только для построения запросов, мне не нужно иметь возможность анализировать / преобразовывать эти типы в / из Kotlin.