テーブルにどのインデックスが存在し、それらがどのように構成されているかを把握するには、以前は「構造エディタ」を使って手動で確認する必要がありました。新しいgetIndexes()関数により、4D開発者はコードから直接インデックスを検査できるようになり、実行時に構成を簡単に確認したり、診断ツールを構築したり、デプロイメントを自動的に検証したりすることが可能になりました。
4Dでは、コードから直接インデックスを調査するための新しい関数が追加されました:
var $indexes := ds.MyTable.getIndexes()
テーブルに対してgetIndexes()を呼び出すと、そのテーブルに定義されているすべてのインデックス(構造エディタで作成されたもの、またはCREATE INDEX を使用してコードから作成されたものを問わず)を記述したコレクションが返されます。
インデックスエントリの詳細
返されるコレクションの各エントリは、以下の属性を持つインデックスを記述しています:
| 属性 | 型 | 説明 |
|---|---|---|
type |
整数 | インデックスアルゴリズムのタイプ(「自動」が選択されている場合に適用) |
automatic |
ブール値 | 「自動」インデックスが選択されている場合は True |
name |
text | 利用可能な場合、インデックス名 |
kind |
text | 「キーワード」または「通常」 |
属性 |
コレクション | インデックスが対象とするフィールド |
UUID |
text | インデックスの一意の識別子 |
uniqueKey |
ブール値 | インデックスが一意性を強制するかどうか |
これにより、実行時にフィールドのインデックスの状態を確認することが可能になり、これは特に診断や自動デプロイスクリプトにおいて有用です。

var $indexes:=ds.Discuss.getIndexes()

メリット
getIndexes() が導入される前は、重要なインデックスが存在するか、あるいは正しいアルゴリズムで設定されているかを確認するには、構造エディタを開いて手動でチェックする必要がありました。これは自動化されたワークフローには適していませんでした。この関数を使用すると、以下のことが可能になります:
- デプロイの検証:構造の更新やデータベースの移行直後に、想定されるすべてのインデックスが存在することを確認できます。
- 診断ツールの構築:管理パネルやヘルスチェックエンドポイントでインデックスの設定情報を表示できます。
- 一意性制約の監査:uniqueKeyインデックスによって保護されているフィールドを迅速に特定できます。
- インデックス タイプの特定:type および kind 属性を確認することで、標準インデックス、キーワード インデックス、ベクトル インデックス(コサイン、ドット、ユークリッド)を区別できます。
まとめ
getIndexes() は、4Dのインデックス管理APIにおける機能の不足を解消します。これにより、開発者はテーブルにどのインデックスが存在するかを確認するために、もはやユーザーインターフェースに頼る必要がなくなります。 CREATE INDEX、 SET INDEX、および DELETE INDEXと組み合わせることで、インデックス管理のための完全にプログラムによるワークフローが完成します。
現在、この投稿へのコメント機能は利用できません。