У меня есть эта SQLite persitent схеме:Как выбрать из таблицы упорядочения по первичному ключу
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)
.
Итак, вопрос в том, как я могу сделать постоянный заказ результатами моего запроса по первичному ключу таблицы?
Упс, кажется, что я забыл экспортировать конструктор данных 'EntryId' из моего модуля сущностей. После правильного экспорта оказалось, что мой код хорошо компилируется. Я также был несколько введен в заблуждение сгенерированным шаблоном haskell splices и не заметил, что на самом деле существует конструктор данных EntryId, который видит только синоним типа. Простите за это :( – Anton