别名是给 UQL 执行过程中产生的数据起名,从而实现数据调用。
自定义别名
通过关键词 as
进行的数据命名,需在数据产生时立即命名。一个数据可以被多次命名,且仅最后一次定义的别名有效。一个别名只能命名一次,即使原数据改名后,该别名也即刻作废,不能再被定义为其他数据。
命名规则
尽量避免与点、边的属性重名(若无法避免,必要时可使用系统别名 this
消除歧义),且满足:
- 1 ~ 64 个字符
- 不能以波浪号 '~' 开头
- 不能包含反单引号 '`'
- 不能使用系统保留字
- (别名中含有除数字、字母、下划线之外的字符时,在 UQL 语句中使用时需要用反引号(`)包裹)
定义举例
别名中无特殊字符时:
别名定义举例 | 句中定义的别名 |
---|---|
find().nodes() as nodes | nodes |
find().edges() as edges | edges |
n().e().n() as paths | paths |
with table(nodes.name, nodes.birthday) as user_list | user_list |
with nodes.birthday as date_of_birth | date_of_birth |
别名中有特殊字符时:
with [1,2,3] as `my-list`
return `my-list`
数据产生但未定义别名,或定义了别名但从未进行调用,这些都可能影响 UQL 的执行效率。
系统别名
别名 | 调用位置 | 所指数据 |
---|---|---|
this |
任意点、边过滤器 | 当前点/边 |
prev_n |
点、边模板 | 当前点/边的前一个点 |
prev_e |
点、边模板 | 当前点/边的前一个边 |
this
this
通常可以省略。但如果有歧义出现,即需要调用当前点、边的某个属性,而该属性和其他数据重名时,this
不能省略。
以下代码中的点过滤器 {this.balance > 5000}
表示当前节点的属性 balance 大于 5000:
... as balance
find().nodes({this.balance > 5000})
由于点属性 balance 和第一句中定义的别名 balance 重名,如果点过滤器省略 this
变为 {balance > 5000}
,则表示别名 balance 大于 5000,这显然不是一个有效的点过滤条件。
prev_n
prev_n
只能在模板中使用,指路径中位于当前点、边左侧最近的一个点:
- 单边、单点模板的
prev_n
:
- 多边模板的
prev_n
:
(1) 当
prev_n
不存在时(上图中红色问号标记的情况,即路径起点的prev_n
),与该prev_n
有关的条件判断==
、!=
、>
、>=
、<
、<=
默认返回true
,其余条件判断的结果不可预期。
(2) 当prev_n
位于模板之外时,须具有被引用的属性。
prev_e
prev_e
只能在模板中使用,指路径中位于当前点、边左侧最近的一个边:
- 单边、单点模板的
prev_e
:
- 多边模板的
prev_e
:
当
prev_e
不存在时(上图中红色问号标记的情况,即路径起点、第一条边的prev_e
),与该prev_e
有关的条件判断==
、!=
、>
、>=
、<
、<=
默认返回true
,其余条件判断的结果不可预期。
(2) 当prev_e
位于模板之外时,须具有被引用的属性。
别名的调用格式
假设别名 nodes、edges、paths、mylist、mypoint、myobject、myitem 分别指代类型为 NODE,EDGE,PATH,list,point,object 及其他类型的数据,它们在 UQL 中的调用格式为:
调用格式 |
调用内容 | 调用类型 |
---|---|---|
nodes |
点 | NODE |
nodes.<property> |
点的某个属性 | 该属性的类型(属性不存在时报错) |
nodes.@ |
点的 schema | string |
edges |
边 | EDGE |
edges.<property> |
边的某个属性 | 该属性的类型(属性不存在时报错) |
edges.@ |
边的 schema | string |
paths |
路径 | PATH |
mylist |
整个列表 | list |
mylist[n] |
下标为 n 的元素 | 该元素的类型 |
mylist[n1:n2] |
由下标为 n1~n2 的元素构成的列表 | list |
mylist[:n] |
由下标为 0~n 的元素构成的列表 | list |
mylist[n:] |
由下标为 n~<长度-1> 的元素构成的列表 | list |
mypoint |
整个坐标 | point |
mypoint.x |
坐标 x | double |
mypoint.y |
坐标 y | double |
myobject.a |
键 a | 该键的类型 |
myitem |
数据本身 | 该数据的类型 |
UQL 句中不支持调用 TABLE 类型;RETURN 子句中别名调用的有效格式(返回格式)请参见本RETURN末尾的表格。