Fixing some issues with MySQL and dropping foreign key constrained columns.
This commit is contained in:
parent
2d2d342a8c
commit
67ed3dac19
|
@ -98,6 +98,7 @@ function generateManyLinkSchema(datasource, column, table, relatedTable) {
|
||||||
_id: buildExternalTableId(datasource._id, jcTblName),
|
_id: buildExternalTableId(datasource._id, jcTblName),
|
||||||
name: jcTblName,
|
name: jcTblName,
|
||||||
primary: [primary, relatedPrimary],
|
primary: [primary, relatedPrimary],
|
||||||
|
constrained: [primary, relatedPrimary],
|
||||||
schema: {
|
schema: {
|
||||||
[primary]: foreignKeyStructure(primary, {
|
[primary]: foreignKeyStructure(primary, {
|
||||||
toTable: table.name,
|
toTable: table.name,
|
||||||
|
@ -210,6 +211,12 @@ exports.save = async function (ctx) {
|
||||||
relationType
|
relationType
|
||||||
)
|
)
|
||||||
fkTable.schema[foreignKey] = foreignKeyStructure(foreignKey)
|
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
|
// foreign key is in other table, need to save it to external
|
||||||
if (fkTable._id !== table._id) {
|
if (fkTable._id !== table._id) {
|
||||||
extraTablesToUpdate.push(fkTable)
|
extraTablesToUpdate.push(fkTable)
|
||||||
|
@ -234,6 +241,13 @@ exports.save = async function (ctx) {
|
||||||
await makeTableRequest(datasource, op, extraTable, tables, oldExtraTable)
|
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
|
// store it into couch now for budibase reference
|
||||||
datasource.entities[tableToSave.name] = tableToSave
|
datasource.entities[tableToSave.name] = tableToSave
|
||||||
await db.put(datasource)
|
await db.put(datasource)
|
||||||
|
|
|
@ -46,6 +46,7 @@ export interface Table extends Base {
|
||||||
schema: TableSchema
|
schema: TableSchema
|
||||||
primaryDisplay?: string
|
primaryDisplay?: string
|
||||||
sourceId?: string
|
sourceId?: string
|
||||||
|
constrained?: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Row extends Base {
|
export interface Row extends Base {
|
||||||
|
|
|
@ -19,6 +19,7 @@ function generateSchema(schema: CreateTableBuilder, table: Table, tables: Record
|
||||||
schema.primary(metaCols.map(col => col.name))
|
schema.primary(metaCols.map(col => col.name))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// check if any columns need added
|
// check if any columns need added
|
||||||
const foreignKeys = Object.values(table.schema).map(col => col.foreignKey)
|
const foreignKeys = Object.values(table.schema).map(col => col.foreignKey)
|
||||||
for (let [key, column] of Object.entries(table.schema)) {
|
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)
|
.filter(([key, schema]) => schema.type !== FieldTypes.LINK && table.schema[key] == null)
|
||||||
.map(([key]) => key)
|
.map(([key]) => key)
|
||||||
deletedColumns.forEach(key => {
|
deletedColumns.forEach(key => {
|
||||||
|
if (oldTable.constrained && oldTable.constrained.indexOf(key) !== -1) {
|
||||||
|
schema.dropForeign(key)
|
||||||
|
}
|
||||||
schema.dropColumn(key)
|
schema.dropColumn(key)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -265,7 +265,7 @@ module MySQLModule {
|
||||||
if (Array.isArray(input)) {
|
if (Array.isArray(input)) {
|
||||||
const responses = []
|
const responses = []
|
||||||
for (let query of input) {
|
for (let query of input) {
|
||||||
responses.push(await internalQuery(this.client, query))
|
responses.push(await internalQuery(this.client, query, false))
|
||||||
}
|
}
|
||||||
return responses
|
return responses
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue