Получите условные индексы с scala с помощью slick - PullRequest
0 голосов
/ 08 мая 2020

Итак, я пытался внедрить индекс из моей базы данных в мои красивые таблицы. Я использую postgres в качестве своей базы данных, и мой индекс выглядит так:

"index_unq_user_status" UNIQUE, btree (user_id) WHERE status::text = 'Pending'::text

По сути, это не могут быть две строки с одинаковым user_id, если обе они имеют статус «Ожидание».

В чем моя проблема? Когда я генерирую свои таблицы с помощью Slick, я получаю следующее:

val index1 = index("index_unq_user_status", userId, unique=true)

Это означает, что может быть только одна строка с одним userId.

Я хочу провести интеграционный тест с использованием базы данных h2 и он использует таблицы из slick и создает неправильный индекс.

Есть ли способ достичь этого условного индекса в гладком виде?

1 Ответ

0 голосов
/ 13 мая 2020

В Sick нет встроенной или прямой поддержки частичных индексов.

Однако, поскольку ваш index1 создает SQL операторы DDL для изменения схемы (если вы их применяете), то что вы можно сделать следующее: удалить index1, и вместо этого после применения запроса таблицы .schema.create вы можете запустить простой оператор SQL для применения вашего индекса.

В общих чертах это будет примерно так:

val addIndex = sqlu""" ALTER TABLE table ADD INDEX ... """
val createAction = (MyTable.schema.create andThen addIndex)

Я не уверен, как вы структурируете свои интеграционные тесты H2, но вы можете условно опустить в этих тестах спецификацию PG c addIndex.

...