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:
commit
e16929b574
|
@ -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
|
||||||
|
)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
Loading…
Reference in New Issue