【发布时间】:2014-11-24 10:26:44
【问题描述】:
我有这个 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)。
所以问题是我怎样才能通过表的主键对查询结果进行持久排序?
【问题讨论】:
标签: haskell persistent