第一章 类定义
描述类定义的结构。
介绍
一个类可以包含熟悉的类元素,如属性、方法和参数(在其他类语言中称为常量)。它还可以包含通常不在类中定义的项,包括触发器、查询和索引。
详细
类定义具有以下结构:
代码语言:javascript复制Import import_ppackage_list
Include include_code
IncludeGenerator include_generator_code
/// description
Class package.shortclassname Extends superclass_list [ class_keyword_list ]
{
Class_members
}
-
import_package_list
(可选)指定类从中导入的任何包的名称。会影响编译器解析短类名的方式。
如果指定了此选项,则它可以是单个包的名称,也可以是多个包的逗号分隔列表,用括号括起来。
如果import_package_list
为空,则不要在类定义的开头添加import
行。
注意:如果一个类导入任何包,该类不会自动导入用户包。
导入的包继承自所有超类。如果一个子类指定了一个或多个导入包,这些导入包将被添加到由超类定义的任何导入包中。
-
include_code
(可选)指定include (.inc)
。编译此类时使用的文件。
如果指定了此选项,则它要么是单个包含文件的名称(没有.inc
扩展名)或是多个包含文件的逗号分隔列表,用括号括起来。
如果include_code
为空,则忽略类定义开头的include
行。
包含文件继承自所有超类。如果子类指定了一个或多个包含文件,这些文件将被添加到由超类定义的任何包含文件中。
-
include_generator_code
(可选)指定include (.inc)
。编译该类的生成器方法时使用的文件。
如果include_generator_code
为空,则不要在类定义的开头添加IncludeGenerator
行。
-
description
描述(可选)旨在显示在“类参考”中。描述可以由多行组成,并且可以包括HTML
格式标记和附加标记,例如class>
和<method>
。默认情况下,描述为空白。 -
package
包(必需)是有效的包名。 -
shortclassname
(必需)是有效的类名。package
和shortclassname
一起构成完整的类名,该类名受长度限制。 -
superclass_list
(可选)指定此类继承的一个或多个类。如果指定了此选项,则它要么是单个类的名称(没有.cls
扩展)或是用逗号分隔的类列表,用括号括起来。
第一个这样的类被称为主超类;任何额外的类都是次级超类。
如果超类列表为空,则从类定义中省略单词Extends
。
-
class_keyword_list
(可选)是以逗号分隔的关键字列表,这些关键字(在大多数情况下)会影响编译器如何为此类定义生成代码。
如果省略此列表,也要省略方括号。
-
Class_members
是类成员的零个或多个定义。
第二章 外键定义
描述外键定义的结构。
介绍
外键定义了引用完整性约束。修改包含外键约束的表时,将检查外键约束。
可以将外键定义添加到持久类中。它们在其他种类中没有意义。
请注意,还可以通过定义连接类的关系属性来强制引用完整性。
详细
外键定义具有以下结构:
代码语言:javascript复制/// description
ForeignKey name(key_props) References referenced_class(ref_index) [ keyword_list ];
-
description
描述(可选)旨在显示在“类参考”中。默认情况下,描述为空白。 -
name
(必需)是外键的名称。这必须是有效的类成员名称,并且不能与任何其他类成员名称冲突。 -
key_props
(必需)指定受该外键约束的一个或多个属性。具体来说,该属性必须与外部表中的引用值匹配。
这是一个逗号分隔的属性名称列表。
这些属性必须在定义外键的同一类中。
-
referenced_class
(必需)指定外键表(即外键指向的类)。 -
ref_index
(可选)指定referenced_class
中的唯一索引名称。
如果省略ref_props
,则系统使用referenced_class
中的IDKEY
索引。
-
keyword_list
(可选)是以逗号分隔的关键字列表,用于进一步定义外键。
如果省略此列表,也要省略方括号。
代码语言:javascript复制ForeignKey EmpKey(EmpId) References MyApp.Employee(EmpID) [ OnDelete = cascade ];
第三章 索引定义
描述索引定义的结构。
介绍
索引是由持久类维护的结构,用于优化查询和其他功能。每当对数据库执行基于插入、更新或删除的操作时,这些索引都会自动维护;基于对象的操作也是如此。SQL
查询处理器在准备和执行SQL查询时利用可用的索引。
可以向持久类添加索引定义。它们在其他类中没有意义。
详细
索引定义具有以下结构:
代码语言:javascript复制/// description
Index name On property_expression_list [ keyword_list ];
-
description
描述(可选)旨在显示在“类参考”中。默认情况下,描述为空白。 -
name
(必需)是索引的名称。该名称必须遵循属性命名约定,并且在此类或表中是唯一的。
该名称用于数据库管理目的(报告、索引构建、删除索引等)。
property_expression_list
(必需)指定索引所基于的一个或多个属性,还可能包括每个属性的排序规则规范。该选项可以是单个属性表达式,也可以是用逗号分隔的属性表达式列表,用括号括起来。- 给定的属性表达式包括:
- 要编制索引的属性的名称。
- 可选的(
ELEMENTS
)或(KEYS
)表达式,它提供了一种对集合子值进行索引的方法。 - 可选的排序规则表达式。
keyword_list
(可选)是以逗号分隔的关键字列表,用于进一步定义索引。
如果省略此列表,也要省略方括号。
例如,以下类定义定义了两个属性和基于每个属性的索引:
代码语言:javascript复制Class MyApp.Student Extends %Persistent
{
Property Name As %String;
Property GPA As %Double;
Index NameIDX On Name;
Index GPAIDX On GPA;
}
第四章 方法定义
描述方法定义的结构。
介绍
在大多数情况下,方法定义定义了方法的运行时行为。支持方法生成器,这是一种生成运行时使用的代码的特殊方法。
详细
方法定义具有以下结构:
代码语言:javascript复制/// description
Method name(formal_spec) As returnclass [ keyword_list ]
{ implementation }
或者(对于类方法):
代码语言:javascript复制/// description
ClassMethod name(formal_spec) As returnclass [ keyword_list ]
{ implementation }
或者(对于客户端方法):
代码语言:javascript复制/// description
ClientMethod name(formal_spec) As returnclass [ keyword_list ]
{ implementation }
-
description
描述(可选)旨在显示在“类参考”中。默认情况下,描述为空白。 -
name
(必需)是方法的名称。这必须是有效的类成员名称,并且不能与任何其他类成员名称冲突。 -
formal_spec
(可选)指定传入或传出方法的参数列表。
形式规范是方法的参数、类型、调用类型(ByRef
、Output
或ByVal
)和可选默认值的列表。输出调用类型用于指示通过引用传递的参数,但名义上不使用其传入值。
-
returnclass
(可选)指定此方法返回的值的类型(如果有)。如果省略returnclass
,也要省略单词As
-
keyword_list
(可选)是逗号分隔的关键字列表,进一步定义了该方法。
如果省略此列表,也要省略方括号。
-
implementation
实现(可选)是零行或多行定义方法功能的代码。
若要指定使用的编程语言,请使用类级语言或方法级语言关键字。
参数值
对于formal _ spec
和returnclass
,可以在类名后指定可选的参数值。如果该方法用作SQL
存储过程,则这些参数值用于向ODBC
或JDBC
客户端提供附加信息。这些参数在所有其他情况下都会被忽略。例如:
ClassMethod MyProc(data As %String(MAXLEN = 85)) As %Integer [ SQLProc ]
{
Quit 22
}
再举一个例子:
代码语言:javascript复制ClassMethod GetName() As %String(MAXLEN=222) [ SQLProc ]
{
Quit "Mo"
}