Skip to content

Commit 19106c2

Browse files
Treat composite dbs as system database (#1856)
* treat composite dbs as system database * fix unit tests
1 parent a81427a commit 19106c2

File tree

6 files changed

+53
-26
lines changed

6 files changed

+53
-26
lines changed

src/shared/modules/commands/helpers/params.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('commandsDuck params helper', () => {
3434

3535
// When
3636
return params
37-
.handleParamsCommand(action, put)
37+
.handleParamsCommand(action, put, false)
3838
.then(() => {
3939
throw Error('THIS SHOULD NEVER HAPPEN')
4040
})
@@ -49,7 +49,7 @@ describe('commandsDuck params helper', () => {
4949
const put = jest.fn()
5050

5151
// When
52-
const p = params.handleParamsCommand(action, put)
52+
const p = params.handleParamsCommand(action, put, false)
5353

5454
// Then
5555
return p.then(res => {
@@ -63,7 +63,7 @@ describe('commandsDuck params helper', () => {
6363
const put = jest.fn()
6464

6565
// When
66-
const p = params.handleParamsCommand(action, put)
66+
const p = params.handleParamsCommand(action, put, false)
6767

6868
// Then
6969
return p.then(res => {
@@ -77,7 +77,7 @@ describe('commandsDuck params helper', () => {
7777
const put = jest.fn()
7878

7979
// When
80-
const p = params.handleParamsCommand(action, put)
80+
const p = params.handleParamsCommand(action, put, false)
8181

8282
// Then
8383
return p.then(res => {
@@ -91,7 +91,7 @@ describe('commandsDuck params helper', () => {
9191
const put = jest.fn()
9292

9393
// When
94-
const p = params.handleParamsCommand(action, put)
94+
const p = params.handleParamsCommand(action, put, false)
9595

9696
// Then
9797
return p.then(res => {
@@ -105,7 +105,7 @@ describe('commandsDuck params helper', () => {
105105
const put = jest.fn()
106106

107107
// When
108-
const p = params.handleParamsCommand(action, put)
108+
const p = params.handleParamsCommand(action, put, false)
109109

110110
// Then
111111
return p.then(res => {

src/shared/modules/commands/helpers/params.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import jsonic from 'jsonic'
2222
import { collectLambdaValues, parseLambdaStatement } from './lambdas'
2323
import { splitStringOnFirst } from 'services/commandUtils'
2424
import { replace, update } from 'shared/modules/params/paramsDuck'
25-
import { SYSTEM_DB } from 'shared/modules/dbMeta/dbMetaDuck'
2625

2726
export const extractParams = (param: string) => {
2827
// early bail, now handled by parser
@@ -79,13 +78,15 @@ export const getParamName = (input: any) => {
7978
export const handleParamsCommand = async (
8079
action: any,
8180
put: any,
82-
targetDb?: string | null
81+
onUnsupportedDatabase: boolean
8382
): Promise<{
8483
result: any
8584
type: string
8685
}> => {
87-
if (targetDb === SYSTEM_DB) {
88-
throw new Error('Parameters cannot be declared when using system database.')
86+
if (onUnsupportedDatabase) {
87+
throw new Error(
88+
'Parameters cannot be declared when using system or composite database.'
89+
)
8990
}
9091
const strippedCmd = action.cmd.substr(1)
9192
const parts = splitStringOnFirst(strippedCmd, /\s/)

src/shared/modules/dbMeta/dbMetaDuck.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ export type Database = {
175175
default: boolean
176176
home?: boolean // introduced in neo4j 4.3
177177
aliases?: string[] // introduced in neo4j 4.4
178+
type?: 'system' | 'composite' | 'standard' // introduced in neo4j 5
178179
status: string
179180
}
180181

src/shared/modules/dbMeta/dbMetaEpics.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ import {
8686
import { isInt, Record } from 'neo4j-driver'
8787
import semver, { gte, SemVer } from 'semver'
8888
import { triggerCredentialsTimeout } from '../credentialsPolicy/credentialsPolicyDuck'
89+
import {
90+
isSystemOrCompositeDb,
91+
getCurrentDatabase
92+
} from 'shared/utils/selectors'
8993
getCountAutomaticRefreshEnabled
9094
async function databaseList(store: any) {
9195
try {
@@ -120,10 +124,10 @@ async function databaseList(store: any) {
120124
}
121125

122126
async function getLabelsAndTypes(store: any) {
123-
const db = getUseDb(store.getState())
127+
const db = getCurrentDatabase(store.getState())
124128

125-
// System db, do nothing
126-
if (db === SYSTEM_DB) {
129+
// System or composite db, do nothing
130+
if (db && isSystemOrCompositeDb(db)) {
127131
return
128132
}
129133

@@ -159,10 +163,10 @@ async function getLabelsAndTypes(store: any) {
159163
}
160164

161165
async function getNodeAndRelationshipCounts(store: any) {
162-
const db = getUseDb(store.getState())
166+
const db = getCurrentDatabase(store.getState())
163167

164-
// System db, do nothing
165-
if (db === SYSTEM_DB) {
168+
// System or composite db, do nothing
169+
if (db && isSystemOrCompositeDb(db)) {
166170
return
167171
}
168172

src/shared/services/commandInterpreterHelper.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ import {
7575
findDatabaseByNameOrAlias,
7676
getAvailableSettings,
7777
getDatabases,
78-
getRemoteContentHostnameAllowlist,
79-
SYSTEM_DB
78+
getRemoteContentHostnameAllowlist
8079
} from 'shared/modules/dbMeta/dbMetaDuck'
8180
import { getUserCapabilities } from 'shared/modules/features/featuresDuck'
8281
import * as frames from 'shared/modules/frames/framesDuck'
@@ -102,6 +101,10 @@ import {
102101
} from 'shared/services/bolt/txMetadata'
103102
import { objToCss, parseGrass } from 'shared/services/grassUtils'
104103
import { URL } from 'whatwg-url'
104+
import {
105+
getCurrentDatabase,
106+
isSystemOrCompositeDb
107+
} from 'shared/utils/selectors'
105108

106109
const PLAY_FRAME_TYPES = ['play', 'play-remote']
107110

@@ -150,7 +153,9 @@ const availableCommands = [
150153
name: 'set-params',
151154
match: (cmd: any) => /^params?\s/.test(cmd),
152155
exec(action: any, put: any, store: any) {
153-
return handleParamsCommand(action, put, getUseDb(store.getState()))
156+
const currDb = getCurrentDatabase(store.getState())
157+
const onUnsupportedDb = Boolean(currDb && isSystemOrCompositeDb(currDb))
158+
return handleParamsCommand(action, put, onUnsupportedDb)
154159
.then(res => {
155160
const params =
156161
res.type === 'param' ? res.result : getParams(store.getState())
@@ -350,15 +355,15 @@ const availableCommands = [
350355
name: 'sysinfo',
351356
match: (cmd: any) => /^sysinfo$/.test(cmd),
352357
exec(action: any, put: any, store: any) {
353-
const useDb = getUseDb(store.getState())
354-
if (useDb === SYSTEM_DB) {
358+
const db = getCurrentDatabase(store.getState())
359+
if (db && isSystemOrCompositeDb(db)) {
355360
put(
356361
frames.add({
357362
useDb,
358363
...action,
359364
type: 'error',
360365
error: UnsupportedError(
361-
'The :sysinfo command is not supported while using the system database.'
366+
'The :sysinfo command is not supported while using the system or a composite database.'
362367
)
363368
})
364369
)

src/shared/utils/selectors.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1-
import semver from 'semver'
2-
31
import { GlobalState } from 'shared/globalState'
42
import { inDesktop } from 'shared/modules/app/appDuck'
53
import {
4+
getUseDb,
65
isConnected,
7-
isConnectedAuraHost
6+
isConnectedAuraHost,
7+
useDb
88
} from 'shared/modules/connections/connectionsDuck'
99
import {
10+
Database,
11+
findDatabaseByNameOrAlias,
1012
getAllowOutgoingConnections,
1113
getClientsAllowTelemetry,
1214
isServerConfigDone,
13-
shouldAllowOutgoingConnections
15+
shouldAllowOutgoingConnections,
16+
SYSTEM_DB
1417
} from 'shared/modules/dbMeta/dbMetaDuck'
1518
import {
1619
getAllowCrashReports,
@@ -22,6 +25,19 @@ import {
2225
getAllowUserStatsInDesktop
2326
} from 'shared/modules/udc/udcDuck'
2427

28+
export function getCurrentDatabase(state: GlobalState): Database | null {
29+
const dbName = getUseDb(state)
30+
if (dbName) {
31+
return findDatabaseByNameOrAlias(state, dbName) ?? null
32+
}
33+
34+
return null
35+
}
36+
37+
export function isSystemOrCompositeDb(db: Database): boolean {
38+
return db?.name === SYSTEM_DB || db?.type === 'composite'
39+
}
40+
2541
export type TelemetrySettingSource =
2642
| 'AURA'
2743
| 'BROWSER_SETTING'

0 commit comments

Comments
 (0)