Enhance binary data handling by converting hex strings to base64 in filter parser and updating MongoDB driver for BinData support

This commit is contained in:
Stela Augustinova
2025-11-11 14:39:43 +01:00
parent dfeb910ac9
commit 94b35e3d5f
4 changed files with 19 additions and 13 deletions

View File

@@ -15,7 +15,10 @@ function mongoReplacer(key, value) {
function jsonStringifyWithObjectId(obj) {
return JSON.stringify(obj, mongoReplacer, 2)
.replace(/\{\s*\"\$oid\"\s*\:\s*\"([0-9a-f]+)\"\s*\}/g, (m, id) => `ObjectId("${id}")`)
.replace(/\{\s*\"\$bigint\"\s*\:\s*\"([0-9]+)\"\s*\}/g, (m, num) => `${num}n`);
.replace(/\{\s*\"\$bigint\"\s*\:\s*\"([0-9]+)\"\s*\}/g, (m, num) => `${num}n`)
.replace(/\{\s*"\$binary"\s*:\s*\{\s*"base64"\s*:\s*"([^"]+)"(?:\s*,\s*"subType"\s*:\s*"([0-9a-fA-F]{2})")?\s*\}\s*\}/g, (m, base64, subType) => {
return `BinData(${parseInt(subType || "00", 16)}, "${base64}")`;
});
}
/** @type {import('dbgate-types').SqlDialect} */
@@ -129,7 +132,7 @@ const driver = {
getCollectionExportQueryScript(collection, condition, sort) {
return `db.getCollection('${collection}')
.find(${JSON.stringify(convertToMongoCondition(condition) || {})})
.find(${jsonStringifyWithObjectId(convertToMongoCondition(condition) || {})})
.sort(${JSON.stringify(convertToMongoSort(sort) || {})})`;
},
getCollectionExportQueryJson(collection, condition, sort) {
@@ -148,6 +151,7 @@ const driver = {
parseJsonObject: true,
parseObjectIdAsDollar: true,
parseDateAsDollar: true,
parseHexAsBuffer: true,
explicitDataType: true,
supportNumberType: true,