diff --git a/src/common/libs/sqlUtils.ts b/src/common/libs/sqlUtils.ts index d8abd2f8..9dce0842 100644 --- a/src/common/libs/sqlUtils.ts +++ b/src/common/libs/sqlUtils.ts @@ -107,10 +107,16 @@ export const valueToSqlString = (args: { else if (BIT.includes(field.type)) parsedValue = `b'${hexToBinary(Buffer.from(val).toString('hex') as undefined as HexChar[])}'`; else if (BLOB.includes(field.type)) { + let buffer: Buffer; + if (val instanceof Uint8Array) + buffer = Buffer.from(val); + else + buffer = val; + if (['mysql', 'maria'].includes(client)) - parsedValue = `X'${val.toString('hex').toUpperCase()}'`; + parsedValue = `X'${buffer.toString('hex').toUpperCase()}'`; else if (client === 'pg') - parsedValue = `decode('${val.toString('hex').toUpperCase()}', 'hex')`; + parsedValue = `decode('${buffer.toString('hex').toUpperCase()}', 'hex')`; } else if (NUMBER.includes(field.type)) parsedValue = val; diff --git a/src/renderer/components/WorkspaceTabQueryTable.vue b/src/renderer/components/WorkspaceTabQueryTable.vue index b6c5b28f..ed7ee218 100644 --- a/src/renderer/components/WorkspaceTabQueryTable.vue +++ b/src/renderer/components/WorkspaceTabQueryTable.vue @@ -668,15 +668,14 @@ const selectResultset = (index: number) => { const downloadTable = (format: 'csv' | 'json' | 'sql', table: string) => { if (!sortedResults.value) return; - const rows = JSON.parse(JSON.stringify(sortedResults.value)).map((row: any) => { + const rows = sortedResults.value.map((row: any) => { delete row._antares_id; return row; }); - exportRows({ type: format, content: rows, - fields: fieldsObj.value as { + fields: JSON.parse(JSON.stringify(fieldsObj.value)) as { [key: string]: {type: string; datePrecision: number}; }, client: workspaceClient.value, diff --git a/src/renderer/libs/exportRows.ts b/src/renderer/libs/exportRows.ts index 247b51e9..1f4c0321 100644 --- a/src/renderer/libs/exportRows.ts +++ b/src/renderer/libs/exportRows.ts @@ -21,8 +21,14 @@ export const exportRows = (args: { if (args.content.length) csv.push(Object.keys(args.content[0]).join(';')); - for (const row of args.content) - csv.push(Object.values(row).map(col => typeof col === 'string' ? `"${col}"` : col).join(';')); + for (const row of args.content) { + csv.push(Object.values(row).map(col => { + if (typeof col === 'string') return `"${col}"`; + if (col instanceof Buffer) return col.toString('base64'); + if (col instanceof Uint8Array) return Buffer.from(col).toString('base64'); + return col; + }).join(';')); + } content = csv.join('\n'); break;