0
我有這樣的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拼接有點誤導,並沒有注意到實際上存在一個EntryId數據構造函數只能看到類型的同義詞。對不起,那:( – Anton 2014-11-24 13:43:47