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 |