diff --git a/plugins/dbgate-plugin-firebird/src/backend/driver.js b/plugins/dbgate-plugin-firebird/src/backend/driver.js index f0137ec7f..91ad915b7 100644 --- a/plugins/dbgate-plugin-firebird/src/backend/driver.js +++ b/plugins/dbgate-plugin-firebird/src/backend/driver.js @@ -1,5 +1,5 @@ const _ = require('lodash'); -const { splitQuery } = require('dbgate-query-splitter'); +const { splitQuery, firebirdSplitterOptions } = require('dbgate-query-splitter'); const stream = require('stream'); const driverBase = require('../frontend/driver'); const Analyser = require('./Analyser'); @@ -112,7 +112,7 @@ const driver = { async script(dbhan, sql, { useTransaction } = {}) { if (useTransaction) return this.runSqlInTransaction(dbhan, sql); - const sqlItems = splitQuery(sql, driver.sqlSplitterOptions); + const sqlItems = splitQuery(sql, firebirdSplitterOptions); for (const sqlItem of sqlItems) { await this.query(dbhan, sqlItem, { discardResult: true }); } @@ -183,7 +183,7 @@ const driver = { async runSqlInTransaction(dbhan, sql) { /** @type {Firebird.Transaction} */ let transactionPromise; - const sqlItems = splitQuery(sql, driver.sqlSplitterOptions); + const sqlItems = splitQuery(sql, firebirdSplitterOptions); try { transactionPromise = await new Promise((resolve, reject) => { diff --git a/plugins/dbgate-plugin-firebird/src/frontend/driver.js b/plugins/dbgate-plugin-firebird/src/frontend/driver.js index 55b50347e..b7ddcb2cb 100644 --- a/plugins/dbgate-plugin-firebird/src/frontend/driver.js +++ b/plugins/dbgate-plugin-firebird/src/frontend/driver.js @@ -1,5 +1,6 @@ const { driverBase } = global.DBGATE_PACKAGES['dbgate-tools']; const Dumper = require('./Dumper'); +const { firebirdSplitterOptions } = require('dbgate-query-splitter/lib/options'); /** @type {import('dbgate-types').SqlDialect} */ const dialect = { @@ -44,43 +45,17 @@ const dialect = { disableRenameTable: true, }; -const firebirdSplitterOptions = { - stringsBegins: ["'", '"'], - stringsEnds: { - "'": "'", - '"': '"', - }, - stringEscapes: { - "'": "'", // Single quote is escaped by another single quote - '"': '"', // Double quote is escaped by another double quote - }, - allowSemicolon: true, - allowCustomDelimiter: false, - allowCustomSqlTerminator: false, - allowGoDelimiter: false, - allowSlashDelimiter: false, - allowDollarDollarString: false, - noSplit: false, - doubleDashComments: true, - multilineComments: true, - javaScriptComments: false, - skipSeparatorBeginEnd: false, - ignoreComments: false, - preventSingleLineSplit: false, - adaptiveGoSplit: false, - returnRichInfo: false, - splitByLines: false, - splitByEmptyLine: false, - copyFromStdin: false, - queryParameterStyle: ':', // Firebird uses colon-prefixed parameters (:param_name) -}; - /** @type {import('dbgate-types').EngineDriver} */ const firebirdDriverBase = { ...driverBase, defaultPort: 3050, showConnectionField: field => ['port', 'user', 'password', 'server', 'databaseFile'].includes(field), - getQuerySplitterOptions: () => firebirdSplitterOptions, + + getQuerySplitterOptions: (usage) => + usage == 'editor' + ? { ...firebirdSplitterOptions, ignoreComments: true, preventSingleLineSplit: true } + : firebirdSplitterOptions, + beforeConnectionSave: connection => { const { databaseFile } = connection; return {