GQL兼容性
GQL标准请参考ISO发布的GQL文档。GES对GQL的最小化支持(GQL minimum conformance)如下所示:
- 支持特性GG02“Graph with a closed graph type”以及GG20“Explicit element type names”。
- 支持Unicode 13。
- 支持基础数据类型,包括:STRING,BOOLEAN,INT,FLOAT。
- 支持一系列特性,详见支持的特性清单。
支持的特性清单
GES目前支持的GQL特性清单如下:
章节名 | 小节 | 语法名/特性名 | 关联编号 | 操作示例 |
|---|---|---|---|---|
9 Procedure specification | 9.1 | <next statement> | GQ20 | match (n:user) return n union all match (n:movie) return n next yield n as b match (b)-->(m) return m |
13 Data-modifying statements(仅持久化版支持) | 13.2 | <insert statement> | - | insert (n:movie{_ID_:'1a', genres: 'Comedy|Drama'}) return n |
13.3 | <set statement> | GD02 | match (n) where element_id(n) ='1a' set n.movieid=1 return n | |
13.4 | <remove statement> | GD02 | match (n) where element_id(n) ='1a' remove n.movieid return n | |
13.5 | <delete statement> | - | match (n) where element_id(n) ='1a' delete n | |
14 Query statement | 14.2 | union | GQ03 | return 1 as a union return 2 as a |
14.4 | <simple match statement> | - | match (n) return n | |
<optional match statement> | - | match (n) where id(n)='1a' optional match (n)-->(m) return count(*) | ||
14.6 | <filter statement> | GQ08 | match (n) where element_id(n) ='1a' return n | |
14.7 | <let statement> | GQ09 | let a=1, value b::long=2 return a,b | |
14.8 | <for statement> | GQ10 | for a in [1,2,3] return a | |
14.11 | <return statement> | - | match (n) return n.name as name, n.age | |
15 Procedure calling | 15.3 | <named procedure call> | GP04 | call db.schema() |
16 Comment elements | 16.4 | <graph pattern> | G004 | 参见模式匹配章节。 |
16.5 | <insert graph pattern> | - | insert (n:movie{_ID_:'1a', genres: 'Comedy|Drama'}) return n | |
16.7 | <quantified path primary> | G036 | match p=(n)-[r]->{1,3}(m) where element_id(n)='xx' return p | |
Non-local element pattern predicates | G041 | let a ='Jaws (1975) ' match (n:movie where n.title=a) return n | ||
<full edge pattern> | G043 | match (n),(m) where element_id(n)='100' and element_id(m)='120' optional match (n)-[r]->(m) with n,r,m optional match (n)-[r1]-(m) with n,r,r1,m optional match (n)<-[r2]-(m) return r,r1,r2 | ||
16.8 | <label expression> | - | match (n:movie) return count(*) | |
<label disjunction> | - | match (n:movie|user) return n limit 10 | ||
<label negation> | - | match (n:!movie) return count(*) | ||
<parenthesized label expression> | - | match (n:(!movie&!default)|user) return count(*) | ||
16.11 | <fixed quantifier> | - | 参见模式匹配章节的“可变长度路径”。 | |
<general quantifier> | - | match p=(n)-[r]->{,3}(m) where element_id(n)='xx' return p | ||
16.13 | <where clause> | - | 参考14.4和14.6 | |
16.16 | <order by clause> | - | match (n:movie) return n order by n.genres asc | |
16.18 | <limit clause> | GQ13 | match (n:movie) return n skip 10 limit 10 | |
16.19 | <offset clause> | GQ12 | ||
19 Predicate | 19.3 | <comparison predicate> | - | let a=1,b=2 return a=b,a<>b,a<b,a>b,a<=b,a>=b |
19.5 | <null predicate> | - | let value a::long=1 return a is null | |
19.9 | <label predicate> | G111 | match (n) where element_id(n)='0' return n:movie | |
20 Value expressions and specifications | 20.4 | <dynamic parameter specification> | - | |
20.7 | <simple case> | - | let a =2 return case a when 1 then a+1 else a+2 end | |
<searched case> | - | let a =2 return case when a=1 then a+1 else a+2 end | ||
20.9 | Hrizontal Aggregation | GE09 | match (n) return labels(n),count(distinct n),avg(n.age), max(n.age),min(n.age),sum(n.age) | |
20.10 | <element_id function> | G100 | match (n) where element_id(n) ='1a' return n | |
20.11 | <property reference> | - | match (n) where element_id(n) ='1a' return n.movieid | |
record property | - | return {name: 'Jay',age:1}.name | ||
20.15 | <list concatenation> | - | return [1,2,3,4]||[5,6,7,8] | |
20.17 | <list value constructor> | - | return [1,2,3,4] | |
20.18 | <record constructor> | GV45 | return {name: 'Jay', age:10, details:{salary:1}} | |
20.20 | <boolean value expression> | - | return (true and false) or false | |
Boolean Xor | GE07 | return true xor false | ||
20.21 | <numeric value expression> | - | return 1+2,1-2,1*2,1/2,-2 | |
20.22 | <char length expression> | - | let value s::STRING ='hello_world' return character_length(s) | |
<path length expression> | GF04 | match p=TRAIL (n)--{1,2}(m) where id(n)='0' return path_length(p) | ||
size function | GF13 | let list =[1,2,3,4] return size(list) |
支持的GQL可选特性清单
对于可选的GQL特性,GQL标准提供了特性ID和特性名称,目前GES支持的特性如下。
特性编号 | 特性名称 |
G004 | Path variables |
G011 | Advanced path modes: TRAIL |
G036 | Quantified edges |
G041 | Non-local element pattern predicates |
G043 | Complete full edge patterns |
G060 | Bounded graph pattern quantifiers |
G100 | ELEMENT_ID function |
G111 | IS LABELED predicate |
GD01 | Updatable graphs |
GD02 | Graph label set changes |
GE07 | Boolean XOR |
GE09 | Horizontal aggregation |
GF01 | Enhanced numeric functions |
GF02 | Trigonometric functions |
GF11 | Advanced aggregate functions: binary set functions |
GF13 | SIZE function |
GG02 | Graph with a closed graph type |
GG20 | Explicit element type names |
GP04 | Named procedure calls |
GQ03 | Composite query: UNION |
GQ08 | Filter statement |
GQ09 | LET statement |
GQ10 | FOR statement: list value support |
GQ12 | ORDER BY and page statement: OFFSET clause |
GQ13 | ORDER BY and page statement: LIMIT clause |
GQ20 | Advanced linear composition with NEXT |
GV45 | Record types |
GV47 | Open record type |
GV48 | Nested record types |
GV50 | List value types |
GV55 | Path value types |

