@@ -2,6 +2,7 @@ import neo4j from 'neo4j'
2
2
import ResultObserver from './result-observer.js'
3
3
import { cypherToNative , nativeToCypher } from './cypher-native-binders.js'
4
4
import { shouldRunTest } from './skipped-tests'
5
+ const USE_ASYNC = true
5
6
6
7
export function NewDriver ( context , data , { writeResponse } ) {
7
8
const {
@@ -89,49 +90,89 @@ export function SessionRun (context, data, wire) {
89
90
. catch ( _ => null )
90
91
. then ( _ => {
91
92
const result = session . run ( cypher , params , { metadata, timeout } )
92
- const resultObserver = new ResultObserver ( { sessionId, result } )
93
- result . subscribe ( resultObserver )
94
- const id = context . addResultObserver ( resultObserver )
93
+ let id
94
+ if ( USE_ASYNC ) {
95
+ id = context . addResult ( result )
96
+ } else {
97
+ const resultObserver = new ResultObserver ( { sessionId, result } )
98
+ result . subscribe ( resultObserver )
99
+ id = context . addResultObserver ( resultObserver )
100
+ }
95
101
wire . writeResponse ( 'Result' , { id } )
96
102
} )
97
103
}
98
104
99
105
export function ResultNext ( context , data , wire ) {
100
106
const { resultId } = data
101
- const resultObserver = context . getResultObserver ( resultId )
102
- const nextPromise = resultObserver . next ( )
103
- nextPromise
104
- . then ( rec => {
105
- if ( rec ) {
106
- const values = Array . from ( rec . values ( ) ) . map ( nativeToCypher )
107
+ if ( USE_ASYNC ) {
108
+ const result = context . getResult ( resultId )
109
+ if ( ! ( "recordIt" in result ) ) {
110
+ result . recordIt = result . ayncInterator ( )
111
+ }
112
+ result . recordIt . next ( ) . then ( ( { value, done } ) => {
113
+ if ( done ) {
114
+ wire . writeResponse ( 'NullRecord' , null )
115
+ } else {
116
+ const values = Array . from ( value . values ( ) ) . map ( nativeToCypher )
107
117
wire . writeResponse ( 'Record' , {
108
118
values : values
109
119
} )
110
- } else {
111
- wire . writeResponse ( 'NullRecord' , null )
112
120
}
113
- } )
114
- . catch ( e => {
121
+ } ) . catch ( e => {
115
122
console . log ( 'got some err: ' + JSON . stringify ( e ) )
116
123
wire . writeError ( e )
117
- } )
124
+ } ) ;
125
+ } else {
126
+ const resultObserver = context . getResultObserver ( resultId )
127
+ const nextPromise = resultObserver . next ( )
128
+ nextPromise
129
+ . then ( rec => {
130
+ if ( rec ) {
131
+ const values = Array . from ( rec . values ( ) ) . map ( nativeToCypher )
132
+ wire . writeResponse ( 'Record' , {
133
+ values : values
134
+ } )
135
+ } else {
136
+ wire . writeResponse ( 'NullRecord' , null )
137
+ }
138
+ } )
139
+ . catch ( e => {
140
+ console . log ( 'got some err: ' + JSON . stringify ( e ) )
141
+ wire . writeError ( e )
142
+ } )
143
+ }
144
+
118
145
}
119
146
120
147
export function ResultConsume ( context , data , wire ) {
121
148
const { resultId } = data
122
- const resultObserver = context . getResultObserver ( resultId )
123
- resultObserver
124
- . completitionPromise ( )
125
- . then ( summary => {
149
+ if ( USE_ASYNC ) {
150
+ const result = context . getResult ( resultId )
151
+ result . summary ( ) . then ( summary => {
152
+ console . log ( summary ) ;
126
153
wire . writeResponse ( 'Summary' , {
127
154
...summary ,
128
155
serverInfo : {
129
156
agent : summary . server . agent ,
130
- protocolVersion : summary . server . protocolVersion . toFixed ( 1 )
157
+ protocolVersion : summary . server . protocolVersion ? summary . server . protocolVersion . toFixed ( 1 ) : 0
131
158
}
132
159
} )
133
- } )
134
- . catch ( e => wire . writeError ( e ) )
160
+ } ) . catch ( e => wire . writeError ( e ) )
161
+ } else {
162
+ const resultObserver = context . getResultObserver ( resultId )
163
+ resultObserver
164
+ . completitionPromise ( )
165
+ . then ( summary => {
166
+ wire . writeResponse ( 'Summary' , {
167
+ ...summary ,
168
+ serverInfo : {
169
+ agent : summary . server . agent ,
170
+ protocolVersion : summary . server . protocolVersion . toFixed ( 1 )
171
+ }
172
+ } )
173
+ } )
174
+ . catch ( e => wire . writeError ( e ) )
175
+ }
135
176
}
136
177
137
178
export function SessionReadTransaction ( context , data , wire ) {
@@ -158,9 +199,15 @@ export function TransactionRun (context, data, wire) {
158
199
}
159
200
}
160
201
const result = tx . tx . run ( cypher , params )
161
- const resultObserver = new ResultObserver ( { result } )
162
- result . subscribe ( resultObserver )
163
- const id = context . addResultObserver ( resultObserver )
202
+
203
+ let id
204
+ if ( USE_ASYNC ) {
205
+ id = context . addResult ( result )
206
+ } else {
207
+ const resultObserver = new ResultObserver ( { result } )
208
+ result . subscribe ( resultObserver )
209
+ id = context . addResultObserver ( resultObserver )
210
+ }
164
211
wire . writeResponse ( 'Result' , { id } )
165
212
}
166
213
0 commit comments