記事
· 2023年4月10日 4m read

テーブル定義のデータが格納されるグローバル変数名について

これは InterSystems FAQ サイトの記事です。

バージョン2017.2以降から、CREATE TABLE文で作成したテーブル定義のデータを格納するグローバル変数の命名ルールが変わり ^EPgS.D8T6.1 のようなハッシュ化したグローバル変数名が設定されます。(この変更はパフォーマンス向上のために追加されました。)

※ バージョン2017.1以前については、永続クラス定義のルールと同一です。詳細は関連記事「永続クラス定義のデータが格納されるグローバル変数名について」をご参照ください。

以下のテーブル定義を作成すると、同名の永続クラス定義が作成されます。

CREATE TABLE Test.Product(
    ProductID VARCHAR(10) PRIMARY KEY,
    ProductName VARCHAR(50),
    Price INTEGER
)

 永続クラス:Test.Productの定義は以下の通りです。(パラメータ:USEEXTENTSETに1が設定されます) 

Class Test.Product Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {SuperUser}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = Product ]
{
Property ProductID As %Library.String(MAXLEN = 10) [ SqlColumnNumber = 2 ];

Property ProductName As %Library.String(MAXLEN = 50) [ SqlColumnNumber = 3 ];

Property Price As %Library.Integer(MAXVAL = 2147483647, MINVAL = -2147483648) [ SqlColumnNumber = 4 ];

Parameter USEEXTENTSET = 1;

/// Bitmap Extent Index auto-generated by DDL CREATE TABLE statement.  Do not edit the SqlName of this index.
Index DDLBEIndex [ Extent, SqlName = "%%DDLBEIndex", Type = bitmap ];

/// DDL Primary Key Specification
Index PRODUCTPKEY1 On ProductID [ PrimaryKey, SqlName = PRODUCT_PKEY1, Type = index, Unique ];

Storage Default
{
<Data name="ProductDefaultData">
<Value name="1">
<Value>ProductID</Value>
</Value>
<Value name="2">
<Value>ProductName</Value>
</Value>
<Value name="3">
<Value>Price</Value>
</Value>
</Data>
<DataLocation>^CCar.Wt3i.1</DataLocation>
<DefaultData>ProductDefaultData</DefaultData>
<ExtentLocation>^CCar.Wt3i</ExtentLocation>
<ExtentSize>0</ExtentSize>
<IdFunction>sequence</IdFunction>
<IdLocation>^CCar.Wt3i.1</IdLocation>
<Index name="DDLBEIndex">
<Location>^CCar.Wt3i.2</Location>
</Index>
<Index name="IDKEY">
<Location>^CCar.Wt3i.1</Location>
</Index>
<Index name="PRODUCTPKEY1">
<Location>^CCar.Wt3i.3</Location>
</Index>

<IndexLocation>^CCar.Wt3i.I</IndexLocation>
<StreamLocation>^CCar.Wt3i.S</StreamLocation>

<Type>%Storage.Persistent</Type>
}

}

 

ExtentLocation:このクラスのグローバル名の生成に使用されるハッシュ値

DataLocation:レコードデータが登録されるグローバル変数名です。

Location:各インデックス固有のグローバル変数名が指定されます。

IndexLocation:この定義では、多くの場合使用されません。

StreamLocation:ストリームプロパティのデータが格納される変数です。

 

ストレージ定義に表示される情報について詳細は、ドキュメント「ハッシュ化したグローバル名」をご参照ください。

2017.1以前と同様の命名ルール(^スキーマ名.テーブル名D、I、S のグローバル変数名)を使用する場合は、CREATE TABLE文実行時に以下のクラスパラメータを指定します。

WITH %CLASSPARAMETER USEEXTENTSET = 0

CREATE TABLE Test2.Product(
    ProductID VARCHAR(10) PRIMARY KEY,
    ProductName VARCHAR(50),
    Price INTEGER
)
WITH %CLASSPARAMETER USEEXTENTSET = 0

永続クラス定義:Test2.Productのパラメータ:USEEXTENTSETは以下のように定義されます。

Parameter USEEXTENTSET = 0;

 

永続クラス定義:Test2.Productのストレージ定義は以下の通りです。

Storage Default
{
<Data name="ProductDefaultData">
<Value name="1">
<Value>ProductID</Value>
</Value>
<Value name="2">
<Value>ProductName</Value>
</Value>
<Value name="3">
<Value>Price</Value>
</Value>
</Data>
<DataLocation>^Test2.ProductD</DataLocation>
<DefaultData>ProductDefaultData</DefaultData>
<IdFunction>sequence</IdFunction>
<IdLocation>^Test2.ProductD</IdLocation>
<IndexLocation>^Test2.ProductI</IndexLocation>
<StreamLocation>^Test2.ProductS</StreamLocation>

<Type>%Storage.Persistent</Type>
}

 

WITHで指定したテーブルのオプションについては詳しくは、ドキュメント「テーブルのオプション」をご参照ください。


関連記事:永続クラス定義のデータが格納されるグローバル変数名について

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください