Merge pull request #5542 from Budibase/fix/5495

Fix for SQL relationship based formulas
This commit is contained in:
Michael Drury 2022-04-22 16:51:24 +01:00 committed by GitHub
commit 141f9ed9dc
3 changed files with 45 additions and 10 deletions

View File

@ -60,6 +60,7 @@ export function getBindings({
)
const label = path == null ? column : `${path}.0.${column}`
const binding = path == null ? `[${column}]` : `${path}.0.[${column}]`
// only supply a description for relationship paths
const description =
path == null
@ -73,8 +74,8 @@ export function getBindings({
description,
// don't include path, it messes things up, relationship path
// will be replaced by the main array binding
readableBinding: column,
runtimeBinding: `[${column}]`,
readableBinding: label,
runtimeBinding: binding,
})
}
return bindings

View File

@ -323,6 +323,28 @@ module External {
return { row: newRow, manyRelationships }
}
squashRelationshipColumns(
table: Table,
row: Row,
relationships: RelationshipsJson[]
): Row {
for (let relationship of relationships) {
const linkedTable = this.tables[relationship.tableName]
if (!linkedTable) {
continue
}
const display = linkedTable.primaryDisplay
for (let key of Object.keys(row[relationship.column])) {
const related: Row = row[relationship.column][key]
row[relationship.column][key] = {
primaryDisplay: display ? related[display] : undefined,
_id: related._id,
}
}
}
return row
}
/**
* This iterates through the returned rows and works out what elements of the rows
* actually match up to another row (based on primary keys) - this is pretty specific
@ -354,12 +376,6 @@ module External {
if (!linked._id) {
continue
}
// if not returning full docs then get the minimal links out
const display = linkedTable.primaryDisplay
linked = {
primaryDisplay: display ? linked[display] : undefined,
_id: linked._id,
}
columns[relationship.column] = linked
}
for (let [column, related] of Object.entries(columns)) {
@ -417,7 +433,9 @@ module External {
relationships
)
}
return processFormulas(table, Object.values(finalRows))
return processFormulas(table, Object.values(finalRows)).map((row: Row) =>
this.squashRelationshipColumns(table, row, relationships)
)
}
/**

View File

@ -27,7 +27,8 @@ module MySQLModule {
user: string
password: string
database: string
ssl?: object
ssl?: { [key: string]: any }
rejectUnauthorized: boolean
}
const SCHEMA: Integration = {
@ -65,6 +66,11 @@ module MySQLModule {
type: DatasourceFieldTypes.OBJECT,
required: false,
},
rejectUnauthorized: {
type: DatasourceFieldTypes.BOOLEAN,
default: true,
required: false,
},
},
query: {
create: {
@ -114,6 +120,16 @@ module MySQLModule {
if (config.ssl && Object.keys(config.ssl).length === 0) {
delete config.ssl
}
// make sure this defaults to true
if (
config.rejectUnauthorized != null &&
!config.rejectUnauthorized &&
config.ssl
) {
config.ssl.rejectUnauthorized = config.rejectUnauthorized
}
// @ts-ignore
delete config.rejectUnauthorized
this.config = config
}