1
0
Fork 0
mirror of synced 2024-09-20 19:33:10 +12:00
This commit is contained in:
Sam Rose 2024-07-23 14:41:34 +01:00
parent 4ec7d49d2f
commit c7c2cb48e8
No known key found for this signature in database
3 changed files with 77 additions and 8 deletions

View file

@ -40,13 +40,14 @@ import { structures } from "@budibase/backend-core/tests"
import { DEFAULT_EMPLOYEE_TABLE_SCHEMA } from "../../../db/defaultData/datasource_bb_default" import { DEFAULT_EMPLOYEE_TABLE_SCHEMA } from "../../../db/defaultData/datasource_bb_default"
describe.each([ describe.each([
["in-memory", undefined], //["in-memory", undefined],
["lucene", undefined], //["lucene", undefined],
["sqs", undefined], //["sqs", undefined],
[DatabaseName.POSTGRES, getDatasource(DatabaseName.POSTGRES)], //[DatabaseName.POSTGRES, getDatasource(DatabaseName.POSTGRES)],
[DatabaseName.MYSQL, getDatasource(DatabaseName.MYSQL)], //[DatabaseName.MYSQL, getDatasource(DatabaseName.MYSQL)],
[DatabaseName.SQL_SERVER, getDatasource(DatabaseName.SQL_SERVER)], //[DatabaseName.SQL_SERVER, getDatasource(DatabaseName.SQL_SERVER)],
[DatabaseName.MARIADB, getDatasource(DatabaseName.MARIADB)], //[DatabaseName.MARIADB, getDatasource(DatabaseName.MARIADB)],
[DatabaseName.ORACLE, getDatasource(DatabaseName.ORACLE)],
])("search (%s)", (name, dsProvider) => { ])("search (%s)", (name, dsProvider) => {
const isSqs = name === "sqs" const isSqs = name === "sqs"
const isLucene = name === "lucene" const isLucene = name === "lucene"
@ -291,7 +292,7 @@ describe.each([
}) })
describe("equal", () => { describe("equal", () => {
it("successfully finds true row", async () => { it.only("successfully finds true row", async () => {
await expectQuery({ equal: { isTrue: true } }).toMatchExactly([ await expectQuery({ equal: { isTrue: true } }).toMatchExactly([
{ isTrue: true }, { isTrue: true },
]) ])

View file

@ -4,6 +4,7 @@ import * as mongodb from "./mongodb"
import * as mysql from "./mysql" import * as mysql from "./mysql"
import * as mssql from "./mssql" import * as mssql from "./mssql"
import * as mariadb from "./mariadb" import * as mariadb from "./mariadb"
import * as oracle from "./oracle"
import { GenericContainer, StartedTestContainer } from "testcontainers" import { GenericContainer, StartedTestContainer } from "testcontainers"
import { testContainerUtils } from "@budibase/backend-core/tests" import { testContainerUtils } from "@budibase/backend-core/tests"
import cloneDeep from "lodash/cloneDeep" import cloneDeep from "lodash/cloneDeep"
@ -16,6 +17,7 @@ export enum DatabaseName {
MYSQL = "mysql", MYSQL = "mysql",
SQL_SERVER = "mssql", SQL_SERVER = "mssql",
MARIADB = "mariadb", MARIADB = "mariadb",
ORACLE = "oracle",
} }
const providers: Record<DatabaseName, DatasourceProvider> = { const providers: Record<DatabaseName, DatasourceProvider> = {
@ -24,6 +26,7 @@ const providers: Record<DatabaseName, DatasourceProvider> = {
[DatabaseName.MYSQL]: mysql.getDatasource, [DatabaseName.MYSQL]: mysql.getDatasource,
[DatabaseName.SQL_SERVER]: mssql.getDatasource, [DatabaseName.SQL_SERVER]: mssql.getDatasource,
[DatabaseName.MARIADB]: mariadb.getDatasource, [DatabaseName.MARIADB]: mariadb.getDatasource,
[DatabaseName.ORACLE]: oracle.getDatasource,
} }
export function getDatasourceProviders( export function getDatasourceProviders(
@ -59,6 +62,9 @@ export async function knexClient(ds: Datasource) {
case SourceName.SQL_SERVER: { case SourceName.SQL_SERVER: {
return mssql.knexClient(ds) return mssql.knexClient(ds)
} }
case SourceName.ORACLE: {
return oracle.knexClient(ds)
}
default: { default: {
throw new Error(`Unsupported source: ${ds.source}`) throw new Error(`Unsupported source: ${ds.source}`)
} }

View file

@ -0,0 +1,62 @@
import { Datasource, SourceName } from "@budibase/types"
import { GenericContainer, Wait } from "testcontainers"
import { generator, testContainerUtils } from "@budibase/backend-core/tests"
import { startContainer } from "."
import knex from "knex"
let ports: Promise<testContainerUtils.Port[]>
export async function getDatasource(): Promise<Datasource> {
if (!ports) {
let image = "oracle/database:19.3.0.0-ee"
if (process.arch.startsWith("arm")) {
image = "samhuang78/oracle-database:19.3.0-ee-slim-faststart"
}
ports = startContainer(
new GenericContainer(image)
.withExposedPorts(1521)
.withEnvironment({ ORACLE_PASSWORD: "password" })
.withWaitStrategy(Wait.forHealthCheck().withStartupTimeout(10000))
)
}
const port = (await ports).find(x => x.container === 1521)?.host
if (!port) {
throw new Error("Oracle port not found")
}
const datasource: Datasource = {
type: "datasource_plus",
source: SourceName.ORACLE,
plus: true,
config: {
host: "127.0.0.1",
port,
database: "postgres",
user: "SYS",
password: "password",
},
}
const database = generator.guid().replaceAll("-", "")
const client = await knexClient(datasource)
await client.raw(`CREATE DATABASE "${database}"`)
datasource.config!.database = database
return datasource
}
export async function knexClient(ds: Datasource) {
if (!ds.config) {
throw new Error("Datasource config is missing")
}
if (ds.source !== SourceName.ORACLE) {
throw new Error("Datasource source is not Oracle")
}
return knex({
client: "oracledb",
connection: ds.config,
})
}