query splitter refactor

This commit is contained in:
Jan Prochazka
2021-06-03 11:27:49 +02:00
parent a76e742ce6
commit 0c48a5ee09
26 changed files with 203 additions and 172 deletions

View File

@@ -32,6 +32,7 @@
"devDependencies": {
"dbgate-tools": "^4.1.1",
"dbgate-plugin-tools": "^1.0.4",
"dbgate-query-splitter": "^4.1.1",
"byline": "^5.0.0",
"sql-query-identifier": "^2.1.0",
"webpack": "^4.42.0",

View File

@@ -2,7 +2,7 @@ const _ = require('lodash');
const stream = require('stream');
const driverBase = require('../frontend/driver');
const Analyser = require('./Analyser');
const { identify } = require('sql-query-identifier');
const { splitQuery, sqliteSplitterOptions } = require('dbgate-query-splitter');
const { createBulkInsertStreamBase, makeUniqueColumnNames } = require('dbgate-tools');
let Database;
@@ -82,13 +82,13 @@ const driver = {
}
},
async stream(client, sql, options) {
const sqlSplitted = identify(sql, { dialect: 'sqlite', strict: false });
const sqlSplitted = splitQuery(sql, sqliteSplitterOptions);
const rowCounter = { count: 0, date: null };
const inTransaction = client.transaction(() => {
for (const sqlItem of sqlSplitted) {
runStreamItem(client, sqlItem.text, options, rowCounter);
runStreamItem(client, sqlItem, options, rowCounter);
}
if (rowCounter.date) {
@@ -117,6 +117,16 @@ const driver = {
options.done();
// return stream;
},
async script(client, sql) {
const inTransaction = client.transaction(() => {
for (const sqlItem of splitQuery(sql, this.getQuerySplitterOptions('script'))) {
const stmt = client.prepare(sqlItem);
stmt.run();
}
});
inTransaction();
},
async readQueryTask(stmt, pass) {
// let sent = 0;
for (const row of stmt.iterate()) {

View File

@@ -1,5 +1,6 @@
const { driverBase } = global.DBGATE_TOOLS;
const Dumper = require('./Dumper');
const { sqliteSplitterOptions, noSplitSplitterOptions } = require('dbgate-query-splitter/lib/options');
function getDatabaseFileLabel(databaseFile) {
if (!databaseFile) return databaseFile;
@@ -34,6 +35,7 @@ const driver = {
singleDatabase: true,
defaultDatabase: getDatabaseFileLabel(connection.databaseFile),
}),
getQuerySplitterOptions: (usage) => (usage == 'stream' ? noSplitSplitterOptions : sqliteSplitterOptions),
// isFileDatabase: true,
isElectronOnly: true,
};