diff --git a/plugins/dbgate-plugin-firebird/src/backend/driver.js b/plugins/dbgate-plugin-firebird/src/backend/driver.js index 91ad915b7..13b232d23 100644 --- a/plugins/dbgate-plugin-firebird/src/backend/driver.js +++ b/plugins/dbgate-plugin-firebird/src/backend/driver.js @@ -4,7 +4,7 @@ const stream = require('stream'); const driverBase = require('../frontend/driver'); const Analyser = require('./Analyser'); const Firebird = require('node-firebird'); -const { normalizeRow, createFirebirdInsertStream } = require('./helpers'); +const { createFirebirdInsertStream } = require('./helpers'); const { getLogger, extractErrorLogData, createBulkInsertStreamBase } = require('dbgate-tools'); const sql = require('./sql'); @@ -21,6 +21,7 @@ const driver = { database: databaseFile, user, password, + blobAsText: true, }; /**@type {Firebird.Database} */ @@ -63,7 +64,7 @@ const driver = { const columns = res?.[0] ? Object.keys(res[0]).map(i => ({ columnName: i })) : []; return { - rows: res ? await Promise.all(res.map(normalizeRow)) : [], + rows: res || [], columns, }; }, diff --git a/plugins/dbgate-plugin-firebird/src/backend/helpers.js b/plugins/dbgate-plugin-firebird/src/backend/helpers.js index 2c53e38a3..2d5d84872 100644 --- a/plugins/dbgate-plugin-firebird/src/backend/helpers.js +++ b/plugins/dbgate-plugin-firebird/src/backend/helpers.js @@ -91,43 +91,6 @@ function getFormattedDefaultValue(defaultValue) { return defaultValue.replace(/^default\s*/i, ''); } -function blobStreamToString(stream, encoding = 'utf8') { - return new Promise((resolve, reject) => { - const chunks = []; - stream.on('data', chunk => { - chunks.push(chunk); - }); - stream.on('end', () => { - resolve(Buffer.concat(chunks).toString(encoding)); - }); - stream.on('error', err => { - reject(err); - }); - }); -} - -async function normalizeRow(row) { - const entries = await Promise.all( - Object.entries(row).map(async ([key, value]) => { - if (value === null || value === undefined) return [key, null]; - if (typeof value === 'function') { - const result = await new Promise((resolve, reject) => { - value(async (_err, _name, eventEmitter) => { - try { - const stringValue = await blobStreamToString(eventEmitter, 'utf8'); - resolve(stringValue); - } catch (error) { - reject(error); - } - }); - }); - return [key, result]; - } - return [key, value]; - }) - ); - return Object.fromEntries(entries); -} function transformRow(row) { return Object.fromEntries(