mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-26 21:25:59 +00:00
Enhance binary data handling in transformRow to serialize Buffer as base64
This commit is contained in:
@@ -21,6 +21,15 @@ function extractColumns(fields) {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function transformRow(row, columns) {
|
||||||
|
columns.forEach((col) => {
|
||||||
|
if (Buffer.isBuffer(row[col.columnName])) {
|
||||||
|
row[col.columnName] = { $binary: { base64: Buffer.from(row[col.columnName]).toString('base64') } };
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
function zipDataRow(rowArray, columns) {
|
function zipDataRow(rowArray, columns) {
|
||||||
return _.zipObject(
|
return _.zipObject(
|
||||||
columns.map(x => x.columnName),
|
columns.map(x => x.columnName),
|
||||||
@@ -96,8 +105,8 @@ const drivers = driverBases.map(driverBase => ({
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
dbhan.client.query(sql, function (error, results, fields) {
|
dbhan.client.query(sql, function (error, results, fields) {
|
||||||
if (error) reject(error);
|
if (error) reject(error);
|
||||||
const columns = extractColumns(fields);
|
const columns = extractColumns(fields);
|
||||||
resolve({ rows: results && columns && results.map && results.map(row => zipDataRow(row, columns)), columns });
|
resolve({ rows: results && columns && results.map && results.map(row => transformRow(zipDataRow(row, columns), columns)), columns });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -127,16 +136,17 @@ const drivers = driverBases.map(driverBase => ({
|
|||||||
time: new Date(),
|
time: new Date(),
|
||||||
severity: 'info',
|
severity: 'info',
|
||||||
});
|
});
|
||||||
|
options.recordset(columns, { engine: driverBase.engine });
|
||||||
} else {
|
} else {
|
||||||
if (columns) {
|
if (columns) {
|
||||||
options.row(zipDataRow(row, columns));
|
options.row(transformRow(zipDataRow(row, columns), columns));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleFields = fields => {
|
const handleFields = fields => {
|
||||||
columns = extractColumns(fields);
|
columns = extractColumns(fields);
|
||||||
if (columns) options.recordset(columns);
|
if (columns) options.recordset(columns, { engine: driverBase.engine });
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleError = error => {
|
const handleError = error => {
|
||||||
@@ -170,10 +180,11 @@ const drivers = driverBases.map(driverBase => ({
|
|||||||
columns = extractColumns(fields);
|
columns = extractColumns(fields);
|
||||||
pass.write({
|
pass.write({
|
||||||
__isStreamHeader: true,
|
__isStreamHeader: true,
|
||||||
|
engine: driverBase.engine,
|
||||||
...(structure || { columns }),
|
...(structure || { columns }),
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.on('result', row => pass.write(zipDataRow(row, columns)))
|
.on('result', row => pass.write(transformRow(zipDataRow(row, columns), columns)))
|
||||||
.on('end', () => pass.end());
|
.on('end', () => pass.end());
|
||||||
|
|
||||||
return pass;
|
return pass;
|
||||||
|
|||||||
Reference in New Issue
Block a user