diff --git a/packages/filterparser/src/filterTool.ts b/packages/filterparser/src/filterTool.ts index 864e16021..efab31696 100644 --- a/packages/filterparser/src/filterTool.ts +++ b/packages/filterparser/src/filterTool.ts @@ -1,4 +1,4 @@ -import { arrayToHexString, evalFilterBehaviour, isTypeDateTime } from 'dbgate-tools'; +import { arrayToHexString, base64ToHex, evalFilterBehaviour, isTypeDateTime } from 'dbgate-tools'; import { format, toDate } from 'date-fns'; import _isString from 'lodash/isString'; import _cloneDeepWith from 'lodash/cloneDeepWith'; @@ -24,7 +24,9 @@ export function getFilterValueExpression(value, dataType?) { if (value.type == 'Buffer' && Array.isArray(value.data)) { return '0x' + arrayToHexString(value.data); } - + if (value?.$binary?.base64) { + return base64ToHex(value.$binary.base64); + } return `="${value}"`; } diff --git a/packages/web/src/celldata/PictureCellView.svelte b/packages/web/src/celldata/PictureCellView.svelte index 1d6eff082..fe5b4efbc 100644 --- a/packages/web/src/celldata/PictureCellView.svelte +++ b/packages/web/src/celldata/PictureCellView.svelte @@ -10,6 +10,9 @@ if (value?.type == 'Buffer' && _.isArray(value?.data)) { return 'data:image/png;base64, ' + btoa(String.fromCharCode.apply(null, value?.data)); } + if (value?.$binary?.base64) { + return 'data:image/png;base64, ' + value.$binary.base64; + } return null; } catch (err) { console.log('Error showing picture', err); diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte index df5d6da95..2df3efae1 100644 --- a/packages/web/src/datagrid/DataGridCore.svelte +++ b/packages/web/src/datagrid/DataGridCore.svelte @@ -361,6 +361,7 @@ detectSqlFilterBehaviour, stringifyCellValue, shouldOpenMultilineDialog, + base64ToHex, } from 'dbgate-tools'; import { getContext, onDestroy } from 'svelte'; import _, { map } from 'lodash'; @@ -758,7 +759,7 @@ export function saveCellToFileEnabled() { const value = getSelectedExportableCell(); - return _.isString(value) || (value?.type == 'Buffer' && _.isArray(value?.data)); + return _.isString(value) || (value?.type == 'Buffer' && _.isArray(value?.data)) || (value?.$binary?.base64); } export async function saveCellToFile() { @@ -771,6 +772,8 @@ fs.promises.writeFile(file, value); } else if (value?.type == 'Buffer' && _.isArray(value?.data)) { fs.promises.writeFile(file, window['Buffer'].from(value.data)); + } else if (value?.$binary?.base64) { + fs.promises.writeFile(file, window['Buffer'].from(value.$binary.base64, 'base64')); } } } diff --git a/packages/web/src/modals/ValueLookupModal.svelte b/packages/web/src/modals/ValueLookupModal.svelte index 56c2e9653..a4c24ac8b 100644 --- a/packages/web/src/modals/ValueLookupModal.svelte +++ b/packages/web/src/modals/ValueLookupModal.svelte @@ -15,6 +15,7 @@ import _ from 'lodash'; import { apiCall } from '../utility/api'; import ErrorInfo from '../elements/ErrorInfo.svelte'; + import { base64ToHex } from 'dbgate-tools'; export let onConfirm; export let conid; @@ -112,7 +113,7 @@ { fieldName: 'value', header: 'Value', - formatter: row => (row.value == null ? '(NULL)' : row.value), + formatter: row => (row.value == null ? '(NULL)' : row.value?.$binary?.base64 ? base64ToHex(row.value.$binary.base64) : row.value), }, ]} > diff --git a/packages/web/src/perspectives/PerspectiveCell.svelte b/packages/web/src/perspectives/PerspectiveCell.svelte index f72f3968d..8da6db2e7 100644 --- a/packages/web/src/perspectives/PerspectiveCell.svelte +++ b/packages/web/src/perspectives/PerspectiveCell.svelte @@ -15,6 +15,9 @@ if (force && value?.type == 'Buffer' && _.isArray(value.data)) { return String.fromCharCode.apply(String, value.data); } + else if (force && value?.$binary?.base64) { + return atob(value.$binary.base64); + } return stringifyCellValue(value, 'gridCellIntent').value; }