Skip to content

Commit 9af4f7b

Browse files
author
Zhen Li
committed
Added missing system updates
Changed updates to a dictionary.
1 parent a17eee1 commit 9af4f7b

File tree

5 files changed

+140
-131
lines changed

5 files changed

+140
-131
lines changed

src/result-summary.js

Lines changed: 16 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -206,11 +206,13 @@ class StatementStatistics {
206206
constraintsAdded: 0,
207207
constraintsRemoved: 0
208208
}
209+
this._systemUpdates = 0
209210
Object.keys(statistics).forEach(index => {
210211
// To camelCase
211-
this._stats[index.replace(/(-\w)/g, m => m[1].toUpperCase())] = intValue(
212-
statistics[index]
213-
)
212+
const camelCaseIndex = index.replace(/(-\w)/g, m => m[1].toUpperCase())
213+
if (camelCaseIndex in this._stats) { this._stats[camelCaseIndex] = intValue(statistics[index]) } else if (camelCaseIndex === 'systemUpdates') {
214+
this._systemUpdates = intValue(statistics[index])
215+
}
214216
})
215217
}
216218

@@ -227,80 +229,26 @@ class StatementStatistics {
227229
}
228230

229231
/**
230-
* @return {Number} - Number of nodes created.
232+
* Returns the statement statistics updates in a dictionary.
233+
* @returns {*}
231234
*/
232-
nodesCreated () {
233-
return this._stats.nodesCreated
235+
updates () {
236+
return this._stats
234237
}
235238

236239
/**
237-
* @return {Number} - Number of nodes deleted.
240+
* Return true if the system database get updated, otherwise false
241+
* @returns {boolean} - If the system database get updated or not.
238242
*/
239-
nodesDeleted () {
240-
return this._stats.nodesDeleted
243+
containsSystemUpdates () {
244+
return this._systemUpdates > 0
241245
}
242246

243247
/**
244-
* @return {Number} - Number of relationships created.
248+
* @returns {number} - Number of system updates
245249
*/
246-
relationshipsCreated () {
247-
return this._stats.relationshipsCreated
248-
}
249-
250-
/**
251-
* @return {Number} - Number of nodes deleted.
252-
*/
253-
relationshipsDeleted () {
254-
return this._stats.relationshipsDeleted
255-
}
256-
257-
/**
258-
* @return {Number} - Number of properties set.
259-
*/
260-
propertiesSet () {
261-
return this._stats.propertiesSet
262-
}
263-
264-
/**
265-
* @return {Number} - Number of labels added.
266-
*/
267-
labelsAdded () {
268-
return this._stats.labelsAdded
269-
}
270-
271-
/**
272-
* @return {Number} - Number of labels removed.
273-
*/
274-
labelsRemoved () {
275-
return this._stats.labelsRemoved
276-
}
277-
278-
/**
279-
* @return {Number} - Number of indexes added.
280-
*/
281-
indexesAdded () {
282-
return this._stats.indexesAdded
283-
}
284-
285-
/**
286-
* @return {Number} - Number of indexes removed.
287-
*/
288-
indexesRemoved () {
289-
return this._stats.indexesRemoved
290-
}
291-
292-
/**
293-
* @return {Number} - Number of constraints added.
294-
*/
295-
constraintsAdded () {
296-
return this._stats.constraintsAdded
297-
}
298-
299-
/**
300-
* @return {Number} - Number of constraints removed.
301-
*/
302-
constraintsRemoved () {
303-
return this._stats.constraintsRemoved
250+
systemUpdates () {
251+
return this._systemUpdates
304252
}
305253
}
306254

test/rx/summary.test.js

Lines changed: 104 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,43 @@ describe('#integration-rx summary', () => {
201201
shouldReturnNotification(serverVersion, txc))
202202
})
203203

204+
describe('system', () => {
205+
let driver
206+
/** @type {RxSession} */
207+
let session
208+
/** @type {ServerVersion} */
209+
let serverVersion
210+
211+
beforeEach(async () => {
212+
driver = neo4j.driver('bolt://localhost', sharedNeo4j.authToken)
213+
session = driver.rxSession({ database: 'system' })
214+
//
215+
216+
const normalSession = driver.session()
217+
try {
218+
const result = await normalSession.run('MATCH (n) DETACH DELETE n')
219+
serverVersion = ServerVersion.fromString(result.summary.server.version)
220+
} finally {
221+
await normalSession.close()
222+
}
223+
224+
await dropConstraintsAndIndices(driver)
225+
})
226+
227+
afterEach(async () => {
228+
if (session) {
229+
await session.close().toPromise()
230+
}
231+
await driver.close()
232+
})
233+
234+
it('session should return summary with correct system updates for create', () =>
235+
shouldReturnSummaryWithSystemUpdates(serverVersion, session))
236+
237+
it('transaction should return summary with correct system updates for create', () =>
238+
shouldReturnSummaryWithSystemUpdates(serverVersion, session, true))
239+
})
240+
204241
/**
205242
* @param {ServerVersion} version
206243
* @param {RxSession|RxTransaction} runnable
@@ -269,6 +306,37 @@ describe('#integration-rx summary', () => {
269306
await verifyStatementType(runnable, 'CREATE (n) RETURN n', 'rw')
270307
}
271308

309+
/**
310+
* @param {ServerVersion} version
311+
* @param {RxSession} session
312+
* @param {boolean} useTransaction
313+
*/
314+
async function shouldReturnSummaryWithSystemUpdates (
315+
version,
316+
session,
317+
useTransaction = false
318+
) {
319+
if (version.compareTo(VERSION_4_0_0) < 0) {
320+
return
321+
}
322+
323+
let runnable = session
324+
if (useTransaction) {
325+
runnable = await session.beginTransaction().toPromise()
326+
}
327+
328+
try {
329+
await verifySystemUpdates(
330+
runnable,
331+
"CREATE USER foo SET PASSWORD 'bar'",
332+
{},
333+
1
334+
)
335+
} finally {
336+
await verifySystemUpdates(runnable, 'DROP USER foo', {}, 1)
337+
}
338+
}
339+
272340
/**
273341
* @param {ServerVersion} version
274342
* @param {RxSession|RxTransaction} runnable
@@ -281,7 +349,7 @@ describe('#integration-rx summary', () => {
281349
return
282350
}
283351

284-
await verifyCounters(
352+
await verifyUpdates(
285353
runnable,
286354
'CREATE (n:Label1 {id: $id1})-[:KNOWS]->(m:Label2 {id: $id2}) RETURN n, m',
287355
{ id1: 10, id2: 20 },
@@ -316,7 +384,7 @@ describe('#integration-rx summary', () => {
316384
// first create the to-be-deleted nodes
317385
await shouldReturnSummaryWithUpdateStatisticsForCreate(version, runnable)
318386

319-
await verifyCounters(
387+
await verifyUpdates(
320388
runnable,
321389
'MATCH (n:Label1)-[r:KNOWS]->(m:Label2) DELETE n, r',
322390
null,
@@ -348,7 +416,7 @@ describe('#integration-rx summary', () => {
348416
return
349417
}
350418

351-
await verifyCounters(runnable, 'CREATE INDEX on :Label(prop)', null, {
419+
await verifyUpdates(runnable, 'CREATE INDEX on :Label(prop)', null, {
352420
nodesCreated: 0,
353421
nodesDeleted: 0,
354422
relationshipsCreated: 0,
@@ -384,7 +452,7 @@ describe('#integration-rx summary', () => {
384452
await session.close()
385453
}
386454

387-
await verifyCounters(runnable, 'DROP INDEX on :Label(prop)', null, {
455+
await verifyUpdates(runnable, 'DROP INDEX on :Label(prop)', null, {
388456
nodesCreated: 0,
389457
nodesDeleted: 0,
390458
relationshipsCreated: 0,
@@ -411,7 +479,7 @@ describe('#integration-rx summary', () => {
411479
return
412480
}
413481

414-
await verifyCounters(
482+
await verifyUpdates(
415483
runnable,
416484
'CREATE CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE',
417485
null,
@@ -454,7 +522,7 @@ describe('#integration-rx summary', () => {
454522
await session.close()
455523
}
456524

457-
await verifyCounters(
525+
await verifyUpdates(
458526
runnable,
459527
'DROP CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE',
460528
null,
@@ -628,27 +696,42 @@ describe('#integration-rx summary', () => {
628696
* @param {RxSession|RxTransaction} runnable
629697
* @param {string} statement
630698
* @param {*} parameters
631-
* @param {*} counters
699+
* @param {*} stats
700+
*/
701+
async function verifyUpdates (runnable, statement, parameters, stats) {
702+
const summary = await runnable
703+
.run(statement, parameters)
704+
.summary()
705+
.toPromise()
706+
expect(summary).toBeDefined()
707+
expect(summary.counters.containsUpdates()).toBeTruthy()
708+
expect(summary.counters.updates()).toEqual(stats)
709+
expect(summary.counters.containsSystemUpdates()).toBeFalsy()
710+
}
711+
712+
/**
713+
*
714+
* @param {RxSession|RxTransaction} runnable
715+
* @param {string} statement
716+
* @param {*} parameters
717+
* @param {number} systemUpdates
718+
* @returns {Promise<void>}
632719
*/
633-
async function verifyCounters (runnable, statement, parameters, counters) {
720+
async function verifySystemUpdates (
721+
runnable,
722+
statement,
723+
parameters,
724+
systemUpdates
725+
) {
634726
const summary = await runnable
635727
.run(statement, parameters)
636728
.summary()
637729
.toPromise()
638730
expect(summary).toBeDefined()
639-
expect({
640-
nodesCreated: summary.counters.nodesCreated(),
641-
nodesDeleted: summary.counters.nodesDeleted(),
642-
relationshipsCreated: summary.counters.relationshipsCreated(),
643-
relationshipsDeleted: summary.counters.relationshipsDeleted(),
644-
propertiesSet: summary.counters.propertiesSet(),
645-
labelsAdded: summary.counters.labelsAdded(),
646-
labelsRemoved: summary.counters.labelsRemoved(),
647-
indexesAdded: summary.counters.indexesAdded(),
648-
indexesRemoved: summary.counters.indexesRemoved(),
649-
constraintsAdded: summary.counters.constraintsAdded(),
650-
constraintsRemoved: summary.counters.constraintsRemoved()
651-
}).toEqual(counters)
731+
732+
expect(summary.counters.containsSystemUpdates()).toBeTruthy()
733+
expect(summary.counters.systemUpdates()).toBe(systemUpdates)
734+
expect(summary.counters.containsUpdates()).toBeFalsy()
652735
}
653736

654737
async function dropConstraintsAndIndices (driver) {

test/summary.test.js

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -107,18 +107,20 @@ describe('#integration result summary', () => {
107107
expect(summary.resultConsumedAfter).toBeDefined()
108108
expect(summary.resultAvailableAfter).toBeDefined()
109109

110-
const counters = summary.counters
111-
expect(counters.nodesCreated()).toBe(1)
112-
expect(counters.nodesDeleted()).toBe(0)
113-
expect(counters.relationshipsCreated()).toBe(0)
114-
expect(counters.relationshipsDeleted()).toBe(0)
115-
expect(counters.propertiesSet()).toBe(1)
116-
expect(counters.labelsAdded()).toBe(1)
117-
expect(counters.labelsRemoved()).toBe(0)
118-
expect(counters.indexesAdded()).toBe(0)
119-
expect(counters.indexesRemoved()).toBe(0)
120-
expect(counters.constraintsAdded()).toBe(0)
121-
expect(counters.constraintsRemoved()).toBe(0)
110+
expect(summary.counters.containsUpdates()).toBe(true)
111+
const stats = summary.counters.updates()
112+
expect(stats.nodesCreated).toBe(1)
113+
expect(stats.nodesDeleted).toBe(0)
114+
expect(stats.relationshipsCreated).toBe(0)
115+
expect(stats.relationshipsDeleted).toBe(0)
116+
expect(stats.propertiesSet).toBe(1)
117+
expect(stats.labelsAdded).toBe(1)
118+
expect(stats.labelsRemoved).toBe(0)
119+
expect(stats.indexesAdded).toBe(0)
120+
expect(stats.indexesRemoved).toBe(0)
121+
expect(stats.constraintsAdded).toBe(0)
122+
expect(stats.constraintsRemoved).toBe(0)
123+
expect(summary.counters.containsSystemUpdates()).toBe(false)
122124
done()
123125
})
124126
}

test/types/result-summary.test.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,9 @@ const str: string = sum1.statementType
4040
const counters: StatementStatistic = sum1.counters
4141

4242
const containsUpdates: boolean = counters.containsUpdates()
43-
const nodesCreated: number = counters.nodesCreated()
44-
const nodesDeleted: number = counters.nodesDeleted()
45-
const relationshipsCreated: number = counters.relationshipsCreated()
46-
const relationshipsDeleted: number = counters.relationshipsDeleted()
47-
const propertiesSet: number = counters.propertiesSet()
48-
const labelsAdded: number = counters.labelsAdded()
49-
const labelsRemoved: number = counters.labelsRemoved()
50-
const indexesAdded: number = counters.indexesAdded()
51-
const indexesRemoved: number = counters.indexesRemoved()
52-
const constraintsAdded: number = counters.constraintsAdded()
53-
const constraintsRemoved: number = counters.constraintsRemoved()
43+
const containsSystemUpdates: boolean = counters.containsSystemUpdates()
44+
const systemUpdates: number = counters.systemUpdates()
45+
const updates: { [key: string]: number } = counters.updates()
5446

5547
const plan: Plan = sum1.plan
5648
const planOperatorType: string = plan.operatorType

types/result-summary.d.ts

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -55,27 +55,11 @@ declare interface ProfiledPlan {
5555
declare interface StatementStatistic {
5656
containsUpdates(): boolean
5757

58-
nodesCreated(): number
58+
containsSystemUpdates(): boolean
5959

60-
nodesDeleted(): number
60+
updates(): { [key: string]: number }
6161

62-
relationshipsCreated(): number
63-
64-
relationshipsDeleted(): number
65-
66-
propertiesSet(): number
67-
68-
labelsAdded(): number
69-
70-
labelsRemoved(): number
71-
72-
indexesAdded(): number
73-
74-
indexesRemoved(): number
75-
76-
constraintsAdded(): number
77-
78-
constraintsRemoved(): number
62+
systemUpdates(): number
7963
}
8064

8165
declare type NotificationPosition = {

0 commit comments

Comments
 (0)