mirror of https://github.com/Fabio286/antares.git
feat(PostgreSQL): insert and edit blob fields
This commit is contained in:
parent
fc651149b9
commit
1f80a64fe1
|
@ -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)}'`;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue