У меня есть эта постоянная схема SQLite:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Entry
class EntryClass
|]
Это соответствует следующему оператору CREATE TABLE
:
CREATE TABLE "entry"
( "id" INTEGER PRIMARY KEY AUTOINCREMENT
, "class" INTEGER NOT NULL);"
Я вручную добавил ключевое слово AUTOINCREMENT
, чтобы быть уверенным, что идентификаторы всегда монотонно возрастают. Теперь я хочу выбрать самую старую запись из базы данных — ту, у которой самый низкий идентификатор.
Если бы я писал SQL, я бы сказал что-то вроде этого:
SELECT id, class FROM entry ORDER BY id ASC LIMIT 1
Но у меня проблемы с переводом этого запроса на постоянный. Это должно выглядеть примерно так
nextEntry <- selectFirst [] [Asc EntryId, LimitTo 1]
но это дает мне синтаксическую ошибку, жалующуюся на то, что нет конструктора данных EntryId
. Действительно, EntryId
является синонимом типа Database.Persist.Class.PersistEntity.Key Entry
, поэтому его нельзя использовать в конструкторе данных Asc
, который имеет тип forall typ . Asc (EntityField record typ)
.
Итак, вопрос в том, как я могу сделать постоянный порядок результатов моего запроса по первичному ключу таблицы?