Фон
Я пишу адаптер для ESE для .NET и LINQ в проекте Google Code под названием eselinq . Одна важная функция, которую я не могу понять, это как получить список индексов, определенных для таблицы. Мне нужно иметь возможность перечислять доступные индексы, чтобы часть LINQ могла автоматически определять, когда индексы можно использовать. Это позволит гораздо более эффективно планировать запросы пользователей, если будут найдены соответствующие индексы.
Есть две связанные функции для запроса информации индекса:
Они отличаются только тем, как указана связанная таблица (имя или идентификатор таблицы). Похоже, что они будут поддерживать функцию, которую я хочу, но все информационные уровни, кажется, требуют, чтобы у меня уже был определенный индекс для запроса информации. Единственное исключение - JET_IdxInfoCount
, но при этом учитывается только количество индексов.
JET_IdxInfo
с его JET_INDEXLIST
звучит правдоподобно, но в нем перечислены только столбцы с определенным индексом.
Альтернативы
Мне известно, что я мог бы получить информацию об индексе другим способом, например, аннотации к типам .NET, соответствующим таблицам базы данных, или требуя, чтобы отображение индекса было предоставлено заранее. Я думаю, что реализовано достаточно интроспекции, чтобы все остальное работало «из коробки» без предоставления пользователем дополнительной информации, кроме этой одной функции.
Другим вариантом может быть проверка системных таблиц для поиска связанных индексных объектов, но это будет зависеть от недокументированного интерфейса.
Чтобы ответить на этот вопрос, мне нужен поддерживаемый метод перечисления индексов (достаточно только имени) для таблицы.