Skip to content
This repository was archived by the owner on Mar 10, 2025. It is now read-only.

Commit d674cd1

Browse files
authored
Groovy 3.0.20 (Snapshot) compatability (#589)
* Update to Groovy 3.0.20-SNAPSHOT * Make project compatible with Groovy 3.0.20-SNAPSHOT * Revert to Groovy 3.0.11
1 parent 688e5a3 commit d674cd1

File tree

2 files changed

+64
-65
lines changed

2 files changed

+64
-65
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ subprojects { subproject ->
5757
maven { url "https://repo.grails.org/grails/core" }
5858
if(groovyVersion && groovyVersion.endsWith('-SNAPSHOT')) {
5959
maven {
60-
name 'JFrog OSS snapshot repo'
61-
url 'https://oss.jfrog.org/oss-snapshot-local/'
60+
name 'JFrog Groovy snapshot repo'
61+
url 'https://groovy.jfrog.io/artifactory/libs-snapshot-local/'
6262
}
6363
}
6464
}

grails-datastore-gorm-neo4j/src/main/groovy/org/grails/datastore/gorm/neo4j/api/Neo4jGormStaticApi.groovy

Lines changed: 62 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,23 @@ import groovy.util.logging.Slf4j
88
import org.grails.datastore.gorm.GormEntity
99
import org.grails.datastore.gorm.GormStaticApi
1010
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.*
1612
import org.grails.datastore.gorm.neo4j.collection.Neo4jPath
1713
import org.grails.datastore.gorm.neo4j.collection.Neo4jRelationship
1814
import org.grails.datastore.gorm.neo4j.collection.Neo4jResultList
1915
import org.grails.datastore.gorm.neo4j.engine.Neo4jEntityPersister
2016
import org.grails.datastore.gorm.neo4j.extensions.Neo4jExtensions
2117
import org.grails.datastore.mapping.core.Datastore
18+
import org.grails.datastore.mapping.core.Session
2219
import org.grails.datastore.mapping.core.SessionCallback
2320
import org.grails.datastore.mapping.engine.EntityPersister
2421
import org.grails.datastore.mapping.model.config.GormProperties
2522
import org.grails.datastore.mapping.multitenancy.MultiTenancySettings
2623
import org.grails.datastore.mapping.multitenancy.exceptions.TenantNotFoundException
2724
import org.grails.datastore.mapping.query.QueryException
28-
import org.neo4j.cypher.result.QueryResult
2925
import org.neo4j.driver.QueryRunner
3026
import org.neo4j.driver.Record
3127
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
3728
import org.neo4j.driver.types.Node
3829
import org.springframework.transaction.PlatformTransactionManager
3930

@@ -59,8 +50,9 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
5950

6051
@Override
6152
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)
6456
params = new LinkedHashMap(params)
6557
String queryString
6658
if(query instanceof GString) {
@@ -70,12 +62,12 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
7062
queryString = query.toString()
7163
}
7264

73-
includeTenantIdIfNecessary(session, queryString, params)
65+
includeTenantIdIfNecessary(neo4jSession, queryString, params)
7466
if(log.isDebugEnabled()) {
7567
log.debug("QUERY Cypher [$queryString] for params [$params]")
7668
}
7769
Result result = boltSession.run( queryString, (Map<String,Object>)params)
78-
def persister = session
70+
def persister = neo4jSession
7971
.getEntityPersister(persistentEntity)
8072

8173
if(result.hasNext()) {
@@ -84,7 +76,7 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
8476
else {
8577
return Collections.emptyList()
8678
}
87-
} as SessionCallback)
79+
} as SessionCallback<List<D>>)
8880
}
8981

9082

@@ -93,14 +85,15 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
9385
if(query instanceof GString) {
9486
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.");
9587
}
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)
9891
if(log.isDebugEnabled()) {
9992
log.debug("QUERY Cypher [$query] for params [$params]")
10093
}
10194

10295
Result result = Neo4jExtensions.execute(boltSession, query.toString(), (List<Object>)params.toList())
103-
def persister = session
96+
def persister = neo4jSession
10497
.getEntityPersister(persistentEntity)
10598

10699
if(result.hasNext()) {
@@ -109,13 +102,14 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
109102
else {
110103
return Collections.emptyList()
111104
}
112-
} as SessionCallback)
105+
} as SessionCallback<List<D>>)
113106
}
114107

115108
@Override
116109
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)
119113
params = new LinkedHashMap(params)
120114
String queryString
121115
if(query instanceof GString) {
@@ -124,20 +118,20 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
124118
else {
125119
queryString = query.toString()
126120
}
127-
includeTenantIdIfNecessary(session, queryString, params)
121+
includeTenantIdIfNecessary(neo4jSession, queryString, params)
128122
if(log.isDebugEnabled()) {
129123
log.debug("QUERY Cypher [$queryString] for params [$params]")
130124
}
131125

132126
Result result = boltSession.run( queryString, (Map<String,Object>)params)
133-
def persister = session
127+
def persister = neo4jSession
134128
.getEntityPersister(persistentEntity)
135129

136130
def resultList = new Neo4jResultList(0, 1, (Iterator) result, persister)
137131
if( !resultList.isEmpty() ) {
138132
return (D)resultList.get(0)
139133
}
140-
} as SessionCallback)
134+
} as SessionCallback<D>)
141135
}
142136

143137
@Override
@@ -146,15 +140,16 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
146140
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.");
147141
}
148142

149-
(D)execute({ Neo4jSession session ->
150-
QueryRunner boltSession = getStatementRunner(session)
143+
execute({ Session session ->
144+
Neo4jSession neo4jSession = (Neo4jSession) session
145+
QueryRunner boltSession = getStatementRunner(neo4jSession)
151146
if(log.isDebugEnabled()) {
152147
log.debug("QUERY Cypher [$query] for params [$params]")
153148
}
154149

155150
Result result = Neo4jExtensions.execute(boltSession, query.toString(), (List<Object>)params.toList())
156151

157-
def persister = session
152+
def persister = neo4jSession
158153
.getEntityPersister(persistentEntity)
159154

160155
def resultList = new Neo4jResultList(0, 1, (Iterator) result, persister)
@@ -163,7 +158,7 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
163158
}
164159
return null
165160

166-
} as SessionCallback)
161+
} as SessionCallback<D>)
167162
}
168163

169164
@Override
@@ -172,7 +167,7 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
172167
adaptResults(result)
173168
}
174169

175-
protected List adaptResults(Result result) {
170+
protected static List adaptResults(Result result) {
176171
result.list({ Record r ->
177172
def map = r.asMap()
178173
if (map.size() == 1) {
@@ -191,8 +186,9 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
191186

192187
@Override
193188
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)
196192
params = new LinkedHashMap(params)
197193
String queryString
198194
if(query instanceof GString) {
@@ -201,7 +197,7 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
201197
else {
202198
queryString = query.toString()
203199
}
204-
includeTenantIdIfNecessary(session, queryString, params)
200+
includeTenantIdIfNecessary(neo4jSession, queryString, params)
205201
if(log.isDebugEnabled()) {
206202
log.debug("UPDATE Cypher [$queryString] for params [$params]")
207203
}
@@ -243,10 +239,11 @@ class Neo4jGormStaticApi<D> extends GormStaticApi<D> {
243239
return null
244240
}
245241

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)
250247
GraphPersistentEntity fromEntity = (GraphPersistentEntity) fromPersister?.getPersistentEntity()
251248
GraphPersistentEntity toEntity = (GraphPersistentEntity) toPersister?.getPersistentEntity()
252249
if (fromEntity == null) {
@@ -271,13 +268,14 @@ LIMIT 1"""
271268
}
272269
return relationship
273270

274-
} as SessionCallback)
271+
} as SessionCallback<Relationship<F, T>>)
275272
}
276273

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)
281279
GraphPersistentEntity fromEntity = (GraphPersistentEntity) fromPersister?.getPersistentEntity()
282280
GraphPersistentEntity toEntity = (GraphPersistentEntity) toPersister?.getPersistentEntity()
283281
if (fromEntity == null) {
@@ -303,11 +301,11 @@ RETURN DISTINCT(r)$skip$limit"""
303301
}
304302
return rels
305303

306-
} as SessionCallback)
304+
} as SessionCallback<List<Relationship<F, T>>>)
307305
}
308306

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 ->
311309
Neo4jEntityPersister fromPersister = (Neo4jEntityPersister) session.getPersister(from)
312310
Neo4jEntityPersister toPersister = (Neo4jEntityPersister) session.getPersister(to)
313311
GraphPersistentEntity fromEntity = (GraphPersistentEntity) fromPersister?.getPersistentEntity()
@@ -340,11 +338,11 @@ RETURN DISTINCT(r), from, to$skip$limit"""
340338
}
341339
return rels
342340

343-
} as SessionCallback)
341+
} as SessionCallback<List<Relationship<F, T>>>)
344342
}
345343

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 ->
348346
EntityPersister fromPersister = (EntityPersister) session.getPersister(from)
349347
EntityPersister toPersister = (EntityPersister) session.getPersister(to)
350348
GraphPersistentEntity fromEntity = (GraphPersistentEntity) fromPersister?.getPersistentEntity()
@@ -378,7 +376,7 @@ RETURN DISTINCT(r), from, to$skip$limit"""
378376
}
379377
return null
380378

381-
} as SessionCallback)
379+
} as SessionCallback<Path<F, T>>)
382380
}
383381
/**
384382
* perform a cypher query
@@ -391,7 +389,8 @@ RETURN DISTINCT(r), from, to$skip$limit"""
391389
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.");
392390
}
393391

394-
execute({ Neo4jSession session ->
392+
execute({ Session session ->
393+
Neo4jSession neo4jSession = (Neo4jSession) session
395394
Map paramsMap = new LinkedHashMap()
396395
int i = 0
397396
for(p in params) {
@@ -402,8 +401,8 @@ RETURN DISTINCT(r), from, to$skip$limit"""
402401
log.debug("QUERY Cypher [$queryString] for params [$params]")
403402
}
404403

405-
includeTenantIdIfNecessary(session, queryString, (Map)paramsMap)
406-
QueryRunner boltSession = getStatementRunner(session)
404+
includeTenantIdIfNecessary(neo4jSession, queryString, (Map)paramsMap)
405+
QueryRunner boltSession = getStatementRunner(neo4jSession)
407406
boltSession.run(queryString, paramsMap)
408407
} as SessionCallback<Result>)
409408
}
@@ -415,8 +414,9 @@ RETURN DISTINCT(r), from, to$skip$limit"""
415414
* @return
416415
*/
417416
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)
420420
params = new LinkedHashMap(params)
421421
String queryString
422422
if(query instanceof GString) {
@@ -425,7 +425,7 @@ RETURN DISTINCT(r), from, to$skip$limit"""
425425
else {
426426
queryString = query.toString()
427427
}
428-
includeTenantIdIfNecessary(session, queryString, params)
428+
includeTenantIdIfNecessary(neo4jSession, queryString, params)
429429
if(log.isDebugEnabled()) {
430430
log.debug("QUERY Cypher [$queryString] for params [$params]")
431431
}
@@ -442,7 +442,8 @@ RETURN DISTINCT(r), from, to$skip$limit"""
442442
* @return
443443
*/
444444
Result cypherStatic(CharSequence query) {
445-
execute({ Neo4jSession session ->
445+
execute({ Session session ->
446+
Neo4jSession neo4jSession = (Neo4jSession) session
446447
Map<String, ?> params = [:]
447448
String queryString
448449
if(query instanceof GString) {
@@ -451,13 +452,13 @@ RETURN DISTINCT(r), from, to$skip$limit"""
451452
else {
452453
queryString = query.toString()
453454
}
454-
if (persistentEntity.isMultiTenant() && session.getDatastore().multiTenancyMode == MultiTenancySettings.MultiTenancyMode.DISCRIMINATOR) {
455+
if (persistentEntity.isMultiTenant() && neo4jSession.getDatastore().multiTenancyMode == MultiTenancySettings.MultiTenancyMode.DISCRIMINATOR) {
455456
if (!queryString.contains("\$tenantId")) {
456457
throw new TenantNotFoundException("Query does not specify a tenant id, but multi tenant mode is DISCRIMINATOR!")
457458
} else {
458459
Map<String,Object> paramsMap = new LinkedHashMap<>()
459460
paramsMap.put(GormProperties.TENANT_IDENTITY, Tenants.currentId(Neo4jDatastore))
460-
QueryRunner boltSession = getStatementRunner(session)
461+
QueryRunner boltSession = getStatementRunner(neo4jSession)
461462
if(log.isDebugEnabled()) {
462463
log.debug("QUERY Cypher [$queryString] for params [$paramsMap]")
463464
}
@@ -466,7 +467,7 @@ RETURN DISTINCT(r), from, to$skip$limit"""
466467
}
467468
}
468469
else {
469-
QueryRunner boltSession = getStatementRunner(session)
470+
QueryRunner boltSession = getStatementRunner(neo4jSession)
470471
if(log.isDebugEnabled()) {
471472
log.debug("QUERY Cypher [$queryString]")
472473
}
@@ -505,7 +506,7 @@ RETURN DISTINCT(r), from, to$skip$limit"""
505506
return sqlString.toString()
506507
}
507508

508-
private QueryRunner getStatementRunner(Neo4jSession session) {
509+
private static QueryRunner getStatementRunner(Neo4jSession session) {
509510
return session.hasTransaction() ? session.getTransaction().getNativeTransaction() : session.getNativeInterface()
510511
}
511512

@@ -518,6 +519,4 @@ RETURN DISTINCT(r), from, to$skip$limit"""
518519
}
519520
}
520521
}
521-
522-
523-
}
522+
}

0 commit comments

Comments
 (0)