@@ -8,32 +8,23 @@ import groovy.util.logging.Slf4j
8
8
import org.grails.datastore.gorm.GormEntity
9
9
import org.grails.datastore.gorm.GormStaticApi
10
10
import org.grails.datastore.gorm.finders.FinderMethod
11
- import org.grails.datastore.gorm.neo4j.CypherBuilder
12
- import org.grails.datastore.gorm.neo4j.GraphPersistentEntity
13
- import org.grails.datastore.gorm.neo4j.Neo4jDatastore
14
- import org.grails.datastore.gorm.neo4j.Neo4jSession
15
- import org.grails.datastore.gorm.neo4j.RelationshipPersistentEntity
11
+ import org.grails.datastore.gorm.neo4j.*
16
12
import org.grails.datastore.gorm.neo4j.collection.Neo4jPath
17
13
import org.grails.datastore.gorm.neo4j.collection.Neo4jRelationship
18
14
import org.grails.datastore.gorm.neo4j.collection.Neo4jResultList
19
15
import org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister
20
16
import org.grails.datastore.gorm.neo4j.extensions.Neo4jExtensions
21
17
import org.grails.datastore.mapping.core.Datastore
18
+ import org.grails.datastore.mapping.core.Session
22
19
import org.grails.datastore.mapping.core.SessionCallback
23
20
import org.grails.datastore.mapping.engine.EntityPersister
24
21
import org.grails.datastore.mapping.model.config.GormProperties
25
22
import org.grails.datastore.mapping.multitenancy.MultiTenancySettings
26
23
import org.grails.datastore.mapping.multitenancy.exceptions.TenantNotFoundException
27
24
import org.grails.datastore.mapping.query.QueryException
28
- import org.neo4j.cypher.result.QueryResult
29
25
import org.neo4j.driver.QueryRunner
30
26
import org.neo4j.driver.Record
31
27
import org.neo4j.driver.Result
32
- import org.neo4j.driver.Session
33
- import org.neo4j.driver.Result
34
- import org.neo4j.driver.QueryRunner
35
- import org.neo4j.driver.Value
36
- import org.neo4j.driver.summary.SummaryCounters
37
28
import org.neo4j.driver.types.Node
38
29
import org.springframework.transaction.PlatformTransactionManager
39
30
@@ -59,8 +50,9 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
59
50
60
51
@Override
61
52
List<D> findAll (CharSequence query , Map params , Map args ) {
62
- (List<D> )execute({ Neo4jSession session ->
63
- QueryRunner boltSession = getStatementRunner(session)
53
+ execute({ Session session ->
54
+ Neo4jSession neo4jSession = (Neo4jSession ) session
55
+ QueryRunner boltSession = getStatementRunner(neo4jSession)
64
56
params = new LinkedHashMap (params)
65
57
String queryString
66
58
if (query instanceof GString ) {
@@ -70,12 +62,12 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
70
62
queryString = query. toString()
71
63
}
72
64
73
- includeTenantIdIfNecessary(session , queryString, params)
65
+ includeTenantIdIfNecessary(neo4jSession , queryString, params)
74
66
if (log. isDebugEnabled()) {
75
67
log. debug(" QUERY Cypher [$queryString ] for params [$params ]" )
76
68
}
77
69
Result result = boltSession. run( queryString, (Map<String ,Object > )params)
78
- def persister = session
70
+ def persister = neo4jSession
79
71
.getEntityPersister(persistentEntity)
80
72
81
73
if (result. hasNext()) {
@@ -84,7 +76,7 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
84
76
else {
85
77
return Collections . emptyList()
86
78
}
87
- } as SessionCallback )
79
+ } as SessionCallback< List<D> > )
88
80
}
89
81
90
82
@@ -93,14 +85,15 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
93
85
if (query instanceof GString ) {
94
86
throw new QueryException (" Unsafe query [$query ]. GORM cannot automatically escape a GString value when combined with ordinal parameters, so this query is potentially vulnerable to HQL injection attacks. Please embed the parameters within the GString so they can be safely escaped." );
95
87
}
96
- (List<D> )execute({ Neo4jSession session ->
97
- QueryRunner boltSession = getStatementRunner(session)
88
+ execute({ Session session ->
89
+ Neo4jSession neo4jSession = (Neo4jSession ) session
90
+ QueryRunner boltSession = getStatementRunner(neo4jSession)
98
91
if (log. isDebugEnabled()) {
99
92
log. debug(" QUERY Cypher [$query ] for params [$params ]" )
100
93
}
101
94
102
95
Result result = Neo4jExtensions . execute(boltSession, query. toString(), (List<Object > )params. toList())
103
- def persister = session
96
+ def persister = neo4jSession
104
97
.getEntityPersister(persistentEntity)
105
98
106
99
if (result. hasNext()) {
@@ -109,13 +102,14 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
109
102
else {
110
103
return Collections . emptyList()
111
104
}
112
- } as SessionCallback )
105
+ } as SessionCallback< List<D> > )
113
106
}
114
107
115
108
@Override
116
109
D find (CharSequence query , Map params , Map args ) {
117
- (D)execute({ Neo4jSession session ->
118
- QueryRunner boltSession = getStatementRunner(session)
110
+ execute({ Session session ->
111
+ Neo4jSession neo4jSession = (Neo4jSession ) session
112
+ QueryRunner boltSession = getStatementRunner(neo4jSession)
119
113
params = new LinkedHashMap (params)
120
114
String queryString
121
115
if (query instanceof GString ) {
@@ -124,20 +118,20 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
124
118
else {
125
119
queryString = query. toString()
126
120
}
127
- includeTenantIdIfNecessary(session , queryString, params)
121
+ includeTenantIdIfNecessary(neo4jSession , queryString, params)
128
122
if (log. isDebugEnabled()) {
129
123
log. debug(" QUERY Cypher [$queryString ] for params [$params ]" )
130
124
}
131
125
132
126
Result result = boltSession. run( queryString, (Map<String ,Object > )params)
133
- def persister = session
127
+ def persister = neo4jSession
134
128
.getEntityPersister(persistentEntity)
135
129
136
130
def resultList = new Neo4jResultList (0 , 1 , (Iterator ) result, persister)
137
131
if ( ! resultList. isEmpty() ) {
138
132
return (D)resultList. get(0 )
139
133
}
140
- } as SessionCallback )
134
+ } as SessionCallback<D> )
141
135
}
142
136
143
137
@Override
@@ -146,15 +140,16 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
146
140
throw new QueryException (" Unsafe query [$query ]. GORM cannot automatically escape a GString value when combined with ordinal parameters, so this query is potentially vulnerable to HQL injection attacks. Please embed the parameters within the GString so they can be safely escaped." );
147
141
}
148
142
149
- (D)execute({ Neo4jSession session ->
150
- QueryRunner boltSession = getStatementRunner(session)
143
+ execute({ Session session ->
144
+ Neo4jSession neo4jSession = (Neo4jSession ) session
145
+ QueryRunner boltSession = getStatementRunner(neo4jSession)
151
146
if (log. isDebugEnabled()) {
152
147
log. debug(" QUERY Cypher [$query ] for params [$params ]" )
153
148
}
154
149
155
150
Result result = Neo4jExtensions . execute(boltSession, query. toString(), (List<Object > )params. toList())
156
151
157
- def persister = session
152
+ def persister = neo4jSession
158
153
.getEntityPersister(persistentEntity)
159
154
160
155
def resultList = new Neo4jResultList (0 , 1 , (Iterator ) result, persister)
@@ -163,7 +158,7 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
163
158
}
164
159
return null
165
160
166
- } as SessionCallback )
161
+ } as SessionCallback<D> )
167
162
}
168
163
169
164
@Override
@@ -172,7 +167,7 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
172
167
adaptResults(result)
173
168
}
174
169
175
- protected List adaptResults (Result result ) {
170
+ protected static List adaptResults (Result result ) {
176
171
result. list({ Record r ->
177
172
def map = r. asMap()
178
173
if (map. size() == 1 ) {
@@ -191,8 +186,9 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
191
186
192
187
@Override
193
188
Integer executeUpdate (CharSequence query , Map params , Map args ) {
194
- execute({ Neo4jSession session ->
195
- QueryRunner boltSession = getStatementRunner(session)
189
+ execute({ Session session ->
190
+ Neo4jSession neo4jSession = (Neo4jSession ) session
191
+ QueryRunner boltSession = getStatementRunner(neo4jSession)
196
192
params = new LinkedHashMap (params)
197
193
String queryString
198
194
if (query instanceof GString ) {
@@ -201,7 +197,7 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
201
197
else {
202
198
queryString = query. toString()
203
199
}
204
- includeTenantIdIfNecessary(session , queryString, params)
200
+ includeTenantIdIfNecessary(neo4jSession , queryString, params)
205
201
if (log. isDebugEnabled()) {
206
202
log. debug(" UPDATE Cypher [$queryString ] for params [$params ]" )
207
203
}
@@ -243,10 +239,11 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
243
239
return null
244
240
}
245
241
246
- public <F extends GormEntity , T extends GormEntity > Relationship<F, T> findRelationship (F from , T to ) {
247
- (Relationship<F, T> )execute({ Neo4jSession session ->
248
- EntityPersister fromPersister = (EntityPersister ) session. getPersister(from)
249
- EntityPersister toPersister = (EntityPersister ) session. getPersister(to)
242
+ < F extends GormEntity , T extends GormEntity > Relationship<F, T> findRelationship(F from, T to) {
243
+ execute({ Session session ->
244
+ Neo4jSession neo4jSession = (Neo4jSession ) session
245
+ EntityPersister fromPersister = (EntityPersister ) neo4jSession. getPersister(from)
246
+ EntityPersister toPersister = (EntityPersister ) neo4jSession. getPersister(to)
250
247
GraphPersistentEntity fromEntity = (GraphPersistentEntity ) fromPersister?. getPersistentEntity()
251
248
GraphPersistentEntity toEntity = (GraphPersistentEntity ) toPersister?. getPersistentEntity()
252
249
if (fromEntity == null ) {
@@ -271,13 +268,14 @@ LIMIT 1"""
271
268
}
272
269
return relationship
273
270
274
- } as SessionCallback )
271
+ } as SessionCallback< Relationship<F, T> > )
275
272
}
276
273
277
- public <F extends GormEntity , T extends GormEntity > List<Relationship<F, T> > findRelationships (F from , T to , Map params = Collections . emptyMap()) {
278
- (List<Relationship<F, T> > )execute({ Neo4jSession session ->
279
- EntityPersister fromPersister = (EntityPersister ) session. getPersister(from)
280
- EntityPersister toPersister = (EntityPersister ) session. getPersister(to)
274
+ < F extends GormEntity , T extends GormEntity > List<Relationship<F, T> > findRelationships(F from, T to, Map params = Collections . emptyMap()) {
275
+ execute({ Session session ->
276
+ Neo4jSession neo4jSession = (Neo4jSession ) session
277
+ EntityPersister fromPersister = (EntityPersister ) neo4jSession. getPersister(from)
278
+ EntityPersister toPersister = (EntityPersister ) neo4jSession. getPersister(to)
281
279
GraphPersistentEntity fromEntity = (GraphPersistentEntity ) fromPersister?. getPersistentEntity()
282
280
GraphPersistentEntity toEntity = (GraphPersistentEntity ) toPersister?. getPersistentEntity()
283
281
if (fromEntity == null ) {
@@ -303,11 +301,11 @@ RETURN DISTINCT(r)$skip$limit"""
303
301
}
304
302
return rels
305
303
306
- } as SessionCallback )
304
+ } as SessionCallback< List< Relationship<F, T> > > )
307
305
}
308
306
309
- public <F extends GormEntity , T extends GormEntity > List<Relationship<F, T> > findRelationships (Class<F> from , Class<T> to , Map params = Collections . emptyMap()) {
310
- ( List< Relationship<F, T> > ) execute({ Neo4jSession session ->
307
+ < F extends GormEntity , T extends GormEntity > List<Relationship<F, T> > findRelationships(Class<F> from, Class<T> to, Map params = Collections . emptyMap()) {
308
+ execute({ Session session ->
311
309
Neo4jEntityPersister fromPersister = (Neo4jEntityPersister ) session. getPersister(from)
312
310
Neo4jEntityPersister toPersister = (Neo4jEntityPersister ) session. getPersister(to)
313
311
GraphPersistentEntity fromEntity = (GraphPersistentEntity ) fromPersister?. getPersistentEntity()
@@ -340,11 +338,11 @@ RETURN DISTINCT(r), from, to$skip$limit"""
340
338
}
341
339
return rels
342
340
343
- } as SessionCallback )
341
+ } as SessionCallback< List< Relationship<F, T> > > )
344
342
}
345
343
346
- public <F, T> Path<F, T> findShortestPath (F from , T to , int maxDistance = 10 ) {
347
- ( Path<F, T> ) execute({ Neo4jSession session ->
344
+ < F, T> Path<F, T> findShortestPath(F from, T to, int maxDistance = 10 ) {
345
+ execute({ Session session ->
348
346
EntityPersister fromPersister = (EntityPersister ) session. getPersister(from)
349
347
EntityPersister toPersister = (EntityPersister ) session. getPersister(to)
350
348
GraphPersistentEntity fromEntity = (GraphPersistentEntity ) fromPersister?. getPersistentEntity()
@@ -378,7 +376,7 @@ RETURN DISTINCT(r), from, to$skip$limit"""
378
376
}
379
377
return null
380
378
381
- } as SessionCallback )
379
+ } as SessionCallback< Path<F, T> > )
382
380
}
383
381
/**
384
382
* perform a cypher query
@@ -391,7 +389,8 @@ RETURN DISTINCT(r), from, to$skip$limit"""
391
389
throw new QueryException (" Unsafe query [$query ]. GORM cannot automatically escape a GString value when combined with ordinal parameters, so this query is potentially vulnerable to HQL injection attacks. Please embed the parameters within the GString so they can be safely escaped." );
392
390
}
393
391
394
- execute({ Neo4jSession session ->
392
+ execute({ Session session ->
393
+ Neo4jSession neo4jSession = (Neo4jSession ) session
395
394
Map paramsMap = new LinkedHashMap ()
396
395
int i = 0
397
396
for (p in params) {
@@ -402,8 +401,8 @@ RETURN DISTINCT(r), from, to$skip$limit"""
402
401
log. debug(" QUERY Cypher [$queryString ] for params [$params ]" )
403
402
}
404
403
405
- includeTenantIdIfNecessary(session , queryString, (Map )paramsMap)
406
- QueryRunner boltSession = getStatementRunner(session )
404
+ includeTenantIdIfNecessary(neo4jSession , queryString, (Map )paramsMap)
405
+ QueryRunner boltSession = getStatementRunner(neo4jSession )
407
406
boltSession. run(queryString, paramsMap)
408
407
} as SessionCallback<Result > )
409
408
}
@@ -415,8 +414,9 @@ RETURN DISTINCT(r), from, to$skip$limit"""
415
414
* @return
416
415
*/
417
416
Result cypherStatic (CharSequence query , Map params ) {
418
- execute({ Neo4jSession session ->
419
- QueryRunner boltSession = getStatementRunner(session)
417
+ execute({ Session session ->
418
+ Neo4jSession neo4jSession = (Neo4jSession ) session
419
+ QueryRunner boltSession = getStatementRunner(neo4jSession)
420
420
params = new LinkedHashMap (params)
421
421
String queryString
422
422
if (query instanceof GString ) {
@@ -425,7 +425,7 @@ RETURN DISTINCT(r), from, to$skip$limit"""
425
425
else {
426
426
queryString = query. toString()
427
427
}
428
- includeTenantIdIfNecessary(session , queryString, params)
428
+ includeTenantIdIfNecessary(neo4jSession , queryString, params)
429
429
if (log. isDebugEnabled()) {
430
430
log. debug(" QUERY Cypher [$queryString ] for params [$params ]" )
431
431
}
@@ -442,7 +442,8 @@ RETURN DISTINCT(r), from, to$skip$limit"""
442
442
* @return
443
443
*/
444
444
Result cypherStatic (CharSequence query ) {
445
- execute({ Neo4jSession session ->
445
+ execute({ Session session ->
446
+ Neo4jSession neo4jSession = (Neo4jSession ) session
446
447
Map<String , ?> params = [:]
447
448
String queryString
448
449
if (query instanceof GString ) {
@@ -451,13 +452,13 @@ RETURN DISTINCT(r), from, to$skip$limit"""
451
452
else {
452
453
queryString = query. toString()
453
454
}
454
- if (persistentEntity. isMultiTenant() && session . getDatastore(). multiTenancyMode == MultiTenancySettings.MultiTenancyMode . DISCRIMINATOR ) {
455
+ if (persistentEntity. isMultiTenant() && neo4jSession . getDatastore(). multiTenancyMode == MultiTenancySettings.MultiTenancyMode . DISCRIMINATOR ) {
455
456
if (! queryString. contains(" \$ tenantId" )) {
456
457
throw new TenantNotFoundException (" Query does not specify a tenant id, but multi tenant mode is DISCRIMINATOR!" )
457
458
} else {
458
459
Map<String ,Object > paramsMap = new LinkedHashMap<> ()
459
460
paramsMap. put(GormProperties . TENANT_IDENTITY , Tenants . currentId(Neo4jDatastore ))
460
- QueryRunner boltSession = getStatementRunner(session )
461
+ QueryRunner boltSession = getStatementRunner(neo4jSession )
461
462
if (log. isDebugEnabled()) {
462
463
log. debug(" QUERY Cypher [$queryString ] for params [$paramsMap ]" )
463
464
}
@@ -466,7 +467,7 @@ RETURN DISTINCT(r), from, to$skip$limit"""
466
467
}
467
468
}
468
469
else {
469
- QueryRunner boltSession = getStatementRunner(session )
470
+ QueryRunner boltSession = getStatementRunner(neo4jSession )
470
471
if (log. isDebugEnabled()) {
471
472
log. debug(" QUERY Cypher [$queryString ]" )
472
473
}
@@ -505,7 +506,7 @@ RETURN DISTINCT(r), from, to$skip$limit"""
505
506
return sqlString. toString()
506
507
}
507
508
508
- private QueryRunner getStatementRunner (Neo4jSession session ) {
509
+ private static QueryRunner getStatementRunner (Neo4jSession session ) {
509
510
return session. hasTransaction() ? session. getTransaction(). getNativeTransaction() : session. getNativeInterface()
510
511
}
511
512
@@ -518,6 +519,4 @@ RETURN DISTINCT(r), from, to$skip$limit"""
518
519
}
519
520
}
520
521
}
521
-
522
-
523
- }
522
+ }
0 commit comments