Merge pull request #14328 from Budibase/budi-8468-oracle-connector-has-a-weird-ui-bug-when-fetching-tables-2

Fix tables showing up multiple times for Oracle in the datasource info endpoint.
This commit is contained in:
Sam Rose 2024-08-06 17:16:19 +01:00 committed by GitHub
commit e16929b574
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 55 additions and 14 deletions

View File

@ -17,9 +17,14 @@ import {
SupportedSqlTypes, SupportedSqlTypes,
JsonFieldSubType, JsonFieldSubType,
} from "@budibase/types" } from "@budibase/types"
import { DatabaseName, getDatasource } from "../../../integrations/tests/utils" import {
DatabaseName,
getDatasource,
knexClient,
} from "../../../integrations/tests/utils"
import { tableForDatasource } from "../../../tests/utilities/structures" import { tableForDatasource } from "../../../tests/utilities/structures"
import nock from "nock" import nock from "nock"
import { Knex } from "knex"
describe("/datasources", () => { describe("/datasources", () => {
const config = setup.getConfig() const config = setup.getConfig()
@ -167,9 +172,12 @@ describe("/datasources", () => {
[DatabaseName.ORACLE, getDatasource(DatabaseName.ORACLE)], [DatabaseName.ORACLE, getDatasource(DatabaseName.ORACLE)],
])("%s", (_, dsProvider) => { ])("%s", (_, dsProvider) => {
let rawDatasource: Datasource let rawDatasource: Datasource
let client: Knex
beforeEach(async () => { beforeEach(async () => {
rawDatasource = await dsProvider rawDatasource = await dsProvider
datasource = await config.api.datasource.create(rawDatasource) datasource = await config.api.datasource.create(rawDatasource)
client = await knexClient(rawDatasource)
}) })
describe("get", () => { describe("get", () => {
@ -435,20 +443,49 @@ describe("/datasources", () => {
}) })
describe("info", () => { describe("info", () => {
it("should fetch information about a datasource", async () => { it("should fetch information about a datasource with a single table", async () => {
const table = await config.api.table.save( const existingTableNames = (
tableForDatasource(datasource, { await config.api.datasource.info(datasource)
schema: { ).tableNames
name: {
name: "name", const tableName = generator.guid()
type: FieldType.STRING, await client.schema.createTable(tableName, table => {
}, table.increments("id").primary()
}, table.string("name")
}) })
)
const info = await config.api.datasource.info(datasource) const info = await config.api.datasource.info(datasource)
expect(info.tableNames).toContain(table.name) expect(info.tableNames).toEqual(
expect.arrayContaining([tableName, ...existingTableNames])
)
expect(info.tableNames).toHaveLength(existingTableNames.length + 1)
})
it("should fetch information about a datasource with multiple tables", async () => {
const existingTableNames = (
await config.api.datasource.info(datasource)
).tableNames
const tableNames = [
generator.guid(),
generator.guid(),
generator.guid(),
generator.guid(),
]
for (const tableName of tableNames) {
await client.schema.createTable(tableName, table => {
table.increments("id").primary()
table.string("name")
})
}
const info = await config.api.datasource.info(datasource)
expect(info.tableNames).toEqual(
expect.arrayContaining([...tableNames, ...existingTableNames])
)
expect(info.tableNames).toHaveLength(
existingTableNames.length + tableNames.length
)
}) })
}) })
}) })

View File

@ -423,7 +423,11 @@ class OracleIntegration extends Sql implements DatasourcePlus {
const columnsResponse = await this.internalQuery<OracleColumnsResponse>({ const columnsResponse = await this.internalQuery<OracleColumnsResponse>({
sql: OracleIntegration.COLUMNS_SQL, sql: OracleIntegration.COLUMNS_SQL,
}) })
return (columnsResponse.rows || []).map(row => row.TABLE_NAME) const tableNames = new Set<string>()
for (const row of columnsResponse.rows || []) {
tableNames.add(row.TABLE_NAME)
}
return Array.from(tableNames)
} }
async testConnection() { async testConnection() {