59 lines
1.6 KiB
JavaScript
59 lines
1.6 KiB
JavaScript
const sanitizeValue = value => {
|
|
if (typeof value === 'string') {
|
|
return `'${value}'`;
|
|
} else if (value === null) {
|
|
return 'NULL';
|
|
}
|
|
|
|
return value;
|
|
};
|
|
|
|
export const generateUpdateSqlQuery = (
|
|
schema,
|
|
table,
|
|
pks,
|
|
columnsUpdated,
|
|
formData
|
|
) => {
|
|
const setClauses = columnsUpdated
|
|
.map(colName => `${colName} = ${sanitizeValue(formData[colName])}`)
|
|
.join(', ');
|
|
const whereClause = Object.keys(pks)
|
|
.map(pk => `${pk} = ${pks[pk]}`)
|
|
.join(' AND ');
|
|
|
|
return `
|
|
START TRANSACTION;
|
|
UPDATE ${schema}.${table} SET ${setClauses} WHERE (${whereClause});
|
|
SELECT ${columnsUpdated.join(', ')} FROM ${schema}.${table} WHERE (${whereClause});
|
|
COMMIT;
|
|
`;
|
|
};
|
|
|
|
export const generateInsertSqlQuery = (
|
|
schema,
|
|
table,
|
|
formData,
|
|
columnsUpdated,
|
|
createModelDefault
|
|
) => {
|
|
const columns = createModelDefault.field
|
|
? [createModelDefault.field, ...columnsUpdated].join(', ')
|
|
: columnsUpdated.join(', ');
|
|
|
|
const values = createModelDefault.value
|
|
? [
|
|
createModelDefault.value,
|
|
...columnsUpdated.map(colName => sanitizeValue(formData[colName]))
|
|
].join(', ')
|
|
: columnsUpdated
|
|
.map(colName => sanitizeValue(formData[colName]))
|
|
.join(', ');
|
|
return `
|
|
START TRANSACTION;
|
|
INSERT INTO ${schema}.${table} (${columns}) VALUES (${values});
|
|
SELECT id, ${columnsUpdated.join(', ')} FROM ${schema}.${table} WHERE (id = LAST_INSERT_ID());
|
|
COMMIT;
|
|
`;
|
|
};
|