@@ -8,20 +8,79 @@ import (
88 "github.com/neo4j/neo4j-go-driver/v5/neo4j"
99)
1010
11+ func mapNeo4JToRepo (err * neo4j.Neo4jError ) RepoError {
12+ switch err .Code {
13+ case "Neo.ClientError.Statement.EntityNotFound" :
14+ return RepoError {Code : UnknownRepoError }
15+ case "Neo.ClientError.Schema.ConstraintValidationFailed" :
16+ return RepoError {Code : ValidationError }
17+ case "Neo.ClientError.Statement.ArgumentError" :
18+ return RepoError {Code : ValidationError }
19+ case "Neo.ClientError.Statement.InvalidArgument" :
20+ return RepoError {Code : ValidationError }
21+ case "Neo.ClientError.General.InvalidConfiguration" :
22+ return RepoError {Code : UnknownRepoError }
23+ case "Neo.ClientError.Statement.SyntaxError" :
24+ return RepoError {Code : ValidationError }
25+ case "Neo.ClientError.Transaction.InvalidOperation" :
26+ return RepoError {Code : UnknownRepoError }
27+ case "Neo.ClientError.Statement.ParameterError" :
28+ return RepoError {Code : ValidationError }
29+ case "Neo.ClientError.Security.Unauthorized" :
30+ return RepoError {Code : UnknownRepoError }
31+ case "Neo.ClientError.Statement.TypeError" :
32+ return RepoError {Code : ValidationError }
33+ case "Neo.ClientError.Statement.ValueError" :
34+ return RepoError {Code : ValidationError }
35+ case "Neo.ClientError.General.NotSupported" :
36+ return RepoError {Code : UnknownRepoError }
37+ case "Neo.ClientError.Statement.ArithmeticError" :
38+ return RepoError {Code : ValidationError }
39+ case "Neo.ClientError.Security.AuthenticationFailed" :
40+ return RepoError {Code : UnknownRepoError }
41+ case "Neo.ClientError.Security.AuthorizationExpired" :
42+ return RepoError {Code : UnknownRepoError }
43+ case "Neo.ClientError.Security.Forbidden" :
44+ return RepoError {Code : UnknownRepoError }
45+ case "Neo.ClientError.Transaction.LockClientStopped" :
46+ return RepoError {Code : UnknownRepoError }
47+ case "Neo.TransientError.General.DatabaseUnavailable" :
48+ return RepoError {Code : UnknownRepoError }
49+ case "Neo.ClientError.Transaction.InvalidState" :
50+ return RepoError {Code : UnknownRepoError }
51+ case "Neo.TransientError.Transaction.Terminated" :
52+ return RepoError {Code : UnknownRepoError }
53+ case "Neo.ClientError.Statement.NoSuchEntity" :
54+ return RepoError {Code : EmptyCollectionRepoError }
55+ default :
56+ return RepoError {Code : UnknownRepoError }
57+ }
58+ }
59+
1160func ExecuteReadWithDriver [T any ](ctx context.Context , tx neo4j.ManagedTransactionWorkT [T ]) (T , error ) {
1261 session := db .Driver .NewSession (ctx , neo4j.SessionConfig {})
1362 defer session .Close (ctx )
14- return neo4j .ExecuteRead (ctx , session , tx , func (config * neo4j.TransactionConfig ) {
63+ result , err := neo4j .ExecuteRead (ctx , session , tx , func (config * neo4j.TransactionConfig ) {
1564 config .Timeout = time .Second * 10
1665 })
66+ neo4jError , isNeo4jError := err .(* neo4j.Neo4jError )
67+ if isNeo4jError {
68+ return result , mapNeo4JToRepo (neo4jError )
69+ }
70+ return result , err
1771}
1872
1973func ExecuteWriteWithDriver [T any ](ctx context.Context , tx neo4j.ManagedTransactionWorkT [T ]) (T , error ) {
2074 session := db .Driver .NewSession (ctx , neo4j.SessionConfig {})
2175 defer session .Close (ctx )
22- return neo4j .ExecuteWrite (ctx , session , tx , func (config * neo4j.TransactionConfig ) {
76+ result , err := neo4j .ExecuteWrite (ctx , session , tx , func (config * neo4j.TransactionConfig ) {
2377 config .Timeout = time .Second * 10
2478 })
79+ neo4jError , isNeo4jError := err .(* neo4j.Neo4jError )
80+ if isNeo4jError {
81+ return result , mapNeo4JToRepo (neo4jError )
82+ }
83+ return result , err
2584}
2685
2786func NewQuery (data map [string ]any , query string ) QueryRunner {
0 commit comments