mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-02 00:54:00 +00:00
This commit is contained in:
@@ -35,17 +35,16 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
readLine(jslid) {
|
readLine(readerInfo) {
|
||||||
if (!this.openedReaders[jslid]) return Promise.reject();
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const { reader } = this.openedReaders[jslid];
|
const { reader } = readerInfo;
|
||||||
if (!reader.hasNextLine()) {
|
if (!reader.hasNextLine()) {
|
||||||
resolve(null);
|
resolve(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
reader.nextLine((err, line) => {
|
reader.nextLine((err, line) => {
|
||||||
if (this.openedReaders[jslid].readedSchemaRow) this.openedReaders[jslid].readedDataRowCount += 1;
|
if (readerInfo.readedSchemaRow) readerInfo.readedDataRowCount += 1;
|
||||||
else this.openedReaders[jslid].readedSchemaRow = true;
|
else readerInfo.readedSchemaRow = true;
|
||||||
if (err) reject(err);
|
if (err) reject(err);
|
||||||
resolve(line);
|
resolve(line);
|
||||||
});
|
});
|
||||||
@@ -62,12 +61,14 @@ module.exports = {
|
|||||||
return new Promise((resolve, reject) =>
|
return new Promise((resolve, reject) =>
|
||||||
lineReader.open(file, (err, reader) => {
|
lineReader.open(file, (err, reader) => {
|
||||||
if (err) reject(err);
|
if (err) reject(err);
|
||||||
resolve();
|
const readerInfo = {
|
||||||
this.openedReaders[jslid] = {
|
|
||||||
reader,
|
reader,
|
||||||
readedDataRowCount: 0,
|
readedDataRowCount: 0,
|
||||||
readedSchemaRow: false,
|
readedSchemaRow: false,
|
||||||
|
isReading: true,
|
||||||
};
|
};
|
||||||
|
this.openedReaders[jslid] = readerInfo;
|
||||||
|
resolve(readerInfo);
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@@ -76,15 +77,18 @@ module.exports = {
|
|||||||
if (this.openedReaders[jslid] && this.openedReaders[jslid].readedDataRowCount > offset) {
|
if (this.openedReaders[jslid] && this.openedReaders[jslid].readedDataRowCount > offset) {
|
||||||
await this.closeReader(jslid);
|
await this.closeReader(jslid);
|
||||||
}
|
}
|
||||||
|
let readerInfo = this.openedReaders[jslid];
|
||||||
if (!this.openedReaders[jslid]) {
|
if (!this.openedReaders[jslid]) {
|
||||||
await this.openReader(jslid);
|
readerInfo = await this.openReader(jslid);
|
||||||
}
|
}
|
||||||
if (!this.openedReaders[jslid].readedSchemaRow) {
|
readerInfo.isReading = true;
|
||||||
await this.readLine(jslid); // skip structure
|
if (!readerInfo.readedSchemaRow) {
|
||||||
|
await this.readLine(readerInfo); // skip structure
|
||||||
}
|
}
|
||||||
while (this.openedReaders[jslid].readedDataRowCount < offset) {
|
while (readerInfo.readedDataRowCount < offset) {
|
||||||
await this.readLine(jslid);
|
await this.readLine(readerInfo);
|
||||||
}
|
}
|
||||||
|
return readerInfo;
|
||||||
},
|
},
|
||||||
|
|
||||||
getInfo_meta: 'get',
|
getInfo_meta: 'get',
|
||||||
@@ -97,13 +101,19 @@ module.exports = {
|
|||||||
|
|
||||||
getRows_meta: 'get',
|
getRows_meta: 'get',
|
||||||
async getRows({ jslid, offset, limit }) {
|
async getRows({ jslid, offset, limit }) {
|
||||||
await this.ensureReader(jslid, offset);
|
const readerInfo = await this.ensureReader(jslid, offset);
|
||||||
const res = [];
|
const res = [];
|
||||||
for (let i = 0; i < limit; i += 1) {
|
for (let i = 0; i < limit; i += 1) {
|
||||||
const line = await this.readLine(jslid);
|
const line = await this.readLine(readerInfo);
|
||||||
if (line == null) break;
|
if (line == null) break;
|
||||||
res.push(JSON.parse(line));
|
res.push(JSON.parse(line));
|
||||||
}
|
}
|
||||||
|
readerInfo.isReading = false;
|
||||||
|
if (readerInfo.closeAfterReadAndSendStats) {
|
||||||
|
await this.closeReader(jslid);
|
||||||
|
socket.emit(`jsldata-stats-${jslid}`, readerInfo.closeAfterReadAndSendStats);
|
||||||
|
readerInfo.closeAfterReadAndSendStats = null;
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -115,7 +125,12 @@ module.exports = {
|
|||||||
|
|
||||||
async notifyChangedStats(stats) {
|
async notifyChangedStats(stats) {
|
||||||
console.log('SENDING STATS', JSON.stringify(stats));
|
console.log('SENDING STATS', JSON.stringify(stats));
|
||||||
|
const readerInfo = this.openedReaders[stats.jslid];
|
||||||
|
if (readerInfo && readerInfo.isReading) {
|
||||||
|
readerInfo.closeAfterReadAndSendStats = stats;
|
||||||
|
} else {
|
||||||
await this.closeReader(stats.jslid);
|
await this.closeReader(stats.jslid);
|
||||||
socket.emit(`jsldata-stats-${stats.jslid}`, stats);
|
socket.emit(`jsldata-stats-${stats.jslid}`, stats);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -182,10 +182,11 @@ export default function QueryTab({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleKill = () => {
|
const handleKill = () => {
|
||||||
axios.post('sessions/cancel', {
|
axios.post('sessions/kill', {
|
||||||
sesid: sessionId,
|
sesid: sessionId,
|
||||||
});
|
});
|
||||||
setSessionId(null);
|
setSessionId(null);
|
||||||
|
setBusy(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleKeyDown = (data, hash, keyString, keyCode, event) => {
|
const handleKeyDown = (data, hash, keyString, keyCode, event) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user