mirror of https://github.com/Fabio286/antares.git
fix(MySQL): creating temporary tables on export to overcome view dependency errors
This commit is contained in:
parent
bfdb463390
commit
e4c5d9b404
|
@ -58,7 +58,7 @@ module.exports = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'DOUBLE',
|
name: 'DOUBLE',
|
||||||
length: true,
|
length: false,
|
||||||
collation: false,
|
collation: false,
|
||||||
unsigned: false,
|
unsigned: false,
|
||||||
zerofill: false
|
zerofill: false
|
||||||
|
|
|
@ -102,7 +102,7 @@ export class MySQLClient extends AntaresCore {
|
||||||
return { name, length };
|
return { name, length };
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getTypeInfo (type: string) {
|
_getTypeInfo (type: string) {
|
||||||
return dataTypes
|
return dataTypes
|
||||||
.reduce((acc, group) => [...acc, ...group.types], [])
|
.reduce((acc, group) => [...acc, ...group.types], [])
|
||||||
.filter((_type) => _type.name === type.toUpperCase())[0];
|
.filter((_type) => _type.name === type.toUpperCase())[0];
|
||||||
|
|
|
@ -197,11 +197,35 @@ ${footer}
|
||||||
);
|
);
|
||||||
let sqlString = '';
|
let sqlString = '';
|
||||||
|
|
||||||
|
sqlString += this.buildComment('Creating temporary tables to overcome VIEW dependency errors');
|
||||||
|
|
||||||
|
// Temporary tables
|
||||||
for (const view of views) {
|
for (const view of views) {
|
||||||
sqlString += `DROP VIEW IF EXISTS \`${view.Name}\`;\n`;
|
const viewFields = await this._client.getTableColumns({ schema: this.schemaName, table: view.Name });
|
||||||
|
const tableFields: string[] = [];
|
||||||
|
|
||||||
|
for (const field of viewFields) {
|
||||||
|
const typeInfo = this._client._getTypeInfo(field.type);
|
||||||
|
const length = typeInfo.length ? field.enumValues || field.numLength || field.charLength || field.datePrecision : false;
|
||||||
|
|
||||||
|
tableFields.push(`\`${field.name}\` ${field.type.toUpperCase()}${length ? `(${length}${field.numScale ? `,${field.numScale}` : ''})` : ''} ${field.unsigned ? 'UNSIGNED' : ''} ${field.zerofill ? 'ZEROFILL' : ''} ${field.nullable ? 'NULL' : 'NOT NULL'} ${field.autoIncrement ? 'AUTO_INCREMENT' : ''} ${field.collation ? `COLLATE ${field.collation}` : ''}`);
|
||||||
|
}
|
||||||
|
sqlString +=
|
||||||
|
`
|
||||||
|
CREATE TABLE \`${view.Name}\`(
|
||||||
|
${tableFields.join(',\n\t')}
|
||||||
|
);`;
|
||||||
|
|
||||||
|
sqlString += '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlString += '\n';
|
||||||
|
|
||||||
|
for (const view of views) {
|
||||||
|
sqlString += `DROP TABLE IF EXISTS \`${view.Name}\`;\n`;
|
||||||
const viewSyntax = await this.getCreateTable(view.Name);
|
const viewSyntax = await this.getCreateTable(view.Name);
|
||||||
sqlString += viewSyntax.replaceAll('`' + this.schemaName + '`.', '');
|
sqlString += viewSyntax.replaceAll('`' + this.schemaName + '`.', '');
|
||||||
sqlString += '\n';
|
sqlString += '\n\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
return sqlString;
|
return sqlString;
|
||||||
|
|
Loading…
Reference in New Issue