Merge pull request #13222 from Budibase/fix/BUDI-7814

Fix query schema updating
This commit is contained in:
Sam Rose 2024-03-11 14:13:31 +00:00 committed by GitHub
commit 0ff2f85dee
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 18 deletions

View File

@ -39,7 +39,7 @@
let integration
let schemaType
let autoSchema = {}
let schema = {}
let nestedSchemaFields = {}
let rows = []
let keys = {}
@ -52,6 +52,8 @@
schemaType = integration.query[query.queryVerb].type
newQuery = cloneDeep(query)
// init schema from the query if one already exists
schema = newQuery.schema
// Set the location where the query code will be written to an empty string so that it doesn't
// get changed from undefined -> "" by the input, breaking our unsaved changes checks
newQuery.fields[schemaType] ??= ""
@ -86,12 +88,7 @@
nestedSchemaFields = response.nestedSchemaFields
if (Object.keys(newQuery.schema).length === 0) {
// Assign this to a variable instead of directly to the newQuery.schema so that a user
// can change the table they're querying and have the schema update until they first
// edit it
autoSchema = response.schema
}
schema = response.schema
rows = response.rows
notifications.success("Query executed successfully")
@ -118,10 +115,7 @@
loading = true
const response = await queries.save(newQuery.datasourceId, {
...newQuery,
schema:
Object.keys(newQuery.schema).length === 0
? autoSchema
: newQuery.schema,
schema,
nestedSchemaFields,
})
@ -320,12 +314,10 @@
<QueryViewerSidePanel
onClose={() => (showSidePanel = false)}
onSchemaChange={newSchema => {
newQuery.schema = newSchema
schema = newSchema
}}
{rows}
schema={Object.keys(newQuery.schema).length === 0
? autoSchema
: newQuery.schema}
{schema}
/>
</div>
</div>

View File

@ -15,7 +15,7 @@ import { context, cache, auth } from "@budibase/backend-core"
import { getGlobalIDFromUserMetadataID } from "../db/utils"
import sdk from "../sdk"
import { cloneDeep } from "lodash/fp"
import { Datasource, Query, SourceName } from "@budibase/types"
import { Datasource, Query, SourceName, Row } from "@budibase/types"
import { isSQL } from "../integrations/utils"
import { interpolateSQL } from "../integrations/queries/sql"
@ -115,7 +115,7 @@ class QueryRunner {
}
let output = threadUtils.formatResponse(await integration[queryVerb](query))
let rows = output,
let rows = output as Row[],
info = undefined,
extra = undefined,
pagination = undefined
@ -170,7 +170,12 @@ class QueryRunner {
}
// get all the potential fields in the schema
let keys = rows.flatMap(Object.keys)
const keysSet: Set<string> = new Set()
rows.forEach(row => {
const keys = Object.keys(row)
keys.forEach(key => keysSet.add(key))
})
const keys: string[] = [...keysSet]
if (integration.end) {
integration.end()