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 integration
let schemaType let schemaType
let autoSchema = {} let schema = {}
let nestedSchemaFields = {} let nestedSchemaFields = {}
let rows = [] let rows = []
let keys = {} let keys = {}
@ -52,6 +52,8 @@
schemaType = integration.query[query.queryVerb].type schemaType = integration.query[query.queryVerb].type
newQuery = cloneDeep(query) 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 // 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 // get changed from undefined -> "" by the input, breaking our unsaved changes checks
newQuery.fields[schemaType] ??= "" newQuery.fields[schemaType] ??= ""
@ -86,12 +88,7 @@
nestedSchemaFields = response.nestedSchemaFields nestedSchemaFields = response.nestedSchemaFields
if (Object.keys(newQuery.schema).length === 0) { schema = response.schema
// 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
}
rows = response.rows rows = response.rows
notifications.success("Query executed successfully") notifications.success("Query executed successfully")
@ -118,10 +115,7 @@
loading = true loading = true
const response = await queries.save(newQuery.datasourceId, { const response = await queries.save(newQuery.datasourceId, {
...newQuery, ...newQuery,
schema: schema,
Object.keys(newQuery.schema).length === 0
? autoSchema
: newQuery.schema,
nestedSchemaFields, nestedSchemaFields,
}) })
@ -320,12 +314,10 @@
<QueryViewerSidePanel <QueryViewerSidePanel
onClose={() => (showSidePanel = false)} onClose={() => (showSidePanel = false)}
onSchemaChange={newSchema => { onSchemaChange={newSchema => {
newQuery.schema = newSchema schema = newSchema
}} }}
{rows} {rows}
schema={Object.keys(newQuery.schema).length === 0 {schema}
? autoSchema
: newQuery.schema}
/> />
</div> </div>
</div> </div>

View File

@ -15,7 +15,7 @@ import { context, cache, auth } from "@budibase/backend-core"
import { getGlobalIDFromUserMetadataID } from "../db/utils" import { getGlobalIDFromUserMetadataID } from "../db/utils"
import sdk from "../sdk" import sdk from "../sdk"
import { cloneDeep } from "lodash/fp" 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 { isSQL } from "../integrations/utils"
import { interpolateSQL } from "../integrations/queries/sql" import { interpolateSQL } from "../integrations/queries/sql"
@ -115,7 +115,7 @@ class QueryRunner {
} }
let output = threadUtils.formatResponse(await integration[queryVerb](query)) let output = threadUtils.formatResponse(await integration[queryVerb](query))
let rows = output, let rows = output as Row[],
info = undefined, info = undefined,
extra = undefined, extra = undefined,
pagination = undefined pagination = undefined
@ -170,7 +170,12 @@ class QueryRunner {
} }
// get all the potential fields in the schema // 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) { if (integration.end) {
integration.end() integration.end()