"без повторного разбора оператора CREATE INDEX" это действительно сложно;но получить SQL-код CREATE INDEX из таблицы sqlite_master
и выполнить легкий анализ кажется достаточно простым.
Поскольку вы можете получить имена столбцов из PRAGMA
, который вы уже определили, все, что вам нужно сделать, это токенизируйте этого SQL и проверьте токен (ы) сразу после (в SQL-коде CREATE INDEX) токена, который является именем столбца.
Там будет возможный COLLATE somecollation
(который вывероятно, следует также записать, поскольку то, что используется для сортировки , в конце концов очень важно), и, возможно, после этих двух необязательных токенов, следующим будет ASC, DESC или что-то еще (что означает отсутствие порядкауказывается в SQL).
((Кстати, вам, несомненно, также нужна информация о том, является ли индекс уникальным - тот, который вы можете получить либо путем синтаксического анализа, либо, что еще лучше, с помощью "PRAGMA index_list"«на столе, который, я полагаю, вы уже делаете, чтобы получить имена индексов)).
Я не думаю, что вы должны делать предположения о том,Примите во внимание порядок (новый формат «нисходящий файл») или нет (устаревший формат) - это зависит от PRAGMA legacy_file_format
... и запрос его говорит вам, что произойдет с новыми базами данных,не то, что происходит с текущей БД.Таким образом, точная запись информации о заказе из схемы представляется мне более надежной стратегией.