背景
我正在一个名为eselinq的谷歌代码项目中为 ESE 到 .NET 和 LINQ 编写一个适配器。我似乎无法弄清楚的一个重要功能是如何获取为表定义的索引列表。我需要能够列出可用索引,以便 LINQ 部分可以自动确定何时可以使用索引。如果可以找到适当的索引,这将为用户查询提供更有效的计划。
查询索引信息有两个相关函数:
JetGetTableIndexInfo
- 通过tableID获取索引信息JetGetIndexInfo
- 通过tableName获取索引信息
这些仅在如何指定相关表(名称或tableid)方面有所不同。听起来这些将支持我想要的功能,但所有信息级别似乎都要求我已经有一个特定的索引来查询信息。唯一的例外是JET_IdxInfoCount
,但这仅计算存在多少索引。
JET_IdxInfo
听起来很合理,JET_INDEXLIST
但它只列出特定索引上的列。
备择方案
我知道我可以通过另一种方式获取索引信息,例如与数据库表对应的 .NET 类型上的注释,或者要求提前提供索引映射。我认为已经实现了足够的内省,以使其他所有东西都可以在没有用户提供额外信息的情况下开箱即用,除了这个功能。
另一种选择可能是检查系统表以查找相关的索引对象,但这意味着取决于未记录的接口。
为了满足这个问题,我需要一种支持的方法来枚举表上的索引(只需名称就足够了)。