バックグラウンド
eselinqというGoogleCodeプロジェクトで、ESEから.NETおよびLINQへのアダプターを作成しています。私が理解できない重要な関数の1つは、テーブルに定義されているインデックスのリストを取得する方法です。LINQ部分がインデックスを使用できる時期を自動的に判断できるように、使用可能なインデックスを一覧表示できるようにする必要があります。これにより、適切なインデックスが見つかった場合に、ユーザークエリの計画がはるかに効率的になります。
インデックス情報をクエリするための2つの関連する関数があります。
JetGetTableIndexInfo
-tableIDでインデックス情報を取得しますJetGetIndexInfo
-tableNameでインデックス情報を取得します
これらは、関連するテーブルの指定方法(名前またはテーブルID)のみが異なります。これらは私が望む機能をサポートするように思えますが、すべての情報レベルでは、情報を照会するための特定のインデックスがすでにある必要があるようです。唯一の例外はですがJET_IdxInfoCount
、それは存在するインデックスの数だけをカウントします。
JET_IdxInfo
そのJET_INDEXLIST
音はもっともらしいですが、特定のインデックスの列のみをリストします。
代替案
データベーステーブルに対応する.NETタイプの注釈など、別の方法でインデックス情報を取得したり、事前にインデックスマッピングを提供するように要求したりできることを認識しています。この1つの関数を除いて、ユーザーが追加情報を提供しなくても、他のすべてをすぐに機能させるのに十分なイントロスペクションが実装されていると思います。
別のオプションは、システムテーブルを調べて、関連するインデックスオブジェクトを見つけることですが、これは、文書化されていないインターフェイスに依存することを意味します。
この質問を満たすために、テーブルのインデックス(名前だけで十分です)を列挙するサポートされた方法が必要です。