计算的 属性,SqlComputed,自定义 getter,同时:什么有优先级?
A property which is Calculated, SqlComputed, with a custom getter, all at the same time: what has the priority?
这是从 this project 中提取的代码(注意:为清楚起见重新格式化):
Class Util.Data.EmojiType Extends %Persistent
{
Property CodePoint As %Integer;
Property UnicodeChar As %String [
Calculated,
ReadOnly,
SqlComputeCode = { set {*} = $wchar({CodePoint})},
SqlComputed,
Transient
];
// snip
Method UnicodeCharGet() As %String
{
quit $wchar(..CodePoint)
}
现在,我真的不明白。为什么 UnicodeChar
既是 Calculated 又是 有自定义的 getter(哎哟),plus 自定义的 getter 与 SqlComputeCode
?
做的事情完全一样
如果我尝试得到这个 属性,会触发这一切的哪一部分?
即使未计算 属性,也可以调用自定义 getter。但仅适用于对象访问模式。要通过 SQL 查询获取计算值,属性 应该定义所有属性:Calculated、SqlComputed 和 SqlComputeCode。如果定义了 SqlComputeCode,则此代码仅在 SQL 查询中使用。当属性计算了属性,但没有SqlComputed,它不会出现在SQL结果中。
这是从 this project 中提取的代码(注意:为清楚起见重新格式化):
Class Util.Data.EmojiType Extends %Persistent
{
Property CodePoint As %Integer;
Property UnicodeChar As %String [
Calculated,
ReadOnly,
SqlComputeCode = { set {*} = $wchar({CodePoint})},
SqlComputed,
Transient
];
// snip
Method UnicodeCharGet() As %String
{
quit $wchar(..CodePoint)
}
现在,我真的不明白。为什么 UnicodeChar
既是 Calculated 又是 有自定义的 getter(哎哟),plus 自定义的 getter 与 SqlComputeCode
?
如果我尝试得到这个 属性,会触发这一切的哪一部分?
即使未计算 属性,也可以调用自定义 getter。但仅适用于对象访问模式。要通过 SQL 查询获取计算值,属性 应该定义所有属性:Calculated、SqlComputed 和 SqlComputeCode。如果定义了 SqlComputeCode,则此代码仅在 SQL 查询中使用。当属性计算了属性,但没有SqlComputed,它不会出现在SQL结果中。