文章
姚 鑫 · 七月 20 阅读大约需 6 分钟

关键字类定义,外键定义,索引定义,方法定义

第一章 类定义

描述类定义的结构。

介绍

一个类可以包含熟悉的类元素,如属性、方法和参数(在其他类语言中称为常量)。它还可以包含通常不在类中定义的项,包括触发器、查询和索引。

详细

类定义具有以下结构:

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(必需)是有效的类名。packageshortclassname一起构成完整的类名,该类名受长度限制。
  • superclass_list(可选)指定此类继承的一个或多个类。如果指定了此选项,则它要么是单个类的名称(没有.cls扩展)或是用逗号分隔的类列表,用括号括起来。

第一个这样的类被称为主超类;任何额外的类都是次级超类。

如果超类列表为空,则从类定义中省略单词Extends

  • class_keyword_list(可选)是以逗号分隔的关键字列表,这些关键字(在大多数情况下)会影响编译器如何为此类定义生成代码。

如果省略此列表,也要省略方括号。

  • Class_members是类成员的零个或多个定义。

第二章 外键定义

描述外键定义的结构。

介绍

外键定义了引用完整性约束。修改包含外键约束的表时,将检查外键约束。

可以将外键定义添加到持久类中。它们在其他种类中没有意义。

请注意,还可以通过定义连接类的关系属性来强制引用完整性。

详细

外键定义具有以下结构:

/// 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(可选)是以逗号分隔的关键字列表,用于进一步定义外键。

如果省略此列表,也要省略方括号。

ForeignKey EmpKey(EmpId) References MyApp.Employee(EmpID) [ OnDelete = cascade ];

第三章 索引定义

描述索引定义的结构。

介绍

索引是由持久类维护的结构,用于优化查询和其他功能。每当对数据库执行基于插入、更新或删除的操作时,这些索引都会自动维护;基于对象的操作也是如此。SQL查询处理器在准备和执行SQL查询时利用可用的索引。

可以向持久类添加索引定义。它们在其他类中没有意义。

详细

索引定义具有以下结构:

/// description 
Index name On property_expression_list [ keyword_list ];
  • description 描述(可选)旨在显示在“类参考”中。默认情况下,描述为空白。
  • name(必需)是索引的名称。该名称必须遵循属性命名约定,并且在此类或表中是唯一的。

该名称用于数据库管理目的(报告、索引构建、删除索引等)。

  • property_expression_list(必需)指定索引所基于的一个或多个属性,还可能包括每个属性的排序规则规范。该选项可以是单个属性表达式,也可以是用逗号分隔的属性表达式列表,用括号括起来。

  • 给定的属性表达式包括:

    • 要编制索引的属性的名称。
    • 可选的(ELEMENTS)或(KEYS)表达式,它提供了一种对集合子值进行索引的方法。
    • 可选的排序规则表达式。
  • keyword_list(可选)是以逗号分隔的关键字列表,用于进一步定义索引。

如果省略此列表,也要省略方括号。

例如,以下类定义定义了两个属性和基于每个属性的索引:

Class MyApp.Student Extends %Persistent 
{

Property Name As %String;

Property GPA As %Double;

Index NameIDX On Name;

Index GPAIDX On GPA;
}

第四章 方法定义

描述方法定义的结构。

介绍

在大多数情况下,方法定义定义了方法的运行时行为。支持方法生成器,这是一种生成运行时使用的代码的特殊方法。

详细

方法定义具有以下结构:

/// description 
Method name(formal_spec) As returnclass [ keyword_list ]  
{ implementation }

或者(对于类方法):

/// description 
ClassMethod name(formal_spec) As returnclass [ keyword_list ]  
{ implementation }

或者(对于客户端方法):

/// description 
ClientMethod name(formal_spec) As returnclass [ keyword_list ]  
{ implementation }
  • description 描述(可选)旨在显示在“类参考”中。默认情况下,描述为空白。
  • name(必需)是方法的名称。这必须是有效的类成员名称,并且不能与任何其他类成员名称冲突。
  • formal_spec(可选)指定传入或传出方法的参数列表。

形式规范是方法的参数、类型、调用类型(ByRefOutputByVal)和可选默认值的列表。输出调用类型用于指示通过引用传递的参数,但名义上不使用其传入值。
- returnclass(可选)指定此方法返回的值的类型(如果有)。如果省略returnclass,也要省略单词As
- keyword_list(可选)是逗号分隔的关键字列表,进一步定义了该方法。

如果省略此列表,也要省略方括号。

  • implementation实现(可选)是零行或多行定义方法功能的代码。

若要指定使用的编程语言,请使用类级语言或方法级语言关键字。

参数值

对于formal _ specreturnclass,可以在类名后指定可选的参数值。如果该方法用作SQL存储过程,则这些参数值用于向ODBCJDBC客户端提供附加信息。这些参数在所有其他情况下都会被忽略。例如:

ClassMethod MyProc(data As %String(MAXLEN = 85)) As %Integer [ SQLProc ]
{
  Quit 22
}

再举一个例子:

ClassMethod GetName() As %String(MAXLEN=222) [ SQLProc ]
{
  Quit "Mo"
}
00
1 0 0 8
Log in or sign up to continue