1
1
mirror of https://github.com/Fabio286/antares.git synced 2025-06-05 21:59:22 +02:00

feat: ability to edit table fields

This commit is contained in:
2020-11-13 12:39:40 +01:00
parent ae47a978c1
commit 249926b8e0
20 changed files with 1085 additions and 194 deletions

View File

@ -192,6 +192,7 @@ export class MySQLClient extends AntaresCore {
charset: field.CHARACTER_SET_NAME,
collation: field.COLLATION_NAME,
autoIncrement: field.EXTRA.includes('auto_increment'),
onUpdate: field.EXTRA.toLowerCase().includes('on update') ? field.EXTRA.replace('on update', '') : '',
comment: field.COLUMN_COMMENT
};
});
@ -266,6 +267,43 @@ export class MySQLClient extends AntaresCore {
});
}
/**
* ALTER TABLE
*
* @returns {Array.<Object>} parameters
* @memberof MySQLClient
*/
async alterTable (params) {
const {
table,
// additions,
// deletions,
changes
} = params;
let sql = `ALTER TABLE \`${table}\` `;
const alterColumns = [];
changes.forEach(change => {
const length = change.numLength || change.charLength || change.datePrecision;
alterColumns.push(`CHANGE COLUMN \`${change.orgName}\` \`${change.name}\`
${change.type.toUpperCase()}${length ? `(${length})` : ''}
${change.unsigned ? 'UNSIGNED' : ''}
${change.nullable ? 'NULL' : 'NOT NULL'}
${change.autoIncrement ? 'AUTO_INCREMENT' : ''}
${change.default ? `DEFAULT ${change.default}` : ''}
${change.comment ? `COMMENT '${change.comment}'` : ''}
${change.collation ? `COLLATE ${change.collation}` : ''}
${change.onUpdate ? `ON UPDATE ${change.onUpdate}` : ''}
${change.after ? `AFTER \`${change.after}\`` : 'FIRST'}`);
});
sql += alterColumns.join(', ');
return await this.raw(sql);
}
/**
* @returns {String} SQL string
* @memberof MySQLClient
@ -361,16 +399,18 @@ export class MySQLClient extends AntaresCore {
if (err)
reject(err);
else {
const remappedFields = fields ? fields.map(field => {
return {
name: field.name,
orgName: field.orgName,
schema: field.db,
table: field.table,
orgTable: field.orgTable,
type: 'varchar'
};
}) : [];
const remappedFields = fields
? fields.map(field => {
return {
name: field.name,
orgName: field.orgName,
schema: field.db,
table: field.table,
orgTable: field.orgTable,
type: 'varchar'
};
})
: [];
if (args.details) {
let cachedTable;
@ -395,9 +435,11 @@ export class MySQLClient extends AntaresCore {
try { // Table data
const response = await this.getTableColumns(paramObj);
let detailedFields = response.length ? selectedFields.map(selField => {
return response.find(field => field.name === selField.name && field.table === selField.table);
}).filter(el => !!el) : [];
let detailedFields = response.length
? selectedFields.map(selField => {
return response.find(field => field.name === selField.name && field.table === selField.table);
}).filter(el => !!el)
: [];
if (selectedFields.length) {
detailedFields = detailedFields.map(field => {