Quick fix for #12502 - the schema was never updating in the UI no matter what was input despite the response - cleaned up the key parsing a little on the backend and made sure there is simply one schema that the frontend always uses, respecting whatever the backend responds with.
This commit is contained in:
parent
7e3d6019be
commit
507fa2b417
|
@ -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>
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue