65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
|
|
import extendRBTree from './RedBlackTree'
|
|
|
|
export default function extend (Y) {
|
|
extendRBTree(Y)
|
|
|
|
class Transaction extends Y.Transaction {
|
|
constructor (store) {
|
|
super(store)
|
|
this.store = store
|
|
this.ss = store.ss
|
|
this.os = store.os
|
|
this.ds = store.ds
|
|
}
|
|
}
|
|
var Store = Y.utils.RBTree
|
|
var BufferedStore = Y.utils.createSmallLookupBuffer(Store)
|
|
|
|
class Database extends Y.AbstractDatabase {
|
|
constructor (y, opts) {
|
|
super(y, opts)
|
|
this.os = new BufferedStore()
|
|
this.ds = new Store()
|
|
this.ss = new BufferedStore()
|
|
}
|
|
logTable () {
|
|
var self = this
|
|
self.requestTransaction(function () {
|
|
console.log('User: ', this.store.y.connector.userId, "==============================") // eslint-disable-line
|
|
console.log("State Set (SS):", this.getStateSet()) // eslint-disable-line
|
|
console.log("Operation Store (OS):") // eslint-disable-line
|
|
this.os.logTable() // eslint-disable-line
|
|
console.log("Deletion Store (DS):") //eslint-disable-line
|
|
this.ds.logTable() // eslint-disable-line
|
|
if (this.store.gc1.length > 0 || this.store.gc2.length > 0) {
|
|
console.warn('GC1|2 not empty!', this.store.gc1, this.store.gc2)
|
|
}
|
|
if (JSON.stringify(this.store.listenersById) !== '{}') {
|
|
console.warn('listenersById not empty!')
|
|
}
|
|
if (JSON.stringify(this.store.listenersByIdExecuteNow) !== '[]') {
|
|
console.warn('listenersByIdExecuteNow not empty!')
|
|
}
|
|
if (this.store.transactionInProgress) {
|
|
console.warn('Transaction still in progress!')
|
|
}
|
|
}, true)
|
|
}
|
|
transact (makeGen) {
|
|
const t = new Transaction(this)
|
|
while (makeGen != null) {
|
|
makeGen.call(t)
|
|
makeGen = this.getNextRequest()
|
|
}
|
|
}
|
|
destroy () {
|
|
super.destroy()
|
|
delete this.os
|
|
delete this.ss
|
|
delete this.ds
|
|
}
|
|
}
|
|
Y.memory = Database
|
|
}
|