@@ -122,7 +122,161 @@ type GraphClause struct {
122122
123123// String returns a readable representaion of a graph clause.
124124func (c * GraphClause ) String () string {
125- return "not implemented"
125+ b := bytes .NewBufferString ("{ " )
126+
127+ // Subject section.
128+ if c .S != nil {
129+ b .WriteString (c .S .String ())
130+ } else {
131+ b .WriteString (c .SBinding )
132+ }
133+ if c .SAlias != "" {
134+ b .WriteString (" AS " )
135+ b .WriteString (c .SAlias )
136+ }
137+ if c .STypeAlias != "" {
138+ b .WriteString (" TYPE " )
139+ b .WriteString (c .STypeAlias )
140+ }
141+ if c .SIDAlias != "" {
142+ b .WriteString (" ID " )
143+ b .WriteString (c .SIDAlias )
144+ }
145+
146+ // Predicate section.
147+ predicate := false
148+ if c .P != nil {
149+ b .WriteString (" " )
150+ b .WriteString (c .P .String ())
151+ predicate = true
152+ }
153+ if c .PBinding != "" {
154+ b .WriteString (" " )
155+ b .WriteString (c .PBinding )
156+ }
157+ if c .PID != "" {
158+ b .WriteString (" \" " )
159+ b .WriteString (c .PID )
160+ b .WriteString ("\" " )
161+ }
162+ if ! predicate {
163+ if ! c .PTemporal {
164+ b .WriteString ("@[]" )
165+ } else {
166+ b .WriteString ("@[" )
167+ if c .PAnchorBinding != "" {
168+ b .WriteString (c .PAnchorBinding )
169+ if c .PAnchorAlias != "" {
170+ b .WriteString (" at " )
171+ b .WriteString (c .PAnchorAlias )
172+ }
173+ } else {
174+ if c .PLowerBound != nil {
175+ b .WriteString (c .PLowerBound .String ())
176+ } else {
177+ if c .PLowerBoundAlias != "" {
178+ b .WriteString (c .PLowerBoundAlias )
179+ }
180+ }
181+ b .WriteString ("," )
182+ if c .PUpperBound != nil {
183+ b .WriteString (c .PUpperBound .String ())
184+ } else {
185+ if c .PUpperBoundAlias != "" {
186+ b .WriteString (c .PUpperBoundAlias )
187+ }
188+ }
189+ }
190+ b .WriteString ("]" )
191+ }
192+ }
193+
194+ if c .PAlias != "" {
195+ b .WriteString (" AS " )
196+ b .WriteString (c .PAlias )
197+ }
198+ if c .PIDAlias != "" {
199+ b .WriteString (" ID " )
200+ b .WriteString (c .PIDAlias )
201+ }
202+
203+ // Object section.
204+ // Node portion.
205+ object := false
206+ if c .O != nil {
207+ b .WriteString (" " )
208+ b .WriteString (c .O .String ())
209+ object = true
210+ } else {
211+ b .WriteString (" " )
212+ b .WriteString (c .OBinding )
213+ object = true
214+ }
215+ if c .OAlias != "" {
216+ b .WriteString (" AS " )
217+ b .WriteString (c .OAlias )
218+ }
219+ if c .OTypeAlias != "" {
220+ b .WriteString (" TYPE " )
221+ b .WriteString (c .OTypeAlias )
222+ }
223+ if c .OIDAlias != "" {
224+ b .WriteString (" ID " )
225+ b .WriteString (c .OIDAlias )
226+ }
227+ // Predicate portion.
228+ if ! object {
229+ if c .OBinding != "" {
230+ b .WriteString (" " )
231+ b .WriteString (c .OBinding )
232+ }
233+ if c .OID != "" {
234+ b .WriteString (" \" " )
235+ b .WriteString (c .OID )
236+ b .WriteString ("\" " )
237+ }
238+ if ! c .OTemporal {
239+ b .WriteString ("[]" )
240+ } else {
241+ b .WriteString ("[" )
242+ if c .OAnchorBinding != "" {
243+ b .WriteString (c .OAnchorBinding )
244+ if c .OAnchorAlias != "" {
245+ b .WriteString (" at " )
246+ b .WriteString (c .OAnchorAlias )
247+ }
248+ } else {
249+ if c .OLowerBound != nil {
250+ b .WriteString (c .OLowerBound .String ())
251+ } else {
252+ if c .OLowerBoundAlias != "" {
253+ b .WriteString (c .OLowerBoundAlias )
254+ }
255+ }
256+ b .WriteString ("," )
257+ if c .OUpperBound != nil {
258+ b .WriteString (c .OUpperBound .String ())
259+ } else {
260+ if c .OUpperBoundAlias != "" {
261+ b .WriteString (c .OUpperBoundAlias )
262+ }
263+ }
264+ }
265+ b .WriteString ("]" )
266+ }
267+ }
268+
269+ if c .OAlias != "" {
270+ b .WriteString (" AS " )
271+ b .WriteString (c .OAlias )
272+ }
273+ if c .OIDAlias != "" {
274+ b .WriteString (" ID " )
275+ b .WriteString (c .OIDAlias )
276+ }
277+
278+ b .WriteString (" }" )
279+ return b .String ()
126280}
127281
128282// Specificity return
0 commit comments