Browse Source

fix(nocodb): column.column_name -> column.title in bulk update for single select

pull/3818/head
Wing-Kam Wong 2 years ago
parent
commit
8930705f58
  1. 450
      packages/nocodb/src/lib/meta/api/columnApis.ts

450
packages/nocodb/src/lib/meta/api/columnApis.ts

@ -510,10 +510,14 @@ export async function columnAdd(req: Request, res: Response<TableType>) {
colBody.dtxs = '4';
}
if ([UITypes.SingleSelect, UITypes.MultiSelect].includes(colBody.uidt)) {
if (
[UITypes.SingleSelect, UITypes.MultiSelect].includes(colBody.uidt)
) {
const dbDriver = NcConnectionMgrv2.get(base);
const driverType = dbDriver.clientType();
const optionTitles = colBody.colOptions.options.map(el => el.title.replace(/'/g, "''"));
const optionTitles = colBody.colOptions.options.map((el) =>
el.title.replace(/'/g, "''")
);
// this is not used for select columns and cause issue for MySQL
colBody.dtxs = '';
@ -521,12 +525,16 @@ export async function columnAdd(req: Request, res: Response<TableType>) {
if (colBody.cdf) {
if (colBody.uidt === UITypes.SingleSelect) {
if (!optionTitles.includes(colBody.cdf)) {
NcError.badRequest(`Default value '${colBody.cdf}' is not a select option.`);
NcError.badRequest(
`Default value '${colBody.cdf}' is not a select option.`
);
}
} else {
for (const cdf of colBody.cdf.split(',')) {
if (!optionTitles.includes(cdf)) {
NcError.badRequest(`Default value '${cdf}' is not a select option.`);
NcError.badRequest(
`Default value '${cdf}' is not a select option.`
);
}
}
}
@ -536,9 +544,9 @@ export async function columnAdd(req: Request, res: Response<TableType>) {
}
// Restrict duplicates
const titles = colBody.colOptions.options.map(el => el.title)
if (titles
.some( function(item) {
const titles = colBody.colOptions.options.map((el) => el.title);
if (
titles.some(function (item) {
return titles.indexOf(item) !== titles.lastIndexOf(item);
})
) {
@ -546,8 +554,8 @@ export async function columnAdd(req: Request, res: Response<TableType>) {
}
// Restrict empty options
if (titles
.some( function(item) {
if (
titles.some(function (item) {
return item === '';
})
) {
@ -557,33 +565,39 @@ export async function columnAdd(req: Request, res: Response<TableType>) {
// Trim end of enum/set
if (colBody.dt === 'enum' || colBody.dt === 'set') {
for (const opt of colBody.colOptions.options) {
opt.title = opt.title.trimEnd()
opt.title = opt.title.trimEnd();
}
}
if (colBody.uidt === UITypes.SingleSelect) {
colBody.dtxp = (colBody.colOptions?.options.length)
? `${colBody.colOptions.options.map(o => `'${o.title.replace(/'/gi, '\'\'')}'`).join(',')}`
colBody.dtxp = colBody.colOptions?.options.length
? `${colBody.colOptions.options
.map((o) => `'${o.title.replace(/'/gi, "''")}'`)
.join(',')}`
: '';
} else if (colBody.uidt === UITypes.MultiSelect){
colBody.dtxp = (colBody.colOptions?.options.length)
? `${colBody.colOptions.options.map((o) => {
if(o.title.includes(',')) {
NcError.badRequest('Illegal char(\',\') for MultiSelect');
}
return `'${o.title.replace(/'/gi, '\'\'')}'`;
}).join(',')}`
} else if (colBody.uidt === UITypes.MultiSelect) {
colBody.dtxp = colBody.colOptions?.options.length
? `${colBody.colOptions.options
.map((o) => {
if (o.title.includes(',')) {
NcError.badRequest("Illegal char(',') for MultiSelect");
}
return `'${o.title.replace(/'/gi, "''")}'`;
})
.join(',')}`
: '';
}
// Handle empty enum/set for mysql (we restrict empty user options beforehand)
if (driverType === 'mysql' || driverType === 'mysql2') {
if (!colBody.colOptions.options.length && (!colBody.dtxp || colBody.dtxp === '')) {
colBody.dtxp = '\'\'';
if (
!colBody.colOptions.options.length &&
(!colBody.dtxp || colBody.dtxp === '')
) {
colBody.dtxp = "''";
}
}
}
const tableUpdateBody = {
...table,
@ -722,17 +736,14 @@ export async function columnUpdate(req: Request, res: Response<TableType>) {
NcError.notImplemented(
`Updating ${colBody.uidt} => ${colBody.uidt} is not implemented`
);
} else if(
[
UITypes.SingleSelect,
UITypes.MultiSelect
].includes(colBody.uidt)
} else if (
[UITypes.SingleSelect, UITypes.MultiSelect].includes(colBody.uidt)
) {
colBody = getColumnPropsFromUIDT(colBody, base);
const baseModel = await Model.getBaseModelSQL({
id: table.id,
dbDriver: NcConnectionMgrv2.get(base)
dbDriver: NcConnectionMgrv2.get(base),
});
if (colBody.colOptions?.options) {
@ -741,36 +752,77 @@ export async function columnUpdate(req: Request, res: Response<TableType>) {
const driverType = dbDriver.clientType();
// MultiSelect to SingleSelect
if (column.uidt === UITypes.MultiSelect && colBody.uidt === UITypes.SingleSelect) {
if (
column.uidt === UITypes.MultiSelect &&
colBody.uidt === UITypes.SingleSelect
) {
if (driverType === 'mysql' || driverType === 'mysql2') {
await dbDriver.raw(`UPDATE ?? SET ?? = SUBSTRING_INDEX(??, ',', 1) WHERE ?? LIKE '%,%';`, [table.table_name, column.column_name, column.column_name, column.column_name]);
await dbDriver.raw(
`UPDATE ?? SET ?? = SUBSTRING_INDEX(??, ',', 1) WHERE ?? LIKE '%,%';`,
[
table.table_name,
column.column_name,
column.column_name,
column.column_name,
]
);
} else if (driverType === 'pg') {
await dbDriver.raw(`UPDATE ?? SET ?? = split_part(??, ',', 1);`, [table.table_name, column.column_name, column.column_name]);
await dbDriver.raw(`UPDATE ?? SET ?? = split_part(??, ',', 1);`, [
table.table_name,
column.column_name,
column.column_name,
]);
} else if (driverType === 'mssql') {
await dbDriver.raw(`UPDATE ?? SET ?? = LEFT(cast(?? as varchar(max)), CHARINDEX(',', ??) - 1) WHERE CHARINDEX(',', ??) > 0;`, [table.table_name, column.column_name, column.column_name, column.column_name, column.column_name]);
await dbDriver.raw(
`UPDATE ?? SET ?? = LEFT(cast(?? as varchar(max)), CHARINDEX(',', ??) - 1) WHERE CHARINDEX(',', ??) > 0;`,
[
table.table_name,
column.column_name,
column.column_name,
column.column_name,
column.column_name,
]
);
} else if (driverType === 'sqlite3') {
await dbDriver.raw(`UPDATE ?? SET ?? = substr(??, 1, instr(??, ',') - 1) WHERE ?? LIKE '%,%';`, [table.table_name, column.column_name, column.column_name, column.column_name, column.column_name]);
await dbDriver.raw(
`UPDATE ?? SET ?? = substr(??, 1, instr(??, ',') - 1) WHERE ?? LIKE '%,%';`,
[
table.table_name,
column.column_name,
column.column_name,
column.column_name,
column.column_name,
]
);
}
}
// Handle migrations
if (column.colOptions?.options) {
for (const op of column.colOptions.options.filter(el => el.order === null)) {
op.title = op.title.replace(/^'/, '').replace(/'$/, '')
for (const op of column.colOptions.options.filter(
(el) => el.order === null
)) {
op.title = op.title.replace(/^'/, '').replace(/'$/, '');
}
}
// Handle default values
const optionTitles = colBody.colOptions.options.map(el => el.title.replace(/'/g, "''"));
const optionTitles = colBody.colOptions.options.map((el) =>
el.title.replace(/'/g, "''")
);
if (colBody.cdf) {
if (colBody.uidt === UITypes.SingleSelect) {
if (!optionTitles.includes(colBody.cdf)) {
NcError.badRequest(`Default value '${colBody.cdf}' is not a select option.`);
NcError.badRequest(
`Default value '${colBody.cdf}' is not a select option.`
);
}
} else {
for (const cdf of colBody.cdf.split(',')) {
if (!optionTitles.includes(cdf)) {
NcError.badRequest(`Default value '${cdf}' is not a select option.`);
NcError.badRequest(
`Default value '${cdf}' is not a select option.`
);
}
}
}
@ -778,12 +830,11 @@ export async function columnUpdate(req: Request, res: Response<TableType>) {
colBody.cdf = `'${colBody.cdf}'`;
}
}
// Restrict duplicates
const titles = colBody.colOptions.options.map(el => el.title)
if (titles
.some( function(item) {
const titles = colBody.colOptions.options.map((el) => el.title);
if (
titles.some(function (item) {
return titles.indexOf(item) !== titles.lastIndexOf(item);
})
) {
@ -791,8 +842,8 @@ export async function columnUpdate(req: Request, res: Response<TableType>) {
}
// Restrict empty options
if (titles
.some( function(item) {
if (
titles.some(function (item) {
return item === '';
})
) {
@ -802,53 +853,114 @@ export async function columnUpdate(req: Request, res: Response<TableType>) {
// Trim end of enum/set
if (colBody.dt === 'enum' || colBody.dt === 'set') {
for (const opt of colBody.colOptions.options) {
opt.title = opt.title.trimEnd()
opt.title = opt.title.trimEnd();
}
}
if (colBody.uidt === UITypes.SingleSelect) {
colBody.dtxp = (colBody.colOptions?.options.length)
? `${colBody.colOptions.options.map(o => `'${o.title.replace(/'/gi, '\'\'')}'`).join(',')}`
colBody.dtxp = colBody.colOptions?.options.length
? `${colBody.colOptions.options
.map((o) => `'${o.title.replace(/'/gi, "''")}'`)
.join(',')}`
: '';
} else if (colBody.uidt === UITypes.MultiSelect){
colBody.dtxp = (colBody.colOptions?.options.length)
? `${colBody.colOptions.options.map((o) => {
if(o.title.includes(',')) {
NcError.badRequest('Illegal char(\',\') for MultiSelect');
}
return `'${o.title.replace(/'/gi, '\'\'')}'`;
}).join(',')}`
} else if (colBody.uidt === UITypes.MultiSelect) {
colBody.dtxp = colBody.colOptions?.options.length
? `${colBody.colOptions.options
.map((o) => {
if (o.title.includes(',')) {
NcError.badRequest("Illegal char(',') for MultiSelect");
}
return `'${o.title.replace(/'/gi, "''")}'`;
})
.join(',')}`
: '';
}
// Handle empty enum/set for mysql (we restrict empty user options beforehand)
if (driverType === 'mysql' || driverType === 'mysql2') {
if (!colBody.colOptions.options.length && (!colBody.dtxp || colBody.dtxp === '')) {
colBody.dtxp = '\'\'';
if (
!colBody.colOptions.options.length &&
(!colBody.dtxp || colBody.dtxp === '')
) {
colBody.dtxp = "''";
}
}
// Handle option delete
if (column.colOptions?.options) {
for (const option of column.colOptions.options.filter(oldOp => colBody.colOptions.options.find(newOp => newOp.id === oldOp.id) ? false : true)) {
if (!supportedDrivers.includes(driverType) && column.uidt === UITypes.MultiSelect) {
NcError.badRequest('Your database not yet supported for this operation. Please remove option from records manually before dropping.');
for (const option of column.colOptions.options.filter((oldOp) =>
colBody.colOptions.options.find((newOp) => newOp.id === oldOp.id)
? false
: true
)) {
if (
!supportedDrivers.includes(driverType) &&
column.uidt === UITypes.MultiSelect
) {
NcError.badRequest(
'Your database not yet supported for this operation. Please remove option from records manually before dropping.'
);
}
if (column.uidt === UITypes.SingleSelect) {
if (column.uidt === UITypes.SingleSelect) {
if (driverType === 'mssql') {
await dbDriver.raw(`UPDATE ?? SET ?? = NULL WHERE ?? LIKE ?`, [table.table_name, column.column_name, column.column_name, option.title]);
await dbDriver.raw(`UPDATE ?? SET ?? = NULL WHERE ?? LIKE ?`, [
table.table_name,
column.column_name,
column.column_name,
option.title,
]);
} else {
await baseModel.bulkUpdateAll({ where: `(${column.column_name},eq,${option.title})` }, { [column.column_name]: null }, { cookie: req});
await baseModel.bulkUpdateAll(
{ where: `(${column.title},eq,${option.title})` },
{ [column.column_name]: null },
{ cookie: req }
);
}
} else if (column.uidt === UITypes.MultiSelect) {
if (driverType === 'mysql' || driverType === 'mysql2') {
await dbDriver.raw(`UPDATE ?? SET ?? = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', ??, ','), CONCAT(',', ?, ','), ',')) WHERE FIND_IN_SET(?, ??)`, [table.table_name, column.column_name, column.column_name, option.title, option.title, column.column_name]);
await dbDriver.raw(
`UPDATE ?? SET ?? = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', ??, ','), CONCAT(',', ?, ','), ',')) WHERE FIND_IN_SET(?, ??)`,
[
table.table_name,
column.column_name,
column.column_name,
option.title,
option.title,
column.column_name,
]
);
} else if (driverType === 'pg') {
await dbDriver.raw(`UPDATE ?? SET ?? = array_to_string(array_remove(string_to_array(??, ','), ?), ',')`, [table.table_name, column.column_name, column.column_name, option.title]);
await dbDriver.raw(
`UPDATE ?? SET ?? = array_to_string(array_remove(string_to_array(??, ','), ?), ',')`,
[
table.table_name,
column.column_name,
column.column_name,
option.title,
]
);
} else if (driverType === 'mssql') {
await dbDriver.raw(`UPDATE ?? SET ?? = substring(replace(concat(',', ??, ','), concat(',', ?, ','), ','), 2, len(replace(concat(',', ??, ','), concat(',', ?, ','), ',')) - 2)`, [table.table_name, column.column_name, column.column_name, option.title, column.column_name, option.title]);
await dbDriver.raw(
`UPDATE ?? SET ?? = substring(replace(concat(',', ??, ','), concat(',', ?, ','), ','), 2, len(replace(concat(',', ??, ','), concat(',', ?, ','), ',')) - 2)`,
[
table.table_name,
column.column_name,
column.column_name,
option.title,
column.column_name,
option.title,
]
);
} else if (driverType === 'sqlite3') {
await dbDriver.raw(`UPDATE ?? SET ?? = TRIM(REPLACE(',' || ?? || ',', ',' || ? || ',', ','), ',')`, [table.table_name, column.column_name, column.column_name, option.title]);
await dbDriver.raw(
`UPDATE ?? SET ?? = TRIM(REPLACE(',' || ?? || ',', ',' || ? || ',', ','), ',')`,
[
table.table_name,
column.column_name,
column.column_name,
option.title,
]
);
}
}
}
@ -858,43 +970,61 @@ export async function columnUpdate(req: Request, res: Response<TableType>) {
// Handle option update
if (column.colOptions?.options) {
const old_titles = column.colOptions.options.map(el => el.title);
for (const option of column.colOptions.options.filter(oldOp => colBody.colOptions.options.find(newOp => newOp.id === oldOp.id && newOp.title !== oldOp.title))) {
if (!supportedDrivers.includes(driverType) && column.uidt === UITypes.MultiSelect) {
NcError.badRequest('Your database not yet supported for this operation. Please remove option from records manually before updating.');
const old_titles = column.colOptions.options.map((el) => el.title);
for (const option of column.colOptions.options.filter((oldOp) =>
colBody.colOptions.options.find(
(newOp) => newOp.id === oldOp.id && newOp.title !== oldOp.title
)
)) {
if (
!supportedDrivers.includes(driverType) &&
column.uidt === UITypes.MultiSelect
) {
NcError.badRequest(
'Your database not yet supported for this operation. Please remove option from records manually before updating.'
);
}
let newOp = { ...colBody.colOptions.options.find(el => option.id === el.id) };
let newOp = {
...colBody.colOptions.options.find((el) => option.id === el.id),
};
if (old_titles.includes(newOp.title)) {
let def_option = { ...newOp };
let title_counter = 1;
while (old_titles.includes(newOp.title)) {
newOp.title = `${def_option.title}_${title_counter++}`;
}
interchange.push( {
interchange.push({
def_option,
temp_title: newOp.title
} );
temp_title: newOp.title,
});
}
// Append new option before editing
if ((driverType === 'mysql' || driverType === 'mysql2') && (column.dt === 'enum' || column.dt === 'set')) {
if (
(driverType === 'mysql' || driverType === 'mysql2') &&
(column.dt === 'enum' || column.dt === 'set')
) {
column.colOptions.options.push({ title: newOp.title });
let temp_dtxp = '';
if (column.uidt === UITypes.SingleSelect) {
temp_dtxp = (column.colOptions.options.length)
? `${column.colOptions.options.map(o => `'${o.title.replace(/'/gi, '\'\'')}'`).join(',')}`
temp_dtxp = column.colOptions.options.length
? `${column.colOptions.options
.map((o) => `'${o.title.replace(/'/gi, "''")}'`)
.join(',')}`
: '';
} else if (column.uidt === UITypes.MultiSelect){
temp_dtxp = (column.colOptions.options.length)
? `${column.colOptions.options.map((o) => {
if(o.title.includes(',')) {
NcError.badRequest('Illegal char(\',\') for MultiSelect');
throw new Error('');
}
return `'${o.title.replace(/'/gi, '\'\'')}'`;
}).join(',')}`
} else if (column.uidt === UITypes.MultiSelect) {
temp_dtxp = column.colOptions.options.length
? `${column.colOptions.options
.map((o) => {
if (o.title.includes(',')) {
NcError.badRequest("Illegal char(',') for MultiSelect");
throw new Error('');
}
return `'${o.title.replace(/'/gi, "''")}'`;
})
.join(',')}`
: '';
}
@ -926,29 +1056,82 @@ export async function columnUpdate(req: Request, res: Response<TableType>) {
),
};
const sqlMgr = await ProjectMgrv2.getSqlMgr({ id: base.project_id });
const sqlMgr = await ProjectMgrv2.getSqlMgr({
id: base.project_id,
});
await sqlMgr.sqlOpPlus(base, 'tableUpdate', tableUpdateBody);
await Column.update(req.params.columnId, {
...column,
});
}
if (column.uidt === UITypes.SingleSelect) {
if (column.uidt === UITypes.SingleSelect) {
if (driverType === 'mssql') {
await dbDriver.raw(`UPDATE ?? SET ?? = ? WHERE ?? LIKE ?`, [table.table_name, column.column_name, newOp.title, column.column_name, option.title]);
await dbDriver.raw(`UPDATE ?? SET ?? = ? WHERE ?? LIKE ?`, [
table.table_name,
column.column_name,
newOp.title,
column.column_name,
option.title,
]);
} else {
await baseModel.bulkUpdateAll({ where: `(${column.column_name},eq,${option.title})` }, { [column.column_name]: newOp.title }, { cookie: req});
await baseModel.bulkUpdateAll(
{ where: `(${column.title},eq,${option.title})` },
{ [column.column_name]: newOp.title },
{ cookie: req }
);
}
} else if (column.uidt === UITypes.MultiSelect) {
if (driverType === 'mysql' || driverType === 'mysql2') {
await dbDriver.raw(`UPDATE ?? SET ?? = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', ??, ','), CONCAT(',', ?, ','), CONCAT(',', ?, ','))) WHERE FIND_IN_SET(?, ??)`, [table.table_name, column.column_name, column.column_name, option.title, newOp.title, option.title, column.column_name]);
await dbDriver.raw(
`UPDATE ?? SET ?? = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', ??, ','), CONCAT(',', ?, ','), CONCAT(',', ?, ','))) WHERE FIND_IN_SET(?, ??)`,
[
table.table_name,
column.column_name,
column.column_name,
option.title,
newOp.title,
option.title,
column.column_name,
]
);
} else if (driverType === 'pg') {
await dbDriver.raw(`UPDATE ?? SET ?? = array_to_string(array_replace(string_to_array(??, ','), ?, ?), ',')`, [table.table_name, column.column_name, column.column_name, option.title, newOp.title]);
await dbDriver.raw(
`UPDATE ?? SET ?? = array_to_string(array_replace(string_to_array(??, ','), ?, ?), ',')`,
[
table.table_name,
column.column_name,
column.column_name,
option.title,
newOp.title,
]
);
} else if (driverType === 'mssql') {
await dbDriver.raw(`UPDATE ?? SET ?? = substring(replace(concat(',', ??, ','), concat(',', ?, ','), concat(',', ?, ',')), 2, len(replace(concat(',', ??, ','), concat(',', ?, ','), concat(',', ?, ','))) - 2)`, [table.table_name, column.column_name, column.column_name, option.title, newOp.title, column.column_name, option.title, newOp.title]);
await dbDriver.raw(
`UPDATE ?? SET ?? = substring(replace(concat(',', ??, ','), concat(',', ?, ','), concat(',', ?, ',')), 2, len(replace(concat(',', ??, ','), concat(',', ?, ','), concat(',', ?, ','))) - 2)`,
[
table.table_name,
column.column_name,
column.column_name,
option.title,
newOp.title,
column.column_name,
option.title,
newOp.title,
]
);
} else if (driverType === 'sqlite3') {
await dbDriver.raw(`UPDATE ?? SET ?? = TRIM(REPLACE(',' || ?? || ',', ',' || ? || ',', ',' || ? || ','), ',')`, [table.table_name, column.column_name, column.column_name, option.title, newOp.title]);
await dbDriver.raw(
`UPDATE ?? SET ?? = TRIM(REPLACE(',' || ?? || ',', ',' || ? || ',', ',' || ? || ','), ',')`,
[
table.table_name,
column.column_name,
column.column_name,
option.title,
newOp.title,
]
);
}
}
}
@ -956,21 +1139,72 @@ export async function columnUpdate(req: Request, res: Response<TableType>) {
for (const ch of interchange) {
let newOp = ch.def_option;
if (column.uidt === UITypes.SingleSelect) {
if (column.uidt === UITypes.SingleSelect) {
if (driverType === 'mssql') {
await dbDriver.raw(`UPDATE ?? SET ?? = ? WHERE ?? LIKE ?`, [table.table_name, column.column_name, newOp.title, column.column_name, ch.temp_title]);
await dbDriver.raw(`UPDATE ?? SET ?? = ? WHERE ?? LIKE ?`, [
table.table_name,
column.column_name,
newOp.title,
column.column_name,
ch.temp_title,
]);
} else {
await baseModel.bulkUpdateAll({ where: `(${column.column_name},eq,${ch.temp_title})` }, { [column.column_name]: newOp.title }, { cookie: req});
await baseModel.bulkUpdateAll(
{ where: `(${column.title},eq,${ch.temp_title})` },
{ [column.column_name]: newOp.title },
{ cookie: req }
);
}
} else if (column.uidt === UITypes.MultiSelect) {
if (driverType === 'mysql' || driverType === 'mysql2') {
await dbDriver.raw(`UPDATE ?? SET ?? = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', ??, ','), CONCAT(',', ?, ','), CONCAT(',', ?, ','))) WHERE FIND_IN_SET(?, ??)`, [table.table_name, column.column_name, column.column_name, ch.temp_title, newOp.title, ch.temp_title, column.column_name]);
await dbDriver.raw(
`UPDATE ?? SET ?? = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', ??, ','), CONCAT(',', ?, ','), CONCAT(',', ?, ','))) WHERE FIND_IN_SET(?, ??)`,
[
table.table_name,
column.column_name,
column.column_name,
ch.temp_title,
newOp.title,
ch.temp_title,
column.column_name,
]
);
} else if (driverType === 'pg') {
await dbDriver.raw(`UPDATE ?? SET ?? = array_to_string(array_replace(string_to_array(??, ','), ?, ?), ',')`, [table.table_name, column.column_name, column.column_name, ch.temp_title, newOp.title]);
await dbDriver.raw(
`UPDATE ?? SET ?? = array_to_string(array_replace(string_to_array(??, ','), ?, ?), ',')`,
[
table.table_name,
column.column_name,
column.column_name,
ch.temp_title,
newOp.title,
]
);
} else if (driverType === 'mssql') {
await dbDriver.raw(`UPDATE ?? SET ?? = substring(replace(concat(',', ??, ','), concat(',', ?, ','), concat(',', ?, ',')), 2, len(replace(concat(',', ??, ','), concat(',', ?, ','), concat(',', ?, ','))) - 2)`, [table.table_name, column.column_name, column.column_name, ch.temp_title, newOp.title, column.column_name, ch.temp_title, newOp.title]);
await dbDriver.raw(
`UPDATE ?? SET ?? = substring(replace(concat(',', ??, ','), concat(',', ?, ','), concat(',', ?, ',')), 2, len(replace(concat(',', ??, ','), concat(',', ?, ','), concat(',', ?, ','))) - 2)`,
[
table.table_name,
column.column_name,
column.column_name,
ch.temp_title,
newOp.title,
column.column_name,
ch.temp_title,
newOp.title,
]
);
} else if (driverType === 'sqlite3') {
await dbDriver.raw(`UPDATE ?? SET ?? = TRIM(REPLACE(',' || ?? || ',', ',' || ? || ',', ',' || ? || ','), ',')`, [table.table_name, column.column_name, column.column_name, ch.temp_title, newOp.title]);
await dbDriver.raw(
`UPDATE ?? SET ?? = TRIM(REPLACE(',' || ?? || ',', ',' || ? || ',', ',' || ? || ','), ',')`,
[
table.table_name,
column.column_name,
column.column_name,
ch.temp_title,
newOp.title,
]
);
}
}
}
@ -1029,7 +1263,7 @@ export async function columnUpdate(req: Request, res: Response<TableType>) {
const sqlMgr = await ProjectMgrv2.getSqlMgr({ id: base.project_id });
await sqlMgr.sqlOpPlus(base, 'tableUpdate', tableUpdateBody);
await Column.update(req.params.columnId, {
...colBody,
});

Loading…
Cancel
Save