1
0
Fork 0
mirror of synced 2024-09-30 00:57:16 +13:00

Fixing some issues with MySQL and dropping foreign key constrained columns.

This commit is contained in:
mike12345567 2021-11-02 13:36:23 +00:00
parent 5d40882c66
commit 953c90c8d4
4 changed files with 20 additions and 1 deletions

View file

@ -98,6 +98,7 @@ function generateManyLinkSchema(datasource, column, table, relatedTable) {
_id: buildExternalTableId(datasource._id, jcTblName),
name: jcTblName,
primary: [primary, relatedPrimary],
constrained: [primary, relatedPrimary],
schema: {
[primary]: foreignKeyStructure(primary, {
toTable: table.name,
@ -210,6 +211,12 @@ exports.save = async function (ctx) {
relationType
)
fkTable.schema[foreignKey] = foreignKeyStructure(foreignKey)
if (fkTable.constrained == null) {
fkTable.constrained = []
}
if (fkTable.constrained.indexOf(foreignKey) === -1) {
fkTable.constrained.push(foreignKey)
}
// foreign key is in other table, need to save it to external
if (fkTable._id !== table._id) {
extraTablesToUpdate.push(fkTable)
@ -234,6 +241,13 @@ exports.save = async function (ctx) {
await makeTableRequest(datasource, op, extraTable, tables, oldExtraTable)
}
// make sure the constrained list, all still exist
if (Array.isArray(tableToSave.constrained)) {
tableToSave.constrained = tableToSave.constrained.filter(constraint =>
Object.keys(tableToSave.schema).includes(constraint)
)
}
// store it into couch now for budibase reference
datasource.entities[tableToSave.name] = tableToSave
await db.put(datasource)

View file

@ -46,6 +46,7 @@ export interface Table extends Base {
schema: TableSchema
primaryDisplay?: string
sourceId?: string
constrained?: string[]
}
export interface Row extends Base {

View file

@ -19,6 +19,7 @@ function generateSchema(schema: CreateTableBuilder, table: Table, tables: Record
schema.primary(metaCols.map(col => col.name))
}
// check if any columns need added
const foreignKeys = Object.values(table.schema).map(col => col.foreignKey)
for (let [key, column] of Object.entries(table.schema)) {
@ -78,6 +79,9 @@ function generateSchema(schema: CreateTableBuilder, table: Table, tables: Record
.filter(([key, schema]) => schema.type !== FieldTypes.LINK && table.schema[key] == null)
.map(([key]) => key)
deletedColumns.forEach(key => {
if (oldTable.constrained && oldTable.constrained.indexOf(key) !== -1) {
schema.dropForeign(key)
}
schema.dropColumn(key)
})
}

View file

@ -265,7 +265,7 @@ module MySQLModule {
if (Array.isArray(input)) {
const responses = []
for (let query of input) {
responses.push(await internalQuery(this.client, query))
responses.push(await internalQuery(this.client, query, false))
}
return responses
}