diff --git a/packages/core/src/internal/bookmark.ts b/packages/core/src/internal/bookmark.ts index 085718f76..059182576 100644 --- a/packages/core/src/internal/bookmark.ts +++ b/packages/core/src/internal/bookmark.ts @@ -79,7 +79,7 @@ const EMPTY_BOOKMARK = new Bookmark(null) * @return {string[]} value converted to an array. */ function asStringArray( - value?: string | string[] | Array | null + value?: string | (string | undefined)[] | Array | null ): string[] { if (!value) { return [] diff --git a/packages/core/src/session.ts b/packages/core/src/session.ts index 2597a140c..9e94037dd 100644 --- a/packages/core/src/session.ts +++ b/packages/core/src/session.ts @@ -55,7 +55,8 @@ class Session { private _writeConnectionHolder: ConnectionHolder private _open: boolean private _hasTx: boolean - private _lastBookmark: Bookmark + private _bookmarkIn: Bookmark + private _bookmarkOut?: string private _transactionExecutor: TransactionExecutor private _impersonatedUser?: string private _onComplete: (meta: any) => void @@ -117,7 +118,7 @@ class Session { this._open = true this._hasTx = false this._impersonatedUser = impersonatedUser - this._lastBookmark = bookmark || Bookmark.empty() + this._bookmarkIn = bookmark || Bookmark.empty() this._transactionExecutor = _createTransactionExecutor(config) this._onComplete = this._onCompleteCallback.bind(this) this._databaseNameResolved = this._database !== '' @@ -150,7 +151,7 @@ class Session { return this._run(validatedQuery, params, connection => { this._assertSessionIsOpen() return (connection as Connection).protocol().run(validatedQuery, params, { - bookmark: this._lastBookmark, + bookmark: this._bookmarkIn, txConfig: autoCommitTxConfig, mode: this._mode, database: this._database, @@ -271,7 +272,7 @@ class Session { reactive: this._reactive, fetchSize: this._fetchSize }) - tx._begin(this._lastBookmark, txConfig) + tx._begin(this._bookmarkIn, txConfig) return tx } @@ -296,10 +297,10 @@ class Session { /** * Return the bookmark received following the last completed {@link Transaction}. * - * @return {string[]} A reference to a previous transaction. + * @return {string | undefined} A reference to a previous transaction if present. */ - lastBookmark(): string[] { - return this._lastBookmark.values() + lastBookmark(): string | undefined { + return this._bookmarkOut } /** @@ -360,7 +361,7 @@ class Session { /** * Sets the resolved database name in the session context. * @private - * @param {string|undefined} database The resolved database name + * @param {string | undefined} database The resolved database name * @returns {void} */ _onDatabaseNameResolved(database?: string): void { @@ -376,12 +377,13 @@ class Session { /** * Update value of the last bookmark. * @private - * @param {Bookmark} newBookmark - The new bookmark. + * @param {string | undefined} newBookmark - The new bookmark. * @returns {void} */ - _updateBookmark(newBookmark?: Bookmark): void { - if (newBookmark && !newBookmark.isEmpty()) { - this._lastBookmark = newBookmark + _updateBookmark(newBookmark?: string): void { + if (newBookmark !== undefined) { + this._bookmarkIn = new Bookmark(newBookmark) + this._bookmarkOut = newBookmark } } @@ -414,8 +416,8 @@ class Session { * @param {Object} meta Connection metadatada * @returns {void} */ - _onCompleteCallback(meta: { bookmark: string | string[] }): void { - this._updateBookmark(new Bookmark(meta.bookmark)) + _onCompleteCallback(meta: { bookmark: string }): void { + this._updateBookmark(meta.bookmark) } /** diff --git a/packages/core/src/transaction.ts b/packages/core/src/transaction.ts index f48a63a11..5f8f96587 100644 --- a/packages/core/src/transaction.ts +++ b/packages/core/src/transaction.ts @@ -46,7 +46,7 @@ class Transaction { private _reactive: boolean private _state: any private _onClose: () => void - private _onBookmark: (bookmark: Bookmark) => void + private _onBookmark: (bookmark: string | undefined ) => void private _onConnection: () => void private _onError: (error: Error) => Promise private _onComplete: (metadata: any) => void @@ -58,7 +58,7 @@ class Transaction { * @constructor * @param {ConnectionHolder} connectionHolder - the connection holder to get connection from. * @param {function()} onClose - Function to be called when transaction is committed or rolled back. - * @param {function(bookmark: Bookmark)} onBookmark callback invoked when new bookmark is produced. + * @param {function(bookmark: string | undefined)} onBookmark callback invoked when new bookmark is produced. * * @param {function()} onConnection - Function to be called when a connection is obtained to ensure the conneciton * is not yet released. * @param {boolean} reactive whether this transaction generates reactive streams @@ -76,7 +76,7 @@ class Transaction { }: { connectionHolder: ConnectionHolder onClose: () => void - onBookmark: (bookmark: Bookmark) => void + onBookmark: (bookmark: string | undefined) => void onConnection: () => void reactive: boolean fetchSize: number @@ -226,8 +226,8 @@ class Transaction { * @param {object} meta The meta with bookmark * @returns {void} */ - _onCompleteCallback(meta: { bookmark?: string | string[] }): void { - this._onBookmark(new Bookmark(meta.bookmark)) + _onCompleteCallback(meta: { bookmark?: string }): void { + this._onBookmark(meta.bookmark) } } diff --git a/packages/neo4j-driver/test/types/session.test.ts b/packages/neo4j-driver/test/types/session.test.ts index c3aaa107a..d593e30a1 100644 --- a/packages/neo4j-driver/test/types/session.test.ts +++ b/packages/neo4j-driver/test/types/session.test.ts @@ -55,7 +55,7 @@ const txConfig7: TransactionConfig = { } const tx1: Transaction = session.beginTransaction() -const bookmark: string[] = session.lastBookmark() +const bookmark: string | undefined = session.lastBookmark() const promise1: Promise = session.readTransaction((tx: Transaction) => { return 10 @@ -173,4 +173,4 @@ const promise6: Promise = session.writeTransaction( txConfig4 ) -const lastBookmark: string[] = session.lastBookmark() +const lastBookmark: string | undefined = session.lastBookmark() diff --git a/packages/testkit-backend/src/request-handlers.js b/packages/testkit-backend/src/request-handlers.js index a27e7526d..4d85e2d72 100644 --- a/packages/testkit-backend/src/request-handlers.js +++ b/packages/testkit-backend/src/request-handlers.js @@ -288,7 +288,11 @@ export function TransactionRollback (context, data, wire) { export function SessionLastBookmarks (context, data, wire) { const { sessionId } = data const session = context.getSession(sessionId) - const bookmarks = session.lastBookmark() + const bookmark = session.lastBookmark() + const bookmarks = [] + if (bookmark !== undefined) { + bookmarks.push(bookmark) + } wire.writeResponse('Bookmarks', { bookmarks }) }