feat(PostgreSQL): insert and edit blob fields

This commit is contained in:
Fabio Di Stasio 2021-03-18 11:09:50 +01:00
parent fc651149b9
commit 1f80a64fe1
2 changed files with 87 additions and 21 deletions

View File

@ -59,7 +59,7 @@ export default (connections) => {
}); });
ipcMain.handle('update-table-cell', async (event, params) => { ipcMain.handle('update-table-cell', async (event, params) => {
try { try { // TODO: move to client classes
let escapedParam; let escapedParam;
let reload = false; let reload = false;
const id = typeof params.id === 'number' ? params.id : `"${params.id}"`; const id = typeof params.id === 'number' ? params.id : `"${params.id}"`;
@ -74,12 +74,32 @@ export default (connections) => {
escapedParam = `'${params.content.replaceAll('\'', '\'\'')}'`; escapedParam = `'${params.content.replaceAll('\'', '\'\'')}'`;
else if (BLOB.includes(params.type)) { else if (BLOB.includes(params.type)) {
if (params.content) { if (params.content) {
const fileBlob = fs.readFileSync(params.content); let fileBlob;
escapedParam = `0x${fileBlob.toString('hex')}`;
switch (connections[params.uid]._client) {
case 'mysql':
case 'maria':
fileBlob = fs.readFileSync(params.content);
escapedParam = `0x${fileBlob.toString('hex')}`;
break;
case 'pg':
fileBlob = fs.readFileSync(params.content);
escapedParam = `decode('${fileBlob.toString('hex')}', 'hex')`;
break;
}
reload = true; reload = true;
} }
else else {
escapedParam = '""'; switch (connections[params.uid]._client) {
case 'mysql':
case 'maria':
escapedParam = '""';
break;
case 'pg':
escapedParam = 'decode(\'\', \'hex\')';
break;
}
}
} }
else if ([...BIT].includes(params.type)) { else if ([...BIT].includes(params.type)) {
escapedParam = `b'${sqlEscaper(params.content)}'`; escapedParam = `b'${sqlEscaper(params.content)}'`;
@ -171,7 +191,7 @@ export default (connections) => {
}); });
ipcMain.handle('insert-table-rows', async (event, params) => { ipcMain.handle('insert-table-rows', async (event, params) => {
try { try { // TODO: move to client classes
const insertObj = {}; const insertObj = {};
for (const key in params.row) { for (const key in params.row) {
const type = params.fields[key]; const type = params.fields[key];
@ -184,15 +204,33 @@ export default (connections) => {
else if ([...TEXT, ...LONG_TEXT].includes(type)) else if ([...TEXT, ...LONG_TEXT].includes(type))
escapedParam = `'${sqlEscaper(params.row[key])}'`; escapedParam = `'${sqlEscaper(params.row[key])}'`;
else if (BLOB.includes(type)) { else if (BLOB.includes(type)) {
if (params.row[key]) { if (params.row[key].value) {
const fileBlob = fs.readFileSync(params.row[key]); let fileBlob;
escapedParam = `0x${fileBlob.toString('hex')}`;
switch (connections[params.uid]._client) {
case 'mysql':
case 'maria':
fileBlob = fs.readFileSync(params.row[key].value);
escapedParam = `0x${fileBlob.toString('hex')}`;
break;
case 'pg':
fileBlob = fs.readFileSync(params.row[key].value);
escapedParam = `decode('${fileBlob.toString('hex')}', 'hex')`;
break;
}
}
else {
switch (connections[params.uid]._client) {
case 'mysql':
case 'maria':
escapedParam = '""';
break;
case 'pg':
escapedParam = 'decode(\'\', \'hex\')';
break;
}
} }
else
escapedParam = '\'\'';
} }
else
escapedParam = `'${sqlEscaper(params.row[key])}'`;
insertObj[key] = escapedParam; insertObj[key] = escapedParam;
} }
@ -213,7 +251,7 @@ export default (connections) => {
}); });
ipcMain.handle('insert-table-fake-rows', async (event, params) => { ipcMain.handle('insert-table-fake-rows', async (event, params) => {
try { try { // TODO: move to client classes
const rows = []; const rows = [];
for (let i = 0; i < +params.repeat; i++) { for (let i = 0; i < +params.repeat; i++) {
@ -232,11 +270,31 @@ export default (connections) => {
escapedParam = `'${sqlEscaper(params.row[key].value)}'`; escapedParam = `'${sqlEscaper(params.row[key].value)}'`;
else if (BLOB.includes(type)) { else if (BLOB.includes(type)) {
if (params.row[key].value) { if (params.row[key].value) {
const fileBlob = fs.readFileSync(params.row[key].value); let fileBlob;
escapedParam = `0x${fileBlob.toString('hex')}`;
switch (connections[params.uid]._client) {
case 'mysql':
case 'maria':
fileBlob = fs.readFileSync(params.row[key].value);
escapedParam = `0x${fileBlob.toString('hex')}`;
break;
case 'pg':
fileBlob = fs.readFileSync(params.row[key].value);
escapedParam = `decode('${fileBlob.toString('hex')}', 'hex')`;
break;
}
}
else {
switch (connections[params.uid]._client) {
case 'mysql':
case 'maria':
escapedParam = '""';
break;
case 'pg':
escapedParam = 'decode(\'\', \'hex\')';
break;
}
} }
else
escapedParam = '\'\'';
} }
else if (BIT.includes(type)) else if (BIT.includes(type))
escapedParam = `b'${sqlEscaper(params.row[key].value)}'`; escapedParam = `b'${sqlEscaper(params.row[key].value)}'`;

View File

@ -16,19 +16,27 @@
<i class="mdi mdi-24px mdi-tools" /> <i class="mdi mdi-24px mdi-tools" />
</a> </a>
<ul class="menu text-left text-uppercase"> <ul class="menu text-left text-uppercase">
<li class="menu-item"> <li v-if="workspace.customizations.processesList" class="menu-item">
<a class="c-hand p-vcentered" @click="showProcessesModal"> <a class="c-hand p-vcentered" @click="showProcessesModal">
<i class="mdi mdi-memory mr-1 tool-icon" /> <i class="mdi mdi-memory mr-1 tool-icon" />
<span>{{ $t('message.processesList') }}</span> <span>{{ $t('message.processesList') }}</span>
</a> </a>
</li> </li>
<li class="menu-item" title="Coming..."> <li
v-if="workspace.customizations.variables"
class="menu-item"
title="Coming..."
>
<a class="c-hand p-vcentered disabled"> <a class="c-hand p-vcentered disabled">
<i class="mdi mdi-shape mr-1 tool-icon" /> <i class="mdi mdi-shape mr-1 tool-icon" />
<span>{{ $t('word.variables') }}</span> <span>{{ $t('word.variables') }}</span>
</a> </a>
</li> </li>
<li class="menu-item" title="Coming..."> <li
v-if="workspace.customizations.usersManagement"
class="menu-item"
title="Coming..."
>
<a class="c-hand p-vcentered disabled"> <a class="c-hand p-vcentered disabled">
<i class="mdi mdi-account-group mr-1 tool-icon" /> <i class="mdi mdi-account-group mr-1 tool-icon" />
<span>{{ $t('message.manageUsers') }}</span> <span>{{ $t('message.manageUsers') }}</span>