类关键字SqlTableName,StorageStrategy,System,ViewQuery| 8月更文挑战

147 阅读4分钟

第三十七章 类关键字 - SqlTableName

指定此类投影到的SQL表的名称。仅适用于持久类。

用法

要覆盖此类所投影到的SQL表的默认名称,请使用以下语法:

Class MyApp.Person Extends %Persistent [ SqlTableName = DBTable ]  { //class members }

其中DBTable是有效的SQL标识符。

详解

此关键字指定此类被投影到的SQL表的名称。默认情况下,SQL表名与类名相同。

通常,当类名是SQL保留字(并不少见)或希望SQL表包含类名不支持的字符(如“_”字符)时,可以使用此关键字。

对子类的影响

此关键字不是继承的。

默认

如果省略此关键字,类名将用作SQL表名。

第三十八章 类关键字 - StorageStrategy

指定哪个存储定义控制此类的持久性。仅适用于持久类和串行类。

用法

要指定该类使用的存储定义,请使用如下语法:

Class MyApp.MyClass Extends %Persistent [ StorageStrategy = MyStorage ] 
{ //class members }

其中MyStorage是此类中存储定义的名称。

详解

此关键字指定哪个存储定义用于定义此类使用的存储结构。

通常,不会担心这个关键字或存储结构;类编译器将自动定义一个名为“Default”的存储结构,并为维护它(根据需要添加新字段)。可以为一个类创建多个存储定义。在这种情况下,该关键字用于指定类编译器应该使用哪个存储定义。

对子类的影响

这个关键字是从主超类继承的。子类可以覆盖关键字的值。

默认

如果省略此关键字,此类的持久性由名为default的默认存储定义定义。

第三十九章 类关键字 - System

影响此类的编译顺序

用法

要影响类的编译顺序,请使用如下语法:

Class MyApp.Person Extends %Persistent [ System = n ]  
{ //class members }

其中n04之间的整数,正值较低的类在正值较高的类之前编译。最后编译值为0(零)的类。

详解

该关键字建立类组,每个类组与不同的值和优先级相关联,其中在进入下一个优先级之前,对每个优先级执行完整的类编译过程。从最高优先级到最低优先级,级别如下:

  • 1
  • 2
  • 3
  • 4
  • 0 (默认)

类编译有两个步骤:

  • 解析全局变量。
  • 编译例程。

所有具有相同System关键字值的类都在例程编译之前解析它们的全局变量。 对于不同级别的类,高优先级的类在解析低优先级的类的全局变量之前先解析全局变量和编译例程。

CompileAfterDependsOn关键字在具有公共系统值的类中工作,以确定全局解析的顺序。 一旦所有具有公共System值的类都解析了它们的全局变量,然后对所有类进行例行编译。

因此,如果B类需要在B类的方法生成器中运行A类的方法(也就是说,在B的编译过程中),那么A必须比B具有更高的优先级。这意味着ASystem关键字的值必须是小于b的值的非零整数。要获得这种行为,CompileAfterDependsOn不起作用。

对子类的影响

此关键字不是继承的。

默认

默认值为0(零)。

第四十章 类关键字 - ViewQuery

指定此类的SQL查询。仅适用于视图定义类。

用法

要为此类指定SQL查询,请使用以下语法:

ViewQuery = { statement }

Where语句是一个用大括号括起来的SQL SELECT语句。

详解

当定义一个SQL视图时(使用DDL CREATE VIEW语句或使用管理门户),系统会自动创建一个类定义来保存视图定义。对于这个类定义,类类型是视图,视图查询等于视图所基于的SQL语句。

这个机制是内在的;不希望用户创建视图类,也不希望用户修改ViewQuery关键字。相反,使用常规机制(DDL或管理门户)来管理视图。

所有非视图类都忽略此关键字。

默认

默认值为空字符串。

要加关键字 ClassType = view

Class YX.PersonView [ ClassType = view, ViewQuery = {Select * from sample.person} ]
{

Storage Default
{
<Data name="PersonViewDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
<DataLocation>^YX.PersonViewD</DataLocation>
<DefaultData>PersonViewDefaultData</DefaultData>
<IdLocation>^YX.PersonViewD</IdLocation>
<IndexLocation>^YX.PersonViewI</IndexLocation>
<StreamLocation>^YX.PersonViewS</StreamLocation>
<Type>%Library.CacheStorage</Type>
}

}

SELECT * FROM YX.PersonView

image.png