2012-05-22 36 views
1

我可以使用下面的查找索引列表中的一个表:如何检查索引列上的排序?

PRAGMA index_list(myTable); 

从这个结果,我可以索引中获取有关列的详细信息有以下:

PRAGMA index_info(myIndex); 

但我似乎无法找到一种方法来告诉列排序顺序。是否有另一个我忽略的编译指示可以让我这样做?

注意:我知道我可以从SQLITE_MASTER中选择并从create语句中解析出排序顺序,但如果可能的话,我宁愿停止解析。但是,如果这是唯一的解决方案,那么它将不得不工作。

+0

请参阅[此答案](http://stackoverflow.com/a/1549444/623041)。 – eggyal

+0

至少如果你解析,语法很简单,定义明确:http://www.sqlite.org/lang_createindex.html。捕获列名称和asc/desc的正则表达式将很容易构建。如果有用,我可以提供帮助。 – Gene

+0

正则表达式会很好,但考虑到递归(多列),可选整理和排序顺序的需求,可以加上列方括号还是可以不用方括号转义? (我对正则表达式不太擅长,而且这个看起来比我写过的任何东西都复杂得多)。看来,它可能更容易做字符串解析)。 – Kyle

回答

0

在通过3.7.13源代码进行快速grep后,我不相信排序顺序会被任何pragmas暴露。我可以找到KeyInfo :: aSortOrder的唯一引用,可以在CREATE INDEX代码中,也可以在实际的数据库操作中查询或比较索引。

看起来,如果将自定义版本的SQLite做为您的选项,将其添加到index_info编译指示中看起来不是很多工作。