forked from manhcuongbk56/cypher-go-dsl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrelationship_chain.go
More file actions
123 lines (100 loc) · 3.71 KB
/
relationship_chain.go
File metadata and controls
123 lines (100 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package cypher
import "errors"
type RelationshipChain struct {
relationships []Relationship
key string
notNil bool
err error
}
func RelationshipChainCreate(relationship Relationship) RelationshipChain {
relations := make([]Relationship, 1)
relations[0] = relationship
return RelationshipChain{relationships: relations, notNil: true}
}
func RelationshipChainError(msg string) RelationshipChain {
return RelationshipChain{err: errors.New(msg)}
}
func (r RelationshipChain) GetError() error {
return r.err
}
func (r RelationshipChain) isNotNil() bool {
return r.notNil
}
func (r RelationshipChain) getKey() string {
return r.key
}
func (r RelationshipChain) RelationshipTo(node Node, types ...string) RelationshipChain {
newRelation := r.relationships[len(r.relationships)-1].right.RelationshipTo(node, types...)
r.relationships = append(r.relationships, newRelation)
return r
}
func (r RelationshipChain) RelationshipFrom(node Node, types ...string) RelationshipChain {
newRelation := r.relationships[len(r.relationships)-1].right.RelationshipFrom(node, types...)
r.relationships = append(r.relationships, newRelation)
return r
}
func (r RelationshipChain) RelationshipBetween(node Node, types ...string) RelationshipChain {
newRelation := r.relationships[len(r.relationships)-1].right.RelationshipBetween(node, types...)
r.relationships = append(r.relationships, newRelation)
return r
}
func (r RelationshipChain) Named(name string) Relationship {
return RelationshipError(errors.New("can not use named for relationship chain"))
}
func (r RelationshipChain) NamedC(name string) RelationshipChain {
namedRelation := r.relationships[len(r.relationships)-1].Named(name)
r.relationships[len(r.relationships)-1] = namedRelation
return r
}
func (r RelationshipChain) Unbounded() RelationshipChain {
namedRelation := r.relationships[len(r.relationships)-1].Unbounded()
r.relationships[len(r.relationships)-1] = namedRelation
return r
}
func (r RelationshipChain) Min(minimum int) RelationshipChain {
namedRelation := r.relationships[len(r.relationships)-1].Min(minimum)
r.relationships[len(r.relationships)-1] = namedRelation
return r
}
func (r RelationshipChain) Length(minimum int, maximum int) RelationshipChain {
namedRelation := r.relationships[len(r.relationships)-1].Length(minimum, maximum)
r.relationships[len(r.relationships)-1] = namedRelation
return r
}
func (r RelationshipChain) Max(maximum int) RelationshipChain {
namedRelation := r.relationships[len(r.relationships)-1].Max(maximum)
r.relationships[len(r.relationships)-1] = namedRelation
return r
}
func (r RelationshipChain) Properties(newProperties MapExpression) RelationshipChain {
namedRelation := r.relationships[len(r.relationships)-1].WithProperties(newProperties)
r.relationships[len(r.relationships)-1] = namedRelation
return r
}
func (r RelationshipChain) PropertiesRaw(keysAndValues ...interface{}) RelationshipChain {
namedRelation := r.relationships[len(r.relationships)-1].WithRawProperties(keysAndValues...)
r.relationships[len(r.relationships)-1] = namedRelation
return r
}
func (r RelationshipChain) accept(visitor *CypherRenderer) {
visitor.enter(r)
lastNode := Node{}
for _, relationship := range r.relationships {
relationship.left.accept(visitor)
relationship.details.accept(visitor)
lastNode = relationship.right
}
VisitIfNotNull(lastNode, visitor)
visitor.leave(r)
}
func (r RelationshipChain) enter(renderer *CypherRenderer) {
}
func (r RelationshipChain) leave(renderer *CypherRenderer) {
}
func (r RelationshipChain) Add(relationship Relationship) RelationshipChain {
r.relationships = append(r.relationships, relationship)
return r
}
func (r RelationshipChain) IsPatternElement() bool {
return true
}